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

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

[复制链接]

该用户从未签到

63

主题

703

回帖

1万

积分

荣誉版主

积分
10908
发表于 2024-5-3 20:13:28 | 显示全部楼层
CosyOS 发表于 2024-5-3 14:11
我提出这个方法,只是在试图分析杨老师说的是不是这个意思?
在“嵌套的临界区”的前提下,实现在不可屏蔽 ...

本尊你觉得用什么指标来作为“不关闭总中断”的RTOS的“最大的中断响应时间”的指标?

点评

对于“零中断延迟的RTOS”,如 CosyOS 来说,“系统最大中断响应延迟时间” 为 零。 就是说,我们不考虑MCU内核特性的中断响应延迟时间, 而只考虑因系统保护临界段而造成的、用户中断不能响应的时间的最大值。 所以  详情 回复 发表于 2024-5-3 22:45
CosyOS说了,用"0"中断延迟来描述, 这也是他CosyOS最大的卖点  详情 回复 发表于 2024-5-3 21:10
我认为 "最大关闭总中断的时间" 是RTOS中最重要的指标, 无出其右. 任务切换的时间或效率顶多排在第二, 如果切换任务时不关中断, 那多点时间又能怎么样呢? 90%以上的CPU时间都在用来执行空闲任务,为什么没有人觉得浪  详情 回复 发表于 2024-5-3 20:36
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    昨天 06:57
  • 签到天数: 173 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    715

    积分

    高级会员

    积分
    715
     楼主| 发表于 2024-5-3 20:17:10 | 显示全部楼层
    tzz1983 发表于 2024-5-3 20:06
    这个不可屏中断,原理是非常简单的.
    我第一版移植的uCOS-II,切换任务过程就是允许被中断的.
    当时还引起了不 ...

    你说的没有错,对于不用搬栈的RTOS, 确实是这样的。 但是51的RTOS, 是要搬栈的。中断是会影响堆栈数据的。如果在搬栈的过程中发生中断,就有可能造成数据错误。

    点评

    正常情况下,51的“搬栈”过程是不怕被中断打断的,所以不用关闭总中断。但你的OS比较特殊,不甚了解。应仔细斟酌,并通过测试程序小心求证。  发表于 2024-5-3 23:45
    不会的, 要看你怎么搬, 栈是有方向的, 正常情况下, 只会用到末端的容量, 不会影响之前的. 我这两天也移植了一个51内核的 OS, 还是不关中断移动数据,  详情 回复 发表于 2024-5-3 20:27
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    576

    回帖

    1197

    积分

    荣誉版主

    积分
    1197
    发表于 2024-5-3 20:27:46 | 显示全部楼层
    fanxsp 发表于 2024-5-3 20:17
    你说的没有错,对于不用搬栈的RTOS, 确实是这样的。 但是51的RTOS, 是要搬栈的。中断是会影响堆栈数据的 ...

    不会的, 要看你怎么搬, 栈是有方向的, 正常情况下, 只会用到末端的容量, 不会影响之前的.
    我这两天也移植了一个51内核的 OS, 还是不关中断移动数据,
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 06:57
  • 签到天数: 173 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    715

    积分

    高级会员

    积分
    715
     楼主| 发表于 2024-5-3 20:31:29 | 显示全部楼层
    杨为民 发表于 2024-5-3 19:40
    五一节快乐。

    (1)其实我的想法很简单:我不明白为什么要用4us=250KHz的系统节拍频率来验证一个RTOS是否 ...

    是中断间隔为4us,  系统节拍还是1ms,  因为OSTimeTick()是有预分频的,我配置预分频为250,那么中断间隔为4us时,系统节拍就是 4us*250=1ms.
    测试时要把中断间隔设为这么短,是为了确保在任务切换过程中会发生中断。因为任务切换的时间很短,只有15us左右,程序的大部份时间都是工作在空闲任务的。如果把中断间隔的时间设为比较长,比如1ms, 那么中断大概率是发生在空闲任务的,就不能确保在任务切换过程中会发生中断。而我们测试的目的,就是为了测试在任务切换过程中发生中断时,程序能否正常工作。如果在任务切换过程中没有发生中断,就达不到这个目的。

    点评

    现在明白了,所以: 你的4uS的测试方法是正确的,对你的RTOS的测试结论也是正确的,这个测试方法值得借鉴推广。 谢谢你的说明。  详情 回复 发表于 2024-5-4 02:43
    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    576

    回帖

    1197

    积分

    荣誉版主

    积分
    1197
    发表于 2024-5-3 20:36:27 | 显示全部楼层
    杨为民 发表于 2024-5-3 20:13
    本尊你觉得用什么指标来作为“不关闭总中断”的RTOS的“最大的中断响应时间”的指标?
    ...

    我认为 "最大关闭总中断的时间" 是RTOS中最重要的指标, 无出其右.
    任务切换的时间或效率顶多排在第二, 如果切换任务时不关中断, 那多点时间又能怎么样呢?
    90%以上的CPU时间都在用来执行空闲任务,为什么没有人觉得浪费?
    而几到几十微秒的切换时间就那么珍贵了?

    还是举例来说明: 假设串口波率为 230400,
    UART中断接收模式,  约43微秒就可能收到下一字节数据, 如果关中断时间接近43微秒,
    就是导致串口接收数据被覆盖,其它高速中断亦是如此.
    但是, 不关中断的任务切换, 就算达到100微秒也不会引起此类问题.
    中断响应是系统中最要的, 而任务切换时间只关系到任务响应, 一般情况下任务响应没有这么苛克的要求.

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 06:57
  • 签到天数: 173 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    715

    积分

    高级会员

    积分
    715
     楼主| 发表于 2024-5-3 20:39:10 | 显示全部楼层
    本帖最后由 fanxsp 于 2024-5-3 20:53 编辑
    tzz1983 发表于 2024-5-3 20:27
    不会的, 要看你怎么搬, 栈是有方向的, 正常情况下, 只会用到末端的容量, 不会影响之前的.
    我这两天也移植 ...

    没错啊,我也是这么做的,但是程序设计有没错,要通过测试来验证,这个测试的目的,就是要测试搬栈的顺序没有错,当在搬栈的过程中发生不可屏蔽中断时,程序能正常运行。之所以要把不可屏蔽中断的中断间隔设为几个us,就是为了确保在搬栈的过程中,有发生不可屏蔽中断,这样才能达到测试、验证的目的。

    点评

    嗯 我想信你, 写代码这么规范的, 肯定很严谨哈  发表于 2024-5-3 20:48
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    576

    回帖

    1197

    积分

    荣誉版主

    积分
    1197
    发表于 2024-5-3 21:10:47 | 显示全部楼层
    杨为民 发表于 2024-5-3 20:13
    本尊你觉得用什么指标来作为“不关闭总中断”的RTOS的“最大的中断响应时间”的指标?
    ...

    CosyOS说了,用"0"中断延迟来描述, 这也是他CosyOS最大的卖点
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    4

    积分

    新手上路

    积分
    4
    发表于 2024-5-3 21:23:28 | 显示全部楼层
    看了一下说明文档,要求配置8级编译器优化,勾选LX51和AX51,以及内存设置为Small。我的现有工程使用STC8H3K64用的9级编译器优化(8级编译文件远超过64K),未勾选LX51和AX51(勾选后const太大),内存设置为Large(变量太多),是不是没法用上这个TinyOS。

    点评

    Keil C51 下,如果用 RTOS,编译器优化等级的可选范围为:4~8级。 如果是 0~3级 或 9~11级,都是错误的用法,即使没出问题,也只是没赶上出问题的契机而已。 请相信我的话,你不会吃亏的。 如果代码放不下,应设法减  详情 回复 发表于 2024-5-3 22:14
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 06:57
  • 签到天数: 173 天

    [LV.7]常住居民III

    1

    主题

    164

    回帖

    715

    积分

    高级会员

    积分
    715
     楼主| 发表于 2024-5-3 21:39:23 | 显示全部楼层
    cnwans 发表于 2024-5-3 21:23
    看了一下说明文档,要求配置8级编译器优化,勾选LX51和AX51,以及内存设置为Small。我的现有工程使用STC8H3 ...

    现有的情况是,只能  LX51 AX51  small  8级优化
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 12:52
  • 签到天数: 175 天

    [LV.7]常住居民III

    5

    主题

    580

    回帖

    2355

    积分

    荣誉版主

    积分
    2355
    发表于 2024-5-3 22:03:08 | 显示全部楼层
    我来报到了,刚才一直再忙写代码呢,我先看一下大家都在讨论什么?
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 04:40 , Processed in 0.070436 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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