关于u cos 中延时函数OSTimeDly和任务通信***pend()函数对任务的影响分析
来源:互联网 发布:淘宝申请退款打不开 编辑:程序博客网 时间:2024/06/05 02:07
在u cos系统中,OSTimeDly和***pend都对任务有状态改变的作用,那么这两个函数到底有什么不同呢?
例程分析:
static void App_TaskStart(void* p_arg)//优先级为2
{
static st t;
INT8U error;
(void) p_arg;
OS_CPU_SysTickInit(); /* Initialize the SysTick. */
for(;;)
{
OSQPend(com1,0,&error);
LED_LED1_ON();
}
static void task1(void* p_arg) //优先级为3
{
static st t;
t.a=2;
// INT8U error;
(void) p_arg;
for(;;)
{
OSQPost(com1,&t);
OSQPost(com1,&mail); //发送到队列
OSTimeDlyHMSM(0,0,1,0);
}
static void task2(void* p_arg)//优先级为4
{
INT8U error;
(void) p_arg;
for(;;)
{OSQPend(com1,0,&error);
LED_LED2_ON();
}
}刚开始我以为2灯会亮,但是现象是只会亮一个灯,LED2不会亮,为什么呢?
分析:首先执行优先级2的函数,由于刚开始队列中没有消息,所以App_TaskStart挂起(挂起的意思是进入休眠状态,并没有从就绪表中移除),并且时刻等待队列中的消息,所以执行task1,发送消息给队列,此时又切换到App_TaskStart,LED1亮,又执行OSQPend(com1,0,&error); ,OSQPend(com1,0,&error); 又挂起,执行task1的第二句,发送队列,又切换到OSQPend(com1,0,&error); OSQPend(com1,0,&error); 又挂起,一直循环到OSTimeDlyHMSM(0,0,1,0);执行这个函数的时候,task1从就绪表中移除,此时就绪表中有OSTimeDlyHMSM(0,0,1,0); task2,空闲任务3个任务,OSTimeDlyHMSM(0,0,1,0);优先级最高,所以最先执行,OSTimeDlyHMSM(0,0,1,0);又挂起,执行task2,又等待,执行task1,就这样一直循环,直到延时结束,此时task1也回到就绪态,但是由于 OSQPend(com1,0,&error);优先级最高,所以又回到 OSQPend(com1,0,&error);,, OSQPend(com1,0,&error);又挂起,执行task1,就这样一直循环。
总结;挂起并不会从就绪表中移除,执行任务暂时休眠。而延时函数会将该任务从就绪表中删除。
- 关于u cos 中延时函数OSTimeDly和任务通信***pend()函数对任务的影响分析
- 任务延时函数,OSTimeDly()
- 任务延时函数,OSTimeDly()
- 关于new等函数对任务管理器中内存、句柄数变化的影响
- u cos 延时函数用法小节
- ucos 任务延时函数
- DSP BIOS任务通信和同步(pend/post举例)
- μcos-II任务延时
- uCOS-II任务延时函数
- ucos II 任务延时函数
- Ucos II 任务延时函数
- 五、时间管理---任务延时[OSTimeDly()]--OS_TIME.C
- OSTimeDly 函数
- μCOS-II系统之时间管理函数OSTimeDly()
- μCOS-II系统之时间管理函数OSTimeDly()
- 浅谈μCOS-III关于系统延时函数
- uCOS-II任务之延时函数
- 定时任务和延时任务
- Android编程8:页面切换测试
- 更新表的数据
- iPhone开发中,动态调用类和方法
- Eclipse上的HTML/JSP/XML编辑器插件Eclipse HTML Editor
- NEC单片机内存数据存储形式
- 关于u cos 中延时函数OSTimeDly和任务通信***pend()函数对任务的影响分析
- 反编译实例2:补充3
- 输入子系统简单(按键)测试
- 插件21:把URL相对地址转换为绝对地址
- 如何将cscope安装到指定目录(没有root权限)
- RHEL 4 ISCSI setting
- Intent打开各种类型文件
- Android apk间资源共享
- SharedPerferences的用法