杨为民
发表于 2024-5-2 11:37:41
fanxsp 发表于 2024-5-2 08:54
非屏蔽中断对任务切换时间没有影响,因为非屏蔽中断不能调用系统服务函数,也不能进行任务切换。非屏蔽中 ...实时响应测试程序的主要目的不仅仅是测试响应时间,
最主要的目的是进行RTOS的基本功能测试:
(1)测试任务B和任务C两个任务之间是否能正确地进行任务切换。
(2)测试依赖时钟节拍的任务休眠/唤醒功能是否正确和准时。
(3)测试任务A是否能被稳定地挂起和被中断唤醒。
(4)因此我的排行榜的主要目的是用同一个程序让大家来检测和证明自己的开发/移植程序的正确性。
比如熊仔STC8H版的移植程序就未能通过这个程序检测,一运行就死机,是我修改了他的程序才运行正常,才在第一次排行榜给出了响应时间的。但这种修改肯定不符合他的意愿。
再比如一开始我用那个测试程序测试CosyOS时系统是崩溃的,我也是修改了其程序才运行正常,才在第一次排行榜给出了响应时间的。然后本尊更新了CosyOS的版本,给出了自己的测试程序。经测试原来出错的BUG在最新版本被修正了。
(5)由于本论坛的好几个RTOS只要将TIMER0系统节拍定时器一设置为“不可屏蔽中断模式3”就死机,因此想请你给出一个你的RTOS用了“不可屏蔽中断模式3”后,那个排行榜测试程序还能正常运行的例子。
fanxsp
发表于 2024-5-2 12:51:58
本帖最后由 fanxsp 于 2024-5-2 12:58 编辑
杨为民 发表于 2024-5-2 11:37
实时响应测试程序的主要目的不仅仅是测试响应时间,最主要的目的是进行RTOS的基本功能测试:
(1)测试 ...
如果是用Timer0做系统节拍,那就要调用OSTimeTick()函数,那设为“不可屏蔽中断模式3”,也是不行的。只有Timer0中断中不调用任何系统服务时,才可以。
杨为民
发表于 2024-5-2 12:56:01
fanxsp 发表于 2024-5-2 12:51
如果是用Timer0做系统节拍,那就要调用OSTimer()函数,那设为“不可屏蔽中断模式3”,也是不行的。只有Ti ...
这是理论,你试过吗?要不我来试试?
fanxsp
发表于 2024-5-2 13:04:12
杨为民 发表于 2024-5-2 12:56
这是理论,你试过吗?要不我来试试?
Timer0我也没有试过,因为我是用Timer0做为定时服务的,Timer0不能关中断肯定不行,我有试过Timer3不关中断的情况。如果要试Timer0的话,那要改用Timer3做系统的定时服务。这种情况,我也试试看。
fanxsp
发表于 2024-5-2 14:22:27
杨为民 发表于 2024-5-2 12:56
这是理论,你试过吗?要不我来试试?
还是原来的测试程序,我改了一下,改用Timer3做系统定时,Timer0改为不可屏蔽模式,测试正常,稍等我发上来,你也试一下。
fanxsp
发表于 2024-5-2 14:36:30
请杨教授 测试
xxxevery
发表于 2024-5-2 14:53:30
谢谢分享
杨为民
发表于 2024-5-2 19:36:05
本帖最后由 杨为民 于 2024-5-2 19:41 编辑
fanxsp 发表于 2024-5-2 14:36
请杨教授 测试
(1)测试的起源:
92楼: 楼主: 如果是用Timer0做系统节拍,那就要调用OSTimeTick()函数,那设为“不可屏蔽中断模式3”,也是不行的。只有Timer0中断中不调用任何系统服务时,才可以。
93楼:杨为民: 这是理论,你试过吗?要不我来试试?
94楼:楼主:Timer0我也没有试过,因为我是用Timer0做为定时服务的,Timer0不能关中断肯定不行,我有试过Timer3不关中断的情况。如果要试Timer0的话,那要改用Timer3做系统的定时服务。这种情况,我也试试看。
95楼:楼主: 还是原来的测试程序,我改了一下,改用Timer3做系统定时,Timer0改为不可屏蔽模式,测试正常,稍等我发上来,你也试一下。
(2)最后楼主还是不敢试,楼主的测试程序为:
其中第174行将定时器0设置为不可屏蔽中断模式3
其中第131行是定时器0的中断ISR,第140行是定时器3的中断ISR
测试程序工作正常。
(3)我对测试程序进行了如下修改:
将第131行的中断号从1修改为19,将第140行是的中断号从19修改为1,这样第131行开始的就是定时器3的中断ISR,而第140行开始的是定时器0的中断ISR。
修改后的测试程序工作正常。
在修改后的测试程序中,系统节拍定时器ISR中不仅有第144行的系统节拍服务,而且还有第151行的用户服务调用,这些功能当定时器0工作在模式3也是可以正常运行的。
(4)结论:楼主的RTOS的系统节拍定时器是可以工作在“不可屏蔽中断模式3”的。
(5)建议:不管别人说了什么,只要有条件就应该自己亲自去试一试,就像本测试一样。
(6)楼主不敢试的责任应该我来负:我想可能来源于我的文章《STC单片机uC/OS-II移植记(6):消除原移植程序中系统中断存在的瑕疵》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2466)
其中“一、系统定时器中断不能采用不可屏蔽模式”一节有结论“(6)上面的理论分析说明在uC/OS-II操作系统中,系统中断的定时器0不能工作模式3的不可屏蔽中断模式下。”
这里我也向所有因这篇文章产生误解的网友说声抱歉。
(7)辩解:这是针对“目前的uC/OS-II移植版本”,针对当时的STC8H资深专家版本说的,并且给出了该结论成立的前提条件:
RTOS系统离不开临界区保护功能,对于系统中断定时器0能否使用模式3的问题,可以用理论模型的方法来论证。假定RTOS程序采用进入临界区保护EA=0和退出临界区保护EA=1的方法,假定RTOS程序正在处于临界区保护状态,这时总中断已经被关闭(EA=0)了。
也就是说只有对于采用不可嵌套的、直接关闭总中断的临界区保护方法的RTOS,上面那个结论才成立。
(8)新结论:如果一个RTOS的临界区保护方法不是“采用不可嵌套的、直接关闭总中断”的方法,那么系统中断的定时器0可以也应该工作在模式3的不可屏蔽中断模式下。由于楼主的RTOS的临界区保护方法是可嵌套的关闭总中断的方法:
因此楼主的RTOS的系统中断自然可以工作在不可屏蔽中断模式3下。(9)推论:RTOS的临界区保护方法是否可嵌入的问题在本论坛已经经历了多次深入的讨论,目前本论坛里除了“FreeRTOS”外的RTOS大都采用了可嵌入的临界区保护方法,因此对这些RTOS,系统中断的定时器0可以也应该工作在模式3的不可屏蔽中断模式下的。比如CosyOS-II的系统中断也可以工作在不可屏蔽中断模式3下。
杨为民
发表于 2024-5-2 19:43:28
CosyOS 发表于 2024-3-28 15:38
支持原创
请看98楼,你的CosyOS-II要不要试一试?
soma
发表于 2024-5-2 21:12:05
下载学习一下