- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
任务的创建与运行
实验 3. 任务的创建与运行 一,实验目的: 观察和理解uC/OS-II启动的过程、任务的运行; 学习并理解uC/OS-II的两个任务创建函数的使用; 初步理解钩子(Hook)函数的作用; 二,任务函数uC/OS-II提供的任务创建函数 uC/OS-II中任务的主体是任务函数。为了让任务运行,必须首先在系统中创建它。 uC/OS-II提供了两个创建任务的函数,OSTaskCreate()和OSTaskCreateExt()。 OSTaskCreate()函数 函数原型: INT8U OSTaskCreate( void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8Uprio); 参数的含义: void (void *pd) 指向任务体函数的指针 void *pada 外部获取数据。 数据指针,指向传给任务的数据区。通过这个指针任务函数可以从OS_STK *ptos 指向任务堆栈的栈顶(top of )的指针。 INT8U prio 任务的优先级。 OSTaskCreateExt()函数 函数原型 INT8U OSTaskCreateExt( void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8Uprio, INT16U id, OS_STK *pbos, INT32Ustk_size, void *pext, INT16U opt); 参数的意义: INT16U id 任务的ID号。在uC/OS-II中并没有真正被使用到。因为每个优先级的任务只有一个,优先级号就成了实际的任务号。但在实际工程编程时最好填上合适的标记,为以后的升级做好准备。 OS_STK *pbos 指向任务堆栈的栈底(bottom of stack)的指针。 INT32U stk_size 堆栈的大小。以堆栈宽度为单位。 void *pext 指向扩展数据区的指针。 注:尽量使用OSCreateTaskExt()函数来创建任务,因为这个函数具有更强的灵活性。 3. 任务的堆栈 任务的所有变量都是建立在其堆栈上的。在创建任务时,设计者要对任务的内存消耗做出充分的估计,并以此为依据为任务分配适当大小的堆栈。堆栈不足将导致任务奔溃。 在使用堆栈时,必须考虑堆栈的增长方向和栈顶是否已经保存了数据。对于不同的CPU,其堆栈使用的策略是不同的。软件设计者要特别注意这一点。对于大部分情况,例如在我们实验中采用的是Windows环境下的模拟或者以ARM为内核的CPU,堆栈策略是满减栈 (Full Descending)。假设我们为任务分配数组Stack[STK_SIZE]作为其堆栈,那么初始时,其栈顶位置为Stack[STK_SIZE-1],栈底位置为Stack[0]。 三,任务的创建在创建任务时,要按照创建函数的要求,为任务设立各种工作条件,包括指定任务体函数,设计堆栈,指定任务优先级等等。 本实验中包含两个任务,Task1和Task2,他们的函数体如下: void Task1 (void *para) { INT8U id; for (;;) { OS_Printf(This is task 1.\n); OSTimeDly(50); } } void Task2 (void *para) { INT8U id; for (;;) { OS_Printf(This is task 2.\n); OSTimeDly(70); } } 使用OSTaskCreateExt()创建任务的方法示例: err = OSTaskCreateExt((void (*)(void *)) Task1, (void *) 0, (OS_STK *)TaskStk1[TASK_STK_SIZE-1], (INT8U) TASK1_PRIO, (INT16U) TASK1_PRIO, (OS_STK *)TaskStk1[0], (INT32U) TASK_STK_SIZE, (void *) 0, (INT16U) (OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR) ); if(err) OS_Printf(”Task creates error !\n”); 使用OSTaskCreate()创建任务的方法示例: err = OSTaskCreat
您可能关注的文档
- vmware用户权限配置文档.docx
- Testin云测试分享_201410.docx
- PHP实例2用户管理系统.doc
- VOLTE用户管理指导手册.docx
- ShopNC多用户商城系统商家手册.doc
- Weblogic12c安装部署手册.doc
- WhoGetstheGoodGenes.doc
- Win10升级助手产品常见问题汇总727.docx
- Win7_remote_assistance.doc
- WindowsServer2012中通过WEB修改域用户账号密码.docx
- [大理]2024年云南大理洱源县发展和改革局公益性岗位招聘笔试典型考题与考点研判含答案详解.docx
- [嘉兴]浙江省嘉兴市桐乡市石门镇图书馆图书管理员招聘笔试典型考题与考点研判含答案详解.docx
- [大理]云南大理永平县消防救援大队公益性岗位人员(保洁人员)招聘笔试典型考题与考点研判含答案详解.docx
- 计划生育手术假期规定.pptx
- 机关事业单位丧假规定.pptx
- 2024年河北承德市市直事业单位引进硕士研究生以上人才66人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- 2024年河北廊坊三河市人民政府招聘营商环境义务监督员30人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- 2024年河北张家口崇礼区选聘高学历人才24人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- 2024年河北廊坊固安县招聘事业单位人员6人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- 2024年河北张家口市桥东区事业单位公开招聘工作人员50人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
文档评论(0)