熊仔 发表于 2023-9-19 00:14:39


F5执行后,确实改变了OSPrioHighRdy






把定时器中断的断点去掉,然后F5执行到RETI,



可以看到OSPrioCur 不等于 OSPrioHighRdy,
中断返回变成了OSTCBCur变成了新的任务。


这个只能用仿真看,逻辑分析仪看很难分出来的。
仿真的结果和理论是一样的。

结论就是下面两条需要同时保护。不然嵌套后,出现不一样的结果。
OSPrioCur = OSPrioHighRdy;
OSTCBCur= OSTCBHighRdy;


熊仔 发表于 2023-9-20 00:04:57

好像想明白为什么杨老师说,他以前用软中断的方式,不需要去保护那两条关键的语句。我猜是因为那个软件中断是高优先级的,其他中断根本不能打断正在执行的中断服务。

一般我们把软件切换任务中断,设置成最低优先级。这样就是保证高优先级中断可以嵌套优先执行,实时性更强。需要对最关键的两条语句做保护处理。

杨为民 发表于 2023-9-20 00:11:48

熊仔 发表于 2023-9-20 00:04
好像想明白为什么杨老师说,他以前用软中断的方式,不需要去保护那两条关键的语句。我猜是因为那个软件中断 ...

是的

CosyOS 发表于 2023-9-20 00:18:00

原来如此,还真是没想到
页: 1 2 [3]
查看完整版本: STC单片机 uC/OS-II核心技术(2):在替代法中任务切换时其实不需要临界区保护