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

原创极简的51MCU专用RTOS TinyRTOS51

[复制链接]
  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    1

    主题

    96

    回帖

    453

    积分

    中级会员

    积分
    453
     楼主| 发表于 2024-3-31 23:17:17 | 显示全部楼层
    本帖最后由 fanxsp 于 2024-3-31 23:33 编辑
    tzz1983 发表于 2024-3-31 21:28
    楼主真

    今晚才开始,看了一小会.代码和说明文档,都特别工整,正规军!

    关于你说到是第一次看到这种情况,是因为这个方法只有在 keil C51中可以用。其它的编译器,包括 ARM  ,STC32的C251都不能用。因为c51 寄存器很少,
    R0~R7 都是调用者保存的。ARM,C251 因为寄存器比较多,寄存器有分为两组,一组是调用者保存,另一组是被调用者保存。被调用者保存的一组还是
    必须入栈的。再加上ARM是用 SV 、PendSV指令进行任务切换,好象寄存器是自动入栈的。所以一般在任务级切换也是采用全部寄存器入栈了。
    关于寄存器的使用,X86 和 ARM 都有专门的调用约定,C251在帮助中有详细说 明。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    622

    回帖

    1万

    积分

    荣誉版主

    积分
    10816
    发表于 2024-4-1 12:20:17 | 显示全部楼层
    本帖最后由 杨为民 于 2024-4-1 12:22 编辑

    (1)我觉得楼主的TinyRTOS51存在一个很重要的不完善的地方

    在进行任务调度的时候,没有保存和恢复C51的“重入函数堆栈指针”(对于大模式函数,这个指针是“?C_XBP”,对于小模式函数,这个指针是“?C_IBP”),
    也没有对它们进行初始设置。这意味用户在编写TinyRTOS51项目程序时不能使用任何由“reentrant”关键字来定义的“可重入函数”
    这对TinyRTOS51用户编程来说一个极大的限制
    (2)一个实际的RTOS项目程序,分为楼主的RTOS系统程序和用户自己编写的用户程序两个部分。前面的讨论楼主已经证明了TinyRTOS51的系统程序均满足了函数重入的要求,不需要重入函数堆栈指针的参与。
    但是用户在编写自己的可重入函数时,未必能优化到不需要重入函数堆栈指针的参与的程度,这时如果TinyRTOS51系统再不支持C51标准的reentrant”关键字来定义的,那么用户怎么办?
    (3)函数重入的需求对于抢占式实时多任务操作系统比通常的裸机编程更经常发生,函数重入的现象不但在中断的时候会发生在多个任务之间切换的时候也会发生
    尤其是多个任务共用一个设备时(比如多个任务向同一个串口发送信息时),设备的驱动函数就可能发生重入现象
    (4)不知道楼主对这个不完善的地方有什么特殊的考虑吗?如果没有,建议楼主还是完善它,给用户更大的编程空间。


    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    1

    主题

    96

    回帖

    453

    积分

    中级会员

    积分
    453
     楼主| 发表于 2024-4-1 14:16:16 | 显示全部楼层
    杨为民 发表于 2024-4-1 12:20
    (1)我觉得楼主的TinyRTOS51存在一个很重要的不完善的地方:

    在进行任务调度的时候,没有保存和恢复C51的 ...

    暂时是不支持reentrant函数,后面会考虑。现在主要问题是测试还很不充份,现在重点是多做一些测试例程进行测试。

    点评

    期待TinyRTOS51 坚持初衷,不断成长  详情 回复 发表于 2024-4-1 17:52
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    622

    回帖

    1万

    积分

    荣誉版主

    积分
    10816
    发表于 2024-4-1 17:52:06 | 显示全部楼层
    fanxsp 发表于 2024-4-1 14:16
    暂时是不支持reentrant函数,后面会考虑。现在主要问题是测试还很不充份,现在重点是多做一些测试例程进 ...

    期待TinyRTOS51 坚持初衷,不断成长
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9235

    回帖

    1万

    积分

    管理员

    积分
    13948
    发表于 2024-4-1 22:41:56 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    1

    主题

    96

    回帖

    453

    积分

    中级会员

    积分
    453
     楼主| 发表于 2024-4-2 07:49:30 | 显示全部楼层
    TinyRTOS51  V1.01  增加一个用消息队列进行串口通讯的例程,欢迎大家下载测试。
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.5]常住居民I

    2

    主题

    148

    回帖

    191

    积分

    注册会员

    积分
    191
    发表于 2024-4-2 09:53:22 | 显示全部楼层
    现在RTOS是越来越多了
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1642

    积分

    荣誉版主

    积分
    1642
    发表于 2024-4-2 11:31:53 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-4-2 11:34 编辑

    栈深度估算=任务调用深度*2+16 , 这个不够吧, 这里是指不允许中断嵌套吗?

    想叉了,知道了,penDSV切换任务,不考虑中断嵌套级数.
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    1

    主题

    96

    回帖

    453

    积分

    中级会员

    积分
    453
     楼主| 发表于 2024-4-2 11:50:00 | 显示全部楼层
    tzz1983 发表于 2024-4-2 11:31
    栈深度估算=任务调用深度*2+16 , 这个不够吧, 这里是指不允许中断嵌套吗?

    想叉了,知道了,penDSV切换任务, ...

    允许中断嵌套,由于采用移栈的方法,类似你的 PSP+MSP,工作的栈是在 idata 中的,任务切换是发生在最低优先级的PendSV中断中,这时嵌套的中断都已经退出。

    点评

    是的, 我一下子没从251转过来, 在你这里, 分为"运行时栈IDATA", 和"存储栈XDATA". 你的估算实际上是"存储栈XDATA"的估算. 我一直在思考, 51核有没有不搬栈就能实现OS的办法. 看到你的栈估算,想叉了, 眼前一亮,  详情 回复 发表于 2024-4-2 12:10
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1642

    积分

    荣誉版主

    积分
    1642
    发表于 2024-4-2 12:10:23 | 显示全部楼层
    fanxsp 发表于 2024-4-2 11:50
    允许中断嵌套,由于采用移栈的方法,类似你的 PSP+MSP,工作的栈是在 idata 中的,任务切换是发生在最低 ...

    是的, 我一下子没从251转过来, 在你这里, 分为"运行时栈IDATA", 和"存储栈XDATA".  你的估算实际上是"存储栈XDATA"的估算.

    我一直在思考, 51核有没有不搬栈就能实现OS的办法.
    看到你的栈估算,想叉了, 眼前一亮,  如果一个任务只用30Byte, 那等于不用搬家也能做8个任务. 后来一想到中断, 瞬间就没脾气了

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-30 08:56 , Processed in 0.070512 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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