本帖最后由 熊仔 于 2023-9-21 22:37 编辑
进入临界区:在关闭中断前,操作临界区重要变量都是不行的。不能先右移。
退出临界区:操作开中断必须在后面。左移放最后肯定出问题。
稍微改下可以变成一个新的方法。
- #if OS_CRITICAL_METHOD==5
- //JBC指令方式
- //非典方式: LAOXU提供的方法
- INT8U data _BitSEA=0;
- //采用通用的PLC位操作工作方式, 8BitS最多保存嵌套次数8次, 一般够用了,
- //如不够用, 可改成 16BitS或 32BitS, 最多保存嵌套次数16次(或32次), 依次类推.
- void OSEnterCritical(void) {
- if (_testbit_(EA)) {
- _BitSEA >>= 1;
- _BitSEA |= 0x80;
- } else {
- _BitSEA >>= 1;
- }
- }
-
- void OSEXitCritical(void) {
- _BitSEA <<= 1;
- EA = CY;
-
- }
-
- #endif
复制代码
我的观点:多于8次嵌套需要增加变量。还不如方法4优秀。其实嵌套只有第一次是1,其他都是0。当然这个也是一个方法。行得通。
|