找回密码
 立即注册
查看: 1915|回复: 33

热烈欢迎 杨教授,CosyOS 大侠 !群星璀璨 STC RTOS 版块

[复制链接]

该用户从未签到

550

主题

9345

回帖

1万

积分

管理员

积分
13916
发表于 2023-5-19 09:43:22 | 显示全部楼层 |阅读模式
热烈欢迎 杨教授CosyOS 大侠
前来 www.STCAIMCU.com | RTOS 星光大道 担任 【荣誉版主

群星璀璨的 STC RTOS 版块,RTOS 新高度
杨教授: 计算机专业教授
CosyOS 大侠:
国产原创 RTOS 专家,
STC 32位8051 原生RTOS作者,STC 8051 原生RTOS作者


[STC 原生RTOS] PK [移植RTOS]

一、移植RTOS可能涉及到的一些问题

1、任务切换
不同内核的MCU,在任务切换时,出入栈的方法可能有所不同,需做相关调整。

2、临界区保护
不同内核的MCU,开关中断的方法可能有所不同,需做相关调整。

3、系统全局变量访问
8051:只有单字节变量访问不会重入;
80251:data、edata直接寻址(1~4字节)不会重入,间接寻址(1~2字节)不会重入;
Arm32:所有(1~4字节)访问不会重入;

如果一个原生仅支持Arm32或更高端内核的RTOS,移植到51或251,所有系统全局变量都要
考虑是否有重入的可能(因为RTOS的作者从来不会考虑这个问题,因为根本不需要)。

4、系统服务函数可重入
很多RTOS中的系统服务函数,是需要可重入的,典型的示例如下(以任务中调用服务为例):
RET_t Function(p1, p2, ..., pn)
{
   lv1; lv2; ... lvn;   // 定义局部变量
   ... ...;
   进入任务临界区;
   临界区保护代码;
   退出任务临界区;
   ... ...;
}

如果这样的RTOS移植到251,还非常好处理,只需要一定大小的edata,并生成全局可重入函数即可解决。



可如果移植到51,将变得非常艰难。
1、仔细检查每个服务函数是否已经是可重入函数(形参和局部变量都是寄存器变量),然而这又取决于多方面因素,还与编译器优化等级有关(keil c51 4级优化以上才支持寄存器变量),是无常的,所以根本无法采用。
2、每个服务函数的声明和定义都加上“reentrant”属性,再增加XBP入出任务栈,虽然可以实现,但性能将会大打折扣,使本来就弱的51更加雪上加霜。


二、CosyOS对相关问题的处理

由于CosyOS是原生支持STC 8051和32位8051的,在设计之初就考虑到了上述问题,并采取了一系列行之有效的措施,不但解决了问题,还可实现高性能。
下面主要介绍一下CosyOS对系统服务可重入的处理(以任务中调用服务为例)

1、本地代码
do{   \
   进入任务临界区;   \
   本地执行服务;   \
   退出任务临界区;   \
}while(false)
由于是本地独立的代码,并非调用函数,所以不存在重入的问题。


2、调用服务函数(无返回值)
do{   \
   进入任务临界区;   \
   调用服务函数();   \
}while(false)
由于是在进入任务临界区之后才调用的服务函数,所以服务函数是不会重入的,也不需要可重入。
服务函数在返回时会自动退出任务临界区。


3、调用服务函数(有返回值)
(   \
   __enter_critical() ? 调用服务函数() : 返回一个其它值   \
)
采用了三目运算,巧妙的实现了在进入任务临界区之后再调用服务函数并返回值。
__enter_critical()的返回值为真,必然会调用服务函数并返回值;为假时返回一个其它值是在欺骗编译器,这种情况永远不会发生。

这一类服务又可细分为三类:
1、服务函数在退出任务临界区后返回常量寄存器变量当前任务节点中的变量这一类服务函数,在退出任务临界区之前是不会重入的,在退出之后是可重入的。
2、服务函数会中途退出任务临界区并触发任务调度,当再次回到当前位置时,会直接返回任务节点中的变量,这一类服务函数,与上一类相同。
3、服务函数会中途退出任务临界区并触发任务调度,当再次回到当前位置时,会再次访问形参或局部变量,而后返回,这一类服务函数需额外定义为可重入函数。


