ucos-ii中的任务
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任当务控应制用块结程构序的主调要用成员函数OSTaskCreate( )
任务及控任制务块控(O制S_块TC链B)表 t…y创统进任务控这表…pOssIII数具链的表…ettNNNrrd…S建函行务控制个的TTTuue任_会有接任。fcc188Stts任 任 制 认6UU务T一数初从制块任头μ栈务理控tooUr当由按相为务即Kuss控__c个始空块各务部O务务块和ttt制*C指有的制cc进于用应一,相oSObbOOOs/块任化任,个控T_S**SSS控的的管行这户数个故当tT优针关O块OOC链TTTcbCSS务。务然成制BCCCS表系 些提量链这于BTT{BBBI制 身 任理先、 的-SCCDSP时这控后员块ntIBBtr统任供的表个是kliayi块 份 务的NPPot级任 属I;,个制用进链t;r;te初务的任。链一re用x///;vt///就 证 是这函块任行入(任任任/;;别务 性//始控任务表些指///指务务务来指O个数链务赋到)向相 , 不等的 的向化制务控叫空S等的的向来任_记函首表的值任后待当优前L时块数制做白当 没 能务为一当 表O一的前先一空数先获属,务W 堆录个,还为块空的时状级个任任于 有 被栈E些前 就会为取性最控任限态别任S务初没系并任身任栈务T务标(务是 任 系控与状 叫调 被 一 对后 制_顶控始有统 把务份志节P控控制务的R用创个任再块制拍一务统制任态做块化对创它块证I指制块O数块的链系建任务把链针个控承的函应建们链。)务任、的块表指堆指管任务针针
任务都应该配有自己的堆栈, 例如: & MyTaskStk[MyTaskStkN-1],//任务堆栈栈顶地址
务用时的,处任一理务定器要对堆注堆意栈栈所 增使长 任 部 #/d/定e)…务分f义; i…堆n堆栈e的20长栈T度A是SK_任STK务_SI的ZE重51要/2/任务的的组优先成级别
方向的支持是向上的还 } //定义一个数组来作为任务堆栈 OS是_ST向K T下ask的Stk[TASK_STK_SIZE];
一个可以带有临界段的无限 不可以被中断的用户代码; OS_EXIT_CRITICAL( ); //退出临界段(开中断)
循环。 一般结构 可以被中断的用户代码;
} }
无限循
环
正在运行的任务,需要
等待一段时间或需要等
待一个事件发生再运行
时,该任务就会把CPU
任务在没有被配备
的使用权让给别的任务
任务控制块或被剥 夺了任务控制块时
任务在系统中的身份证
ty前pe系 dOeS面f_统SsT由谈tK如ru于c到何*tO系S来oT,sC统_B识tS一c存tb别kP在{个t并r;着任管多理务个/一/指的任个向务任任任,务务务堆于就栈控是栈是制顶的块指针 } O的处其的息S基一结控……_一 的 个 惟 任 另不显应IIT于个构制NN理提主 实。……CTT个最名务一B上保,块88同该外 然;UU要 ,高器述存这(所需直称的的由, ,的 保T原与个以作 随,要接。优的优C于因该数B前 记时存),解的先先,任据μ它用 着堆。C系务结刻到面录决 办 级任级OO/就 任还栈SS统有构O的 法 来TT务别也了还任S必关就CC是务应指BB-问 是 作控,须的叫SPI谈任处务trI为相做ai中该保管针题 为 为制因to每关该;;于控到务的。 每 任块此保存理寄个信任//任状不制,识 一 务还μ//任息务任任该工存存C务的的务别 个 的要/务务一态同块O创数任一任作器都的的一 任 标来S建据务的的中个-当优有些务的个务识S保II前先P是数状。任一的任起存状级的 复其。用个据 态别。务态务一该他虚 杂标也,在志信拟 性
一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用 该函数让另一个任务进入睡眠态。
调用OSStart()可以启动多任务。OSStart()函数运行进入就绪态 的优先级最高的任务。就绪的任务只有当所有优先级高于这个任务 的任务转为等待状态,或者是被删除了,才能进入运行态。
正在运行的任务期待某一事件的发生时也要等待,手段是调 用以下3个函数之一:OSSemPend(),OSMboxPend(),或 OSQPend()。调用后任务进入了等待状态(WAITING)。
当任务因等待事件被挂起(Pend),下一个优先级最高的就 绪任务立即得到了CPU的控制权。
当事件发生了,被挂起的任务进入就绪态。
事件发生的报告可能来自另一个任务,也可能来自中断服务子 程序。
正在运行的任务是可以被中断的,除非该任务将中断关了, 或者μC/OS-Ⅱ将中断关了。
被中断了的任务就进入了中断服务态(ISR)。响应中断时, 正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。 中断服务子程序可能会报告一个或多个事件的发生,而使一个 或多个任务进入就绪态。
这函个数及表执就行叫中做断服任务务程就序绪结束状时态总表是,调
简用称调度叫器任,务来就确定绪应表该运行的任务并运
行它 。
任务就绪表就是一个数组OSRdyTbl——位表
为加快访问任务就绪表的 速度,系统定义了一个变 量OSRdyGrp来表明就绪表 每行中是否存在就绪任务。
OSTaskOISd_lEXOeIS(Td_leC)CR的tIrT++I系C; A统L( )任; 务////计 开数 放中断
} }
μC/OS-II提供的另一个系统任务是统
计任务OSTaskStat( )。这个统计任务
每的式系秒时存统计间放提算,在一并变供次把量的CO计PS另UC算在PU结—一单sa果—个位g以e中时统任百,间分计务以内比任便被的应使务形用用
它的原型如下:
应用程序在创建一个新任务的
任务堆栈的初始化 由方行由将一其虚时 任 初 栈 事于式μ用在步μO堆来实拟S指候始先务各不户本的OC,处栈 完TC/S种尽来书介Oa/针,数存时_任理Ss初O成S处相编有绍-kS务器T、必据放CI始-C任K理同写关IPrI堆的的程须 (在e化I务U*O器,。vvI)μ栈N在;初aO移ooS各序把 任任t函堆的因实iCiTS_dd的始创e植/1TS寄寄此现数O状(在 务栈务(*6aT初化*时Sp建UstK存该这-dkO)初a存态系 指的始(,IaSso任中S*kt器函个ItpT始o化复器kp字统 针堆)按移t,务通a(It及数函von就位s化所植所o等启 、栈si过k函对需数t,i(是)dS工使的需等动任中堆 要 的调数t*对。用章k作p栈用具要用)I这务d该的节)n的,的户体任i的任,个堆处中t操在细务务(理做作进节的)器进,
行状态
睡眠态指任务驻留在程序空间之中,还没有交给μC/OS-Ⅱ 管理, 把任务交给μC/OS-Ⅱ是通过调用下述两个函数之一: OSTaskCreate()或OSTaskCreateExt()。当任务一旦建立,这 个任务就进入就绪态准备运行。
任务的建立可以是在多任务运行开始之前,也可以是动态地被一个 运行着的任务建立。如果一个任务是被另一个任务建立的,而这个 任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立 即得到CPU的控制权。
任务的优先级别。
分析OS_CORE.C中的OSInit函数中关于任务控制块的代码
任务在内存中的结构
void MyTask(void *pdata)
{ for (;;)
临界段
用户任务代码的 μ{ C可/以O被S中-断I的I用任户代务码;的代码结构是 OS_ENTER_CRITICAL( );//进入临界段(关中断)
保存CPU寄存器中的内容及存 v{oi在d m应ain(用voi程d) 序/t/中y这pe是定de系f义统un任定si在g义n务创e的d建堆一in用t个栈户O数的任S据_务S栈类T时K型区,; 要非常简单,
即定……义一个OS_STK类传型递任的务一的个堆栈数指组针和并在创建
使OS用Ta函sk数Create( )创建任 储任务私有数据的需要,每个 一 可以个OS了任Ta。s务kM&CMr时yeTayatT把esak(s,k这Ag个u, 数组任//的//任传务地务递优的给址先指任级赋针 务别的给参该数任务就
μC/OS-II中的任务
任务的基本概念
从应用程序设计的角度来看,UC/OS-II的任务就是一个 线程,就是一个用来解决用户问题的C语言函数和与之相关 的一些数据结构而构成的一个实体
从任务的存储结构来看,UC/OS-II的任务由任务程序代码、 任务堆栈和任务控制块组成
任务控制块—— 任务控制块结构的主要成员
…… } OS_TCB;
OSTaskCreate( )源代码细节
检测优先级是否合法 相关宏定义:OS_LOWEST_PRIO
3、任务堆栈初始化:
OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
在这种情况下,从中断服务子程序返回之前,μC/OS-Ⅱ要 判定,被中断的任务是否还是就绪态任务中优先级最高的。如果 中断服务子程序使一个优先级更高的任务进入了就绪态,则新进 入就绪态的这个优先级更高的任务将得以运行,否则原来被中断 了的任务才能继续运行。
void OSTaskIdle(void* pdata)
{##e在 常 可 为infdOi多运会了fS注 有系Op_dS意调Ca任行在使_tμ用使R!用aC统I=CPT空任C务而某UIp闲务户用CP/d_提Aa任延SO系处个UtRLa务时在应这;_Sc供M统 于时中函pu-没没数E_用个IT运 所间s的IHr有;空规O行 谓内程空闲D空用任个/=/定时 的无防务计序闲=户闲止只数3, 空用,是工某任必任任做作系 闲户些一了务编须务一统状任务译可个器,经态务执报,错 行的f{or时(而;;) 候且有这事个可做任,务μ是C/不OS-II 能用软件来删除的 提供了O一S_个ENT叫ER做_CR空IT闲ICA任L( 务);//关闭中断
程序通过访问它来了解CPU的利用率, 所以这个系统任务OSTaskStat( )叫做 统计任务
任务及的优优先先级权别 用O常明常使O个固O应把计别OSSSS户_数应数用_定_用优任是_CLLL可F用一的OO地O程先务:OGWSWW权 一 表 优 则 低以.程旦优E_μ,E序级,E0HSLCSS,表个 先分 示根序被先T中O系T中别因T/_W__1O示级 级为 。据中定P通E统P还此PO,SRSRRS任别 别应任义I过T数6_总I使I_用2O_4IOOL…用务,为给P,I都最务字个是用O自户-RWO1把程优则:表I共把了E动任S个用高的优0OS_表任序先意示赋0O最统T赋务L一,优先,S_O示务的级味最值_低计P给W可个先数级L1RE需别着低的O,任的优任I空S以W数级字别OT要的系优方E2务优先务闲_-使S,字别P越 1,, 数统先法T级 ,任R自用的先_…I来越大每在目中级,P别系务O动的R…-文。可别来I统。赋优2O,,件该供的说+则如给先1共会果统级
μ的C依/O据S_就II进是行任任务务就调绪度表 立任作了务的μ函都一C数/在个O就S记这_叫II进个录做行调表表任及度,中务器系占调。度统据的中一思的个想每位是个置,
并“就用绪近任似这务地个处每位于时置每运刻行的任总状状态是务态”让(优调。先1为或度级了最者保高0证)的
来这表一点示,任它务在是系统否或处用于户就任务绪调状用态系,统
。 一个正在运行的
而使任务进务的
断申请就会中止
任务的状态及其转换 睡眠状态
运行而去执行中 断服务程序,这 时任务的状态叫
做中断服务状态
系统为任务配备 了任务控制块且 在任务就绪表中 进行了就绪登记, 这时任务的状态 叫做就绪状态。
处于就绪状态的 任务如果经调度
器判断获得了 CPU的使用权, 则任务就进入运
4、任务控制块初始化:注意与“堆栈初始化”在返还值上的区别
用OSTaskCreateExt( )创建任务
注意:UC/OS-II不允许在中断服务程序中创建任务
为了多能任够务使操系作系统统清的楚核地心知工作道就,是系任
统没务个中有调任所度务哪就。谓中任些绪调确任,度务定务μ,该C就就已运/O是行经绪S通的_就I表过任I在绪一务R,个,A算做哪M法这些中在项还设工多