- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
ARMCortex-M3嵌入式控制技术
——基于STM32F103RCT6
嵌入式实时操作系统μC/OS-II
第十一章
μC/OS-II任务管理
本章将介绍μC/OS-II任务管理相关的系统函数及其应用方法,并将深入剖析多任务的工程实例及其工作原理,然后,还将介绍统计任务的作用和系统定时器的创建方法。
本章的学习目标:
? 了解统计任务的用法;
? 熟悉μC/OS-II用户任务相关的系统函数;
? 掌握μC/OS-II用户任务的创建方法;
? 熟练应用库函数方法创建多任务工程。
1μC/OS-II用户任务2μC/OS-II多任务工程实例3统计任务实例4系统定时器
11.1μC/OS-II用户任务相对于系统任务而言,μC/OS-II应用程序中用户创建的任务,称为用户任务,每个用户任务都在周期性地执行着某项工作,或请求到事件后执行相应的功能。用户任务的特点如下:(1)用户任务对应的函数是一个带有无限循环体的函数,由于具有无限循环体,故该类函数没有返回值。(2)用户任务对应的函数具有一个“void*”类型的指针参数,该类型指针可以指向任何类型的数据,通过该指针在任务创建时向任务传递一些数据,这种传递只能发生一次,即创建任务的时候,一旦任务开始工作,就无法再通过函数参数向任务传递数据了。(3)每个用户任务具有唯一的优先级号,取值范围为0~OS_LOWEST_PRIO-3(OS_LOWEST_PRIO为os_cfg.h中宏定义的常量,最大值为254),一般地,系统的空闲任务优先级号为OS_LOWEST_PRIO,统计任务的优先级号为OS_LOWEST_PRIO-1,定时器任务的优先级号常设定为OS_LOWEST_PRIO-2。此外,需要为优先级继承优先级留出优先级号,所以,用户任务的优先级号一般为5~OS_LOWEST_PRIO-3。在基于STM32F103RCT6的工程中,OS_LOWEST_PRIO被宏定义为63(参考表10-2和程序段10-10的os_cfg.h文件),定时器任务的优先级号为61,因此,用户任务的优先级号的取值范围为5~60。(4)每个用户任务具有独立的堆栈,使用OS_STK类型定义堆栈,堆栈数组的大小一般要在50(即200字节)以上。
函数原型功能INT8UOSTaskCreate(void(*task)(void*p_arg),void*p_arg,OS_STK*ptos,INT8Uprio);创建一个任务。4个参数的含义依次为:用户任务对应的函数名、函数参数、任务堆栈、任务优先级。可以在启动多任务前创建任务,也可在一个已经运行的任务中创建新的任务,但不能在中断服务程序中创建任务。任务函数必须包含无限循环体,且必须调用OSMboxPend、OSFlagPend、OSMutexPend、OSQPend、OSSemPend、OSTimeDly、OSTimeDlyHMSM、OSTaskSuspend和OSTaskDel中的一个,用于实现任务调度。任务优先级不应取为0~4,并且不能取为OS_LOWEST_PRIO-1~OS_LOWEST_PRIOINT8UOSTaskCreateExt(void(*task)(void*p_arg),void*p_arg,OS_STK*ptos,INT8Uprio,INT16Uid,OS_STK*pbos,INT32Ustk_size,void*pext,INT16Uopt);与OSTaskCreate作用相同,用于创建一个任务。该函数的前4个参数与OSTaskCreate相同,增加了表示任务ID号、任务堆栈栈底、任务堆栈大小、用户定义的任务外部空间指针和任务创建选项等参数。如果要对任务的堆栈进行检查,必须使用该函数创建任务,且opt应设置为“OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR”,本书中实例全部使用该函数创建用户任务INT8UOSTaskDel(INT8Uprio);通过指定任务优先级
文档评论(0)