CosyOS需额外定义为可重入函数的系统服务(已加入了reentrant属性):
1、任务中接收私信,uRecvDM(tc);
2、任务中接收邮件,uRecvMail(mail, mbox, tc);
3、中断中接收邮件,iRecvMail(mail, mbox);
4、中断中接收消息,iRecvMsg(que);



对于用户来说:
1、如果是8051内核、80251内核(keil C251 Version 1.x),如果用户调用了上述的四个服务,需要用户自行在启动文件中配置可重入栈[XBP]。
2、Arm内核、80251内核(keil C251 Version 2或更高版本),用户无需理会。
但有一点需要注意:
对于80251内核(keil C251 Version 2或更高版本),您的自定义函数如需可重入,可使用reentrant属性声明,
但不要勾选编译器的 Generate reentrant functions 选项,原因是CosyOS内核为实现高效大量声明或定义了局部的bit型变量,将与此选项冲突。


可见,CosyOS所用的方法可以说是各种内核通吃,尽可能的拜托了系统服务对可重入栈的依赖,即使是8051也可轻松实现高性能。

计划在下一版本中把任务中接收私信任务中接收邮件调整为不使用可重入栈;
针对51,中断中接收邮件中断中接收消息调整为限制调用(只允许在相同优先级的各个中断中调用),用户的自定义函数也不允许使用可重入栈,
使51彻底摆脱可重入栈,全面提速。







回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-4-24 09:28
  • 签到天数: 90 天

    [LV.6]常住居民II

    68

    主题

    582

    回帖

    1874

    积分

    超级版主

    积分
    1874
    QQ
    发表于 2023-5-19 09:47:39 | 显示全部楼层
    杨教授威武,  CosyOS 大侠威武
    热线19952583534
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-30 08:41
  • 签到天数: 40 天

    [LV.5]常住居民I

    5

    主题

    112

    回帖

    1084

    积分

    版主

    积分
    1084
    发表于 2023-5-19 09:47:55 | 显示全部楼层
    热烈欢迎 杨教授,杨教授威武!CosyOS 大侠!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    9

    主题

    294

    回帖

    1712

    积分

    版主

    积分
    1712
    QQ
    发表于 2023-5-19 09:48:45 | 显示全部楼层
    热烈欢迎 杨教授,CosyOS 大侠,杨教授威武,CosyOS 大侠威武
    QQ:1463035472,微信:19952583954
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:29
  • 签到天数: 116 天

    [LV.6]常住居民II

    3

    主题

    89

    回帖

    1419

    积分

    超级版主

    积分
    1419
    发表于 2023-5-19 09:48:57 | 显示全部楼层
    热烈欢迎 杨教授,CosyOS 大侠 !
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    6

    主题

    122

    回帖

    1018

    积分

    超级版主

    积分
    1018
    发表于 2023-5-19 09:49:31 | 显示全部楼层
    热烈欢迎 杨教授 !CosyOS 大侠!
    QQ:2768446529  手机:19952605150(微信同号)
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-1 10:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    5

    主题

    121

    回帖

    1026

    积分

    版主

    积分
    1026
    发表于 2023-5-19 09:49:34 | 显示全部楼层
    热烈欢迎,CosyOS 大侠!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 08:36
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    11

    主题

    183

    回帖

    1806

    积分

    版主

    积分
    1806
    QQ
    发表于 2023-5-19 09:50:08 | 显示全部楼层
    本帖最后由 红心A 于 2023-5-19 10:15 编辑

    111.gif
    热烈欢迎 杨教授,CosyOS 大侠!

    QQ:1638975601
    手机:19952583876
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-9 10:41
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    7

    主题

    103

    回帖

    862

    积分

    超级版主

    积分
    862
    发表于 2023-5-19 09:51:03 | 显示全部楼层
    热烈欢迎,CosyOS 大侠!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-30 13:22
  • 签到天数: 36 天

    [LV.5]常住居民I

    12

    主题

    185

    回帖

    1129

    积分

    版主

    STC

    积分
    1129
    发表于 2023-5-19 09:54:22 | 显示全部楼层
    热烈欢迎 杨教授,CosyOS 大侠
    欢迎两位!
    电话:0513-55012982、18106296593 (微信同)
    QQ : 1347154513
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-8 04:31 , Processed in 0.072949 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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