|
第七天
任务管理 主要是:应用程序中建立程序、删除任务、改变任务的优先级、挂起和恢复任务、获得任务的信息。
1. 建立任务 OSTaskCreate()
1.1 任务可以再多任务调度刚开始时建立,也可以在其他任务运行的时候建立。
1.2 在启动之前,即OSStart()函数之前,必须建立一个任务。
1.3 任务不能由ISR建立。OStaskCreate()函数代码如下:
1.4 建立任务函数传递四个参数 task :任务代码的指针
Pdata : 当任务开始执行时传递给任务的参数的指针
Ptos : 分配给任务的堆栈的栈顶指针
Prio : 分配给任务的优先级
如:OSTaskCreate(Task1,(void*)0,&Task1Stk[0],3); //传递task1, 无参数指针,栈顶指向Task1Stk[0], 优先级是3.
1.5 MCS-51单片机堆栈是从下往上涨的,所以OS_STK_GROWTH = 0;
1.6 OSTaskStkInit()函数完成建立堆栈的任务。
2. 建立任务 OSTaskCreateExt()
2.1 需要9个参数。id 优先级标号 未来扩展
Pbos : 指向任务栈底的指针,用于堆栈的检验
Stk_size : 指定堆栈队员的数目
Pext : 指向用户附加的数据域的指针
Opt : 设定OSTaskCreateExt()的选项,是否允许堆栈检验、将堆栈清零、是否要进行浮点操作等。
3. 任务堆栈
3.1 堆栈必须声明为OS_STK类型,由连续的内存空间组成。可以静态分配(如: static OS_STK MYTaskStack[stack_size]; 或者 OS_STK MYTaskStack[stack_size];),也可动态分配。 (用 malloc() 函数分配,但是会产生内存碎片)
3.2 注意堆栈的增长方向,在创建时OSTaskCreate()时,堆栈的起始地址是不同的。
4. 检验堆栈 OSTaskStkChk()
4.1 在堆栈检验时,要求在任务建立的时候堆栈中存储的是0,即被清零。
4.2 UC/OS-II需要知道堆栈栈底和堆栈的大小。 都存在了OS_TCB中。
5. 删除堆栈 OSTaskDel()
5.1 不能删除空闲任务。不能再ISR中删除一个任务。
5.2 参数是优先级。
6. 请求删除任务 OSTaskDelReq()
用于删除一个占有系统资源的任务。在删除任务之前需要先施放任务占用的系统资源。
7. 改变任务的优先级 OSTaskChangePrio()
7.1 允许用户动态改变优先级。但不能改变空闲任务的优先级。
8. 挂起任务 OSTaskSuspend()【suspend是悬浮 暂停的意思】
8.1 被挂起的任务只能通过调用OSTaskResume()函数来恢复。
9. 恢复任务OSTaskResume()
10. 获得任务的信息 OSTaskQuery()
10.1 获得的是对应任务的OS_TCB中内容的拷贝。
10.2 是有用的 调试工具。不要试图改变里面的指针。
燕山大学 电气工程学院 09级检测技术与仪器 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|