任务的创建与运行

任务的创建与运行

ID:43397031

大小:134.26 KB

页数:5页

时间:2019-10-01

任务的创建与运行_第1页
任务的创建与运行_第2页
任务的创建与运行_第3页
任务的创建与运行_第4页
任务的创建与运行_第5页
资源描述:

《任务的创建与运行》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验3任务的创建与运行一,实验目的:1.观察和理解uC/OS-II启动的过程、任务的运行;2.学习并理解uC/OS-II的两个任务创建函数的使用;3.初步理解钩子(Hook)函数的作用;二,任务函数uC/OS-II提供的任务创建函数UC/OS-H中任务的主体是任务函数。为了让任务运行,必须首先在系统中创建它。uC/OS-II提供了两个创建任务的函数,OSTaskCreate()和OSTaskCreateExt()。1.OSTaskCreate()函数函数原型:INT8UOSTaskCreate(void(*task)(void*pd),void*pdata

2、,OS.STK*ptoszINT8Uprio);参数的含义:void(void*pd)指向任务体函数的指针void*pada外部数据指针,指向传给任务的数据区。通过这个指针任务函数可以从获取数据。OS_STK*ptos指向任务堆栈的栈顶(topof)的指针。INT8Uprio任务的优先级。2.OSTaskCreateExt()函数函数原型(*task)(void*pd),OS_STK*ptos,INT16Uid,INT32Uvoid*pextzINT8UOSTaskCreateExt(voidvoid*pdaINT8Uprio,OS_STK*pbos,st

3、k_size,INT16Uopt);参数的意义:INT16Uid任务的ID号。在uC/OS-II中并没有真正被使用到。因为每个优先级的任务只有一个,优先级号就成了实际的任务号。但在实际工程编程时最好填上合适的标记,为以后的升级做好准备。OS_STK*pbos指向任务堆栈的栈底(bottomofstack)的指针。INT32Ustk_size堆栈的大小。以堆栈宽度为单位。void*pext指向扩展数据区的指针。注:尽量使用OSCreateTaskExt()函数来创建任务,因为这个函数具有更强的灵活性。3.任务的堆栈任务的所有变量都是建立在其堆栈上的。在创建任

4、务时,设计者要对任务的内存消耗做出充分的估计,并以此为依据为任务分配适当大小的堆栈。堆栈不足将导致任务奔溃。在使用堆栈时,必须考虑堆栈的增长方向和栈顶是否已经保存了数据。对于不同的CPU,其堆栈使用的策略是不同的。软件设计者要特别注意这一点。对于大部分情况,例如在我们实验中采用的是Windows环境下的模拟或者以ARM为内核的CPU,堆栈策略是满减栈(FullDescending)o假设我们为任务分配数组Stack[STK_SIZE]作为其堆栈,那么初始时,其栈顶位置为&Stack[STK_SIZE-l],栈底位置为&Stack[0]o三,任务的创建在创建

5、任务时,要按照创建函数的要求,为任务设立各种工作条件,包括指定任务体函数,设计堆栈,指定任务优先级等等。本实验中包含两个任务,Taskl和Task2,他们的函数体如下:voidTaskl(void*para){INT8Uid;for(;;){OS_Printf(”Thisistask1.");OSTimeDly(50);}}voidTask2(void*para){INT8Uid;for(;;){OS_Printf("Thisistask2.");OSTimeDly(70);}}使用OSTaskCreateExt()创建任务的方法示例:(void*

6、)(OS_STK*)TASK1_PRIO,(INT16U)(OS_STK*)(INT32U)(void*)(INT16U)err=OSTaskCreateExt((void(*)(void*))Taskl,0,(INT8U)&TaskStkl[TASK_STK_SIZE-1],TASK1_PRIOZ&TaskStkl[0],TASK_STK_SIZE,0,(OS_TASK_OPT_STK_CHK

7、OS_TASK_OPT_STK_CLR));if(err)OS_Printf(z,Taskcreateserror!〃);main•c#include#def

8、ine#define#define使用OSTaskCreate()创建任务的方法示例:err=OSTaskCreate((void(*)(void*))Taskl,(void*)0,(OS_STK(INT8U)if(err)OS_*)&TaskStkl[TASK_STK_SIZE-1],TASK1_PRIO);.Printf("Taskcreateserror!〃);四,实验代码:"includes・h”TASK_STK_SIZE20TASK2_STK_SIZE20TASK_USERTASK_TASK_SIZE20//定义用户任务发生任务、任务「2的堆

9、栈大小全为20defineTask2Prio//任务2优先级为8d

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。