熊仔
发表于 2023-8-24 15:04:05
本帖最后由 熊仔 于 2023-8-24 15:10 编辑
USING 0后面 AR0~AR7选择00~07地址入栈,和 MOV PSW, # 0没有关系。
MOV PSW, # 0 是后面的操作使用寄存器组0。
因为整个工程是寄存器组0,不需要再次选。
晚点会在工程代码里面修改下这个说明。
杨为民
发表于 2023-8-24 20:25:44
楼主,你的“结论:统一使用寄存器组0。永远不要用寄存器1,2,3带来的不必要麻烦,高手除外。”这句话是什么意思,你的RTOS不支持高手使用吗?又或者只给高手使用?
杨为民
发表于 2023-8-24 20:33:32
本帖最后由 杨为民 于 2023-8-24 20:35 编辑
临界区保护方法2和方法3存在BUG 楼主推出的“uCOSII-STC8-V1.01-20230823”移植版中,除了临界区保护不能嵌套的方法1外,还给出了临界区保护可以嵌套的方法2和方法3。为了验证这两种方法是否可以嵌套使用,笔者专门编程了一个验证程序。对于这个验证程序,这个移植版的方法2和方法3均没有达到能够嵌套保护的目的,说明这个移植版的临界区保护方法2和方法3程序存在BUG。一、临界区保护嵌套是否有效的检测程序
(1)验证是不是在临界区保护中的简单方法是观测程序的定时器中断信号,如果处于临界区保护中,则定时器中断被禁止,如果处于临界区保护外,则定时器中断正常发生。下面是本范例中断ISR的程序:
其中第88行和第97行是一对,每次定时器1中断在逻辑分析仪通道0产生一个正脉冲。第106行和第113行是一对,每次定时器3中断在逻辑分析仪通道6产生一个正脉冲。因此只要观测通道0和通道6就可以知道是否处于临界区保护之下了。
(2)验证程序仍然使用三个实时任务,主要用连接在P2端口的逻辑分析仪来观测效果。其中优先级最高的任务A程序如下:
这是一个P1端口LED灯左右两边交替闪烁的程序,每个主循环闪灯3次,然后就将任务自己挂起。在任务A获得控制权期间,逻辑分析仪的第4通道显示10毫秒周期的方波信号。
(3)任务B的程序如下:
这是一个在P3端口实习跑马灯的程序,每个主循环跑一次,然后就将任务自己挂起。在任务B获得控制权期间,逻辑分析仪的第5通道显示10毫秒周期的方波信号。
(4)任务C是本验证范例的主控程序,由它来验证临界区保护嵌套的情况。验证每个主循环为一个周期,如果临界区保护可以嵌套,则对应的逻辑分析仪的信号如下图,具体的信号在后面结合程序解释:
图1 逻辑分析仪信号图
(5)任务C主循环的第一个部分的程序如下:
其中第201到207行时每个验证周期的起始信号,在P2端口的所有通道上产生一个10毫秒的正脉冲,见上面“图1 逻辑分析仪信号图”的开始部分。第210行到215行P0端口的LED灯左右闪烁,并只在通道2上产生一个100毫秒的正脉冲。由于这个时候没有进入临界区保护,从图1上可以看到通道0和通道6都有连续的中断信号。(6)任务C从第218行开始进入临界区保护,对应图1中的小旗子1,从这个时候开始通道0和通道6都没有有中断信号,说明确实已经进入了临界区保护。然后第221行到233行,任务C在通道2上产生30毫秒周期方波信号。然后237行唤醒挂起的任务A。在通道5上产生了方波信号。由于这时系统处于一层临界区保护之下,所以在整个任务A执行期间通道0和通道6都没有定时器中断信号产生。
(7)下面是任务C剩余的程序:
由于任务A的优先级比任务C高,所以在任务A运行时任务C被挂起,直到任务A执行完挂起后,任务C开始执行第240行,临界区保护进入第二层嵌套保护。在图1中从第2面小旗处开始。(8)任务C的第243行到251行程序在P0端口上产生一个跑马灯,在通道2上产生10毫秒的方波,见图1紧跟第2面小旗的部分。然后第265行程序使得任务B就绪,由于任务B的优先级3仍然高于任务C的优先级4,所以控制权交给任务B执行,在通道5上产生方波信号。由于这时系统处于二层临界区保护之下,所以在整个任务B执行期间通道0和通道6都没有定时器中断信号产生。(9)任务C最后第255行到第265行程序依次退出二层临界区保护,转到主循环开始一轮新的检测。 二、对楼主移植版临界区保护方法的检测(10)楼主移植版临界区保护方法的程序如下:/***************************************** 与处理器有关的代码*****************************************///注意OS_CPU_A.A51文件也需要设置下OS_CRITICAL_METHOD选哪种一种方法 ,需要保持两边一致。// 方法1#define OS_CRITICAL_METHOD 1 #if OS_CRITICAL_METHOD==1//但这样有一个问题,如果禁止中断的情况下调用OS功能函数,那么从功能函数返回时,中断可能变成允许的了,而实际上还是希望是禁止的。#define OS_ENTER_CRITICAL() EA=0/* 直接禁止中断*/#define OS_EXIT_CRITICAL()EA=1/* 直接允许中断*/#endif #if OS_CRITICAL_METHOD==2 //执行OS_ENTER_CRITICAL()时,先将中断状态保存到堆栈,然后关中断;//执行OS_EXIT_CRITICAL()时,再从堆栈中恢复原来的中断开/关状态。这种方法不会改变中断状态,避免前面的问题。 //但是,当用户使用的处理器有堆栈指针相对寻址模式时,可能出现严重错误。//问题分析:OS_ENTER_CRITICAL()时导致中断切换任务的时候硬件堆栈多入了一个_push_(IE),//解决方法:OSIntCtxSw()函数调整SP的时候应该多减1,原来SP=SP-4改为SP=SP-5#include <intrins.h>#define OS_ENTER_CRITICAL()do{_push_(IE);EA = 0;}while(0) /* 利用堆栈保存中断状态,再关中断*/#define OS_EXIT_CRITICAL()do{ _pop_ (IE);}while(0) /* 将IE从堆栈弹出,恢复IE值 */#endif #if OS_CRITICAL_METHOD==3//获取当前中断状态的值,并将其保存在C函数局部变量之中//问题分析:可重入函数的局部变量cpu_sr会入仿真栈。导致中断切换任务的时候,仿真堆栈出问题。//解决方法:OSIntCtxSw()函数执行时需要对仿真堆栈指针++操作。#define OS_ENTER_CRITICAL() do{ cpu_sr=IE;EA = 0;}while(0)#define OS_EXIT_CRITICAL() do{ IE = cpu_sr; }while(0)#endif
(11)对楼主移植版临界区保护选择方法1的检测结果如下:
如楼主移植版说明中的那样,在执行任务C的第237行和第255行程序“调用OS功能函数,那么从功能函数返回时,中断可能变成允许的了”,所以在任务A和任务B执行期间,通道0和通道6的定时器中断信号仍然存在。由于临界区保护方法1本身就不具备嵌套功能,所以上面这个结果对方法1是正确的,移植版的方法1没有BUG。
(12)对楼主移植版临界区保护选择方法2和方法3的检测结果如下:
从图中可以看出方法2和方法3的结果与方法1一样,并没有像图1一样具有临界区保护嵌套功能,所以楼主移植版的临界区保护方法2和方法3没有实现嵌套保护功能,肯定存在BUG。
下面是验证程序:
熊仔
发表于 2023-8-24 21:25:46
杨为民 发表于 2023-8-24 20:25
楼主,你的“结论:统一使用寄存器组0。永远不要用寄存器1,2,3带来的不必要麻烦,高手除外。”这句话是什 ...
本移植为了提速,只能限制统一使用寄存器组0。
其实陈是知移植版本也是全部用寄存器组0。可以看看OS_CPU_A.ASM文件。
高手除外表达就是需要使用其他寄存器组的,另行适配。
熊仔
发表于 2023-8-24 21:31:34
杨为民 发表于 2023-8-24 20:33
临界区保护方法2和方法3存在BUG 楼主推出的“uCOSII-STC8-V1.01-20230823”移植版中,除了临界区保护不能嵌 ...
这个原因不是方法2和方法3不对。
是任务级别切换最后开启中断导致的。
这个问题我早就发现,后面细想,正常临界区保护的时候不会去切换任务的。
或者说,既然切换任务,肯定是允许中断的。
所以任务切换的时候,都是统一开启中断。
data:image/png;base64,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
杨为民
发表于 2023-8-24 21:41:19
熊仔 发表于 2023-8-24 21:31
这个原因不是方法2和方法3不对。
是任务级别切换最后开启中断导致的。
这个问题我早就发现,后面细想,正 ...
达不到嵌套保护的目的,要么是根本不可能实现嵌套保护,要么是你没有能力实现,要么是你想实现的方法是对的,只是存在BUG
杨为民
发表于 2023-8-24 21:44:00
“是任务级别切换最后开启中断导致的”,这算不算BUG
杨为民
发表于 2023-8-24 21:45:36
“这个问题我早就发现,后面细想,正常临界区保护的时候不会去切换任务的。”这只是你的看法,我的验证程序不就给出了例子吗?
熊仔
发表于 2023-8-24 21:46:40
本帖最后由 熊仔 于 2023-8-24 21:49 编辑
临界区方法对的。
解决这个问题需要更改任务级别函数。
应该说任务级别函数有bug。
这个我之前也有发现。感觉问题不大,没有去弄,需要保存IE入栈,出来的时候判断是否开中断。
杨为民
发表于 2023-8-24 21:50:43
我觉得,提供RTOS这样的系统给被人使用,与自己编个范例让让别人参考是不同的。要提供系统给别人使用,一是要可靠,二是要尽可能少一些应用限制,三是对于可能产生坑的地方要加以说明提示
页:
1
[2]
3
4
5
6
7
8
9
10
11