|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2013-9-14 00:57:31
|
显示全部楼层
i55x 发表于 2013-9-14 00:25 ![](static/image/common/back.gif)
你taskb里面没有ostimedly的话比他优先级低的任务永远无法执行
刚试了试 确实是死在一个任务中 没办法调度。那是因为互斥的PIP设置为3 比那两个都高。目前对我来说互斥的水还太深。换个。换成Sem,初值为0。基本相同的代码 同样没有OSTimeDly这时候任务都能正常运行- static void Task1(void *pdata) //prio = 4
- {
- INT8U err;
- pdata = pdata;
- while(1)
- {
- #if OS_CRITICAL_METHOD==3
- OS_CPU_SR cpu_sr;
- #endif
- //OSMutexPend(DispMutex,0,&err);
- OSSemPend(DispMutex,0,&err);
- if(err==OS_NO_ERR)
- {
- OS_ENTER_CRITICAL();
- UsartPrintf("任务2已经发生,任务1已经同步\n");
- OS_EXIT_CRITICAL();
- }
- }
- }
- static void Task2(void *pdata) //prio = 5
- {
- INT8U err;
- pdata = pdata;
- while(1)
- {
- #if OS_CRITICAL_METHOD==3
- OS_CPU_SR cpu_sr;
- #endif
- //err = OSMutexPost(DispMutex);
- err = OSSemPost(DispMutex);
- if(OS_NO_ERR==err)
- {
- OS_ENTER_CRITICAL();
- UsartPrintf("任务2正在发生\n");
- OS_EXIT_CRITICAL()
- }
- }
- }
复制代码 这时候也没有TimeDly 任务却能交替执行 |
|