找回密码
 立即注册
楼主: fan***

原创极简的51-MCU专用RTOS TinyRTOS51

[复制链接]

该用户从未签到

63

主题

703

回帖

1万

积分

荣誉版主

积分
10904
发表于 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”后,那个排行榜测试程序还能正常运行的例子。

回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    707

    积分

    高级会员

    积分
    707
     楼主| 发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10904
    发表于 2024-5-2 12:56:01 | 显示全部楼层
    fanxsp 发表于 2024-5-2 12:51
    如果是用Timer0做系统节拍,那就要调用OSTimer()函数,那设为“不可屏蔽中断模式3”,也是不行的。只有Ti ...

    这是理论,你试过吗?要不我来试试?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    707

    积分

    高级会员

    积分
    707
     楼主| 发表于 2024-5-2 13:04:12 | 显示全部楼层
    杨为民 发表于 2024-5-2 12:56
    这是理论,你试过吗?要不我来试试?

    Timer0我也没有试过,因为我是用Timer0做为定时服务的,Timer0不能关中断肯定不行,我有试过Timer3不关中断的情况。如果要试Timer0的话,那要改用Timer3做系统的定时服务。这种情况,我也试试看。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    707

    积分

    高级会员

    积分
    707
     楼主| 发表于 2024-5-2 14:22:27 | 显示全部楼层
    杨为民 发表于 2024-5-2 12:56
    这是理论,你试过吗?要不我来试试?

    还是原来的测试程序,我改了一下,改用Timer3做系统定时,Timer0改为不可屏蔽模式,测试正常,稍等我发上来,你也试一下。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 171 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    707

    积分

    高级会员

    积分
    707
     楼主| 发表于 2024-5-2 14:36:30 | 显示全部楼层
    请杨教授 测试
    Test.zip (67.38 KB, 下载次数: 7)

    点评

    (1)测试的起源: 92楼: 楼主: 如果是用Timer0做系统节拍,那就要调用OSTimeTick()函数,那设为“不可屏蔽中断模式3”,也是不行的。只有Timer0中断中不调用任何系统服务时,才可以。 93楼:杨为民: 这是理论,  详情 回复 发表于 2024-5-2 19:36
    等我测了给你反馈  发表于 2024-5-2 16:14
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 72 天

    [LV.6]常住居民II

    0

    主题

    209

    回帖

    468

    积分

    中级会员

    积分
    468
    发表于 2024-5-2 14:53:30 | 显示全部楼层
    谢谢分享
    回复 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10904
    发表于 2024-5-2 19:36:05 | 显示全部楼层
    本帖最后由 杨为民 于 2024-5-2 19:41 编辑

    (1)测试的起源:

    92楼: 楼主: 如果是用Timer0做系统节拍,那就要调用OSTimeTick()函数,那设为“不可屏蔽中断模式3”,也是不行的。只有Timer0中断中不调用任何系统服务时,才可以。
    93楼:杨为民: 这是理论,你试过吗?要不我来试试?
    94楼:楼主:  Timer0我也没有试过,因为我是用Timer0做为定时服务的,Timer0不能关中断肯定不行,我有试过Timer3不关中断的情况。如果要试Timer0的话,那要改用Timer3做系统的定时服务。这种情况,我也试试看。
    95楼:楼主: 还是原来的测试程序,我改了一下,改用Timer3做系统定时,Timer0改为不可屏蔽模式,测试正常,稍等我发上来,你也试一下。
    (2)最后楼主还是不敢试,楼主的测试程序为:
    Fig_01_不可屏蔽中断模式3.jpg

    其中第174行将定时器0设置为不可屏蔽中断模式3
    Fig_02_系统中断_TM3.jpg

    其中第131行是定时器0的中断ISR,第140行是定时器3的中断ISR
    测试程序工作正常。
    (3)我对测试程序进行了如下修改
    Fig_03_系统中断_TM0.jpg


    将第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的临界区保护方法是可嵌套的关闭总中断的方法:
    Fig_04_临界区保护.jpg
    因此楼主的RTOS的系统中断自然可以工作在不可屏蔽中断模式3下。
    (9)推论:RTOS的临界区保护方法是否可嵌入的问题在本论坛已经经历了多次深入的讨论,目前本论坛里除了“FreeRTOS”外的RTOS大都采用了可嵌入的临界区保护方法,因此对这些RTOS,系统中断的定时器0可以也应该工作在模式3的不可屏蔽中断模式下的。比如CosyOS-II的系统中断也可以工作在不可屏蔽中断模式3下



    Test_杨为民修改_20240502.rar (214.26 KB, 下载次数: 9)


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10904
    发表于 2024-5-2 19:43:28 | 显示全部楼层

    请看98楼,你的CosyOS-II要不要试一试?

    点评

    好的杨老师,等我研究下  发表于 2024-5-2 20:45
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 73 天

    [LV.6]常住居民II

    3

    主题

    627

    回帖

    950

    积分

    高级会员

    积分
    950
    发表于 2024-5-2 21:12:05 | 显示全部楼层
    下载学习一下
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-17 14:59 , Processed in 0.076652 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表