熊仔
发表于 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
原来如此,还真是没想到