第七天 UC/OS-II的学习
第七天任务管理 主要是:应用程序中建立程序、删除任务、改变任务的优先级、挂起和恢复任务、获得任务的信息。
1. 建立任务 OSTaskCreate()
1.1 任务可以再多任务调度刚开始时建立,也可以在其他任务运行的时候建立。
1.2 在启动之前,即OSStart()函数之前,必须建立一个任务。
1.3 任务不能由ISR建立。OStaskCreate()函数代码如下:
1.4 建立任务函数传递四个参数 task :任务代码的指针
Pdata : 当任务开始执行时传递给任务的参数的指针
Ptos : 分配给任务的堆栈的栈顶指针
Prio : 分配给任务的优先级
如:OSTaskCreate(Task1,(void*)0,&Task1Stk,3); //传递task1, 无参数指针,栈顶指向Task1Stk, 优先级是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; 或者 OS_STK MYTaskStack;),也可动态分配。 (用 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级检测技术与仪器 真羡慕楼主这么坚持! 我学习的就没这么顺利!
打算学习UCOS中! 顶起! 顶一下 不错 顶!!! 精神可嘉,坚持就是胜利,而且总结也很好。
问下楼主,我在一个任务(非需要删除的)中执行OSTaskSuspend(INT8U prio),再执行OSTaskResume(INT8U prio)能使任务恢复,但是先执行OSTaskDel (INT8U prio)再执行OSTaskResume(INT8U prio)却不行,能帮忙解释下吗?
页:
[1]