|
本帖最后由 飛饵 于 2020-4-21 20:46 编辑
刚学了信号了,设计了个任务想看普通二值信号量的优先级反转现象,实际效果和理论一样。然后用了mutex信号量看看解决没,结果还是和原来一样。。怀疑设计二值信号量任务时那个效果根本不是优先级反转造成的。。。
不知道任务这么设计有什么问题???
三个主要任务优先级:Task1(5) > Task2(10) > Task0(15),还有个任务专门查看谁占用了资源
Task1、Task0都使用信号量,其余都没用到。创建互斥信号量给的优先级是4
代码和普通二值信号量一样,只是现在的等待、释放信号量函数换成了mutex的
- void TaskPrintf(void *p_arg)
- {
- while(1)
- {
- timecount = OSTimeGet();
- printf("TaskS running - count:%u time:%ums-----", count, timecount);
- printf("%s", str);
-
- OSTimeDly(100); //100ms打印一次 srt 的内容,这样便可查看哪个任务占着资源
- }
- }
- /*
- *----------- 测试任务0 ------------
- *
- *
- *
- */
- void Task0(void *p_arg)
- {
- u8 err;
-
- while(1)
- {
- count ++;timecount = OSTimeGet();
- printf("Task0 running - count:%u time:%ums \r\n", count, timecount);
- OSMutexPend(testmutex, 0, &err); //等待信号量
- str = "Task0 get the resource! \r\n"; //占有资源。
- OSTimeDly(2000);
- OSMutexPost(testmutex);; //释放信号量
- }
- }
- /*
- *----------- 测试任务1 ------------
- *
- *
- *
- */
- void Task1(void *p_arg)
- {
- u8 err;
-
- while(1)
- {
- count ++;timecount = OSTimeGet();
- printf("Task1 running - count:%u time:%ums \r\n", count, timecount);
- OSMutexPend(testmutex, 0, &err); //申请(等待)信号量
- str = "Task1 get the resource! \r\n";
- OSTimeDly(1000);
- OSMutexPost(testmutex);
- }
- }
- /*
- *----------- 测试任务2 ------------
- *
- *
- *
- */
- void Task2(void *pdata)
- {
- while(1)
- {
- count ++;timecount = OSTimeGet();
- printf("Task2 running - count:%u time:%ums \r\n", count, timecount);
-
- OSTimeDly(500);
- }
- }
复制代码
|
|