OSEK共享资源场景下优先级反转相关SimulIDE任务异常问题咨询
OSEK共享资源场景下优先级反转相关SimulIDE任务异常问题咨询
大家好,我在SimulIDE里运行三个任务时遇到了棘手的问题:其中任务A和C共享同一个资源,而且A的优先级比C高,但当C请求到资源进入临界区后,居然被A给抢占了,导致两个任务似乎同时在操作共享资源,这完全不符合预期啊。
我用这段代码模拟忙循环来模拟任务执行时长:
void do_things(int ms=1){ unsigned long mul = ms * 504UL; unsigned long i; for(i=0; i<mul; i++) { millis(); }; }
我尝试过调整tick时间,也改了代码里函数的顺序,但问题依然存在,下面是任务运行的日志输出:
[taskC_1] C start: 2799--> start_do_things_100 end_do_things_100 C:Resource Requested at: 2900 start_do_things_200 end_do_things_200 [taskA_3] A start: 3102--> A:Resource Requested at: 3102 A:Resource Released at: 3303 A end:--> 3304 [taskB_2] B start: 3304--> [taskA_4] A start: 3997--> A:Resource Requested at: 3997 A:Resource Released at: 4198 A end:--> 4199 B end:--> 4208 C:Resource Released at: 4208 C end:--> 4209
从日志里能清楚看到,C已经在2900时刻请求到了资源,结果A在3102时刻就直接启动并也请求到了资源,这明显违背了共享资源的互斥原则,有没有大佬能帮忙分析下这是哪里出问题了?
备注:内容来源于stack exchange,提问作者Giuseppe Denina Rivera
相关产品推荐
相关产品推荐

