本帖最后由 杨为民 于 2024-3-31 10:49 编辑
(1)根据笔者很早以前对RTOS的研究表明,当RTOS系统采用软中断指令进行任务切换的时候,RTOS系统本身是不需要任何关闭总中断的临界区保护方法的,系统包含的关闭总中断的临界区保护方法只是提供给用户做特殊用途的。为此我论坛上面的两个移植版本进行了测试,果然如此。 (2)uC/OS-II的系统代码把进入和退出临界区保护语句作为宏定义,这样就方便了用户自己选择和定义不同的临界区保护方法,当然要取消RTOS系统的临界区保护也就简单了,只需要把这两个宏定义为“空”就行了。下面是对挑战者网友的移植的C251-UCOSII程序进行修改的部分,其中任务切换部分仍然保持了上一篇帖子的去除临界区保护的注释: 上面第47行程序将临界区保护方法设置为“0”,第50行到第53行将方法0设置为“空”,这时对RTOS系统将不进行任何形式的临界区保护。
(3)下面是将上一篇帖子的例子进行修改后进行测试的结果: OK,实际运行结果居然与有临界区保护的一模一样。 上图是从开机开始的50秒的逻辑分析仪输出结果。在上图左面明显可以看到P2端口的开机LOGO信号。 (4)结论:对于STC32G单片机,如果使用软中断替代法作为任务切换方法的时候,对于整个uC/OS-II系统(就是那些组成系统的C语言文件中的程序)无需采用任何临界区保护措施。
(5)下面是对熊仔网友移植的UCOSII-STC32G进行无临界区保护测试的结果: 很不幸,在大约32秒后翻车了。
(6)下面是本次测试对熊仔网友移植的UCOSII-STC32G范例程序进行修改的地方: 上面第72行程序将临界区保护方法设置为“0”,第75行到第78行将方法0设置为“空”,对RTOS系统不进行任何形式的临界区保护。
|