找回密码
 立即注册
楼主: CosyOS

全局不关总中断的 RTOS,CosyOS-III-V1.2.0, 送 擎天柱-AI8051U转89C52核心板

 火... [复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-07-08 22:51:17

0

主题

22

回帖

51

积分

注册会员

积分
51
发表于 2024-7-7 23:29:42 | 显示全部楼层
{:5_300:}感谢分享
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2323

积分

荣誉版主

积分
2323
发表于 2024-7-8 15:40:38 | 显示全部楼层
感觉我是你的福星哈,上次我来聊会天,你就随手推出了全局变量访问的功能。
这次来聊了几次天, 你又是出新版本, 又找到BUG,好奇妙。

点评

是的,可见你是多么的重要,没有你,星星都没有那么亮了,月亮也没有那么圆。 当前,CosyOS新版刚刚推出,Large模型也支持全局可重入了, 已经做了全面的测试,Large模型的全局可重入没有问题了。 这都是你带给我的  详情 回复 发表于 2024-7-8 16:28
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-04 20:54:20

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-7-8 16:28:01 | 显示全部楼层
tzz1*** 发表于 2024-7-8 15:40
感觉我是你的福星哈,上次我来聊会天,你就随手推出了全局变量访问的功能。
这次来聊了几次天, 你又是出新 ...

是的,可见你是多么的重要,没有你,星星都没有那么亮了,月亮也没有那么圆。
当前,CosyOS新版刚刚推出,Large模型也支持全局可重入了,
已经做了全面的测试,Large模型的全局可重入没有问题了。
这都是你带给我的福音{:5_284:}

点评

你遇到的是什么问题? 与指针有关?  详情 回复 发表于 2024-7-8 16:43
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2323

积分

荣誉版主

积分
2323
发表于 2024-7-8 16:43:01 | 显示全部楼层
Cos*** 发表于 2024-7-8 16:28
是的,可见你是多么的重要,没有你,星星都没有那么亮了,月亮也没有那么圆。
当前,CosyOS新版刚刚推出 ...

你遇到的是什么问题? 与指针有关?

点评

以前测试有个别测试项有问题,现在测试都正常了,估计可能跟局部变量有关。  发表于 2024-7-8 17:43
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-04 20:54:20

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-7-8 17:41:09 | 显示全部楼层
本帖最后由 CosyOS 于 2024-7-8 17:47 编辑

CosyOS-II 最新版 V3.0.1 发布 !


新版特性:

一、修复了 C51 下,对 XBPSTACK 支持的BUG。
在 C51 下,CosyOS-II 仅支持 XBPSTACK,不支持 IBPSTACK 和 PBPSTACK,
各任务的任务栈 即为 各任务的XBP栈,任务栈数据初始化时,其XBP栈顶指针 指向 任务栈顶 +1。
用户可在 mcucfg_8051.h 中,配置 是否启用 ?C_XBP 的任务切换现场保护,默认为不启用。
需注意,XBP栈的应用,会存在关闭总中断EA的情况,但时间都是极短的、确定的。

CosyOS-II 仅在 任务切换 - 恢复 ?C_XBP 时,存在关EA行为:

IF MCUCFG_XBPSTACK == __ENABLED__        ; RESTORE ?C_XBP
                                MOVX        A, @DPTR
                                MOV          R0, A
                                INC           DPTR
                                MOVX        A, @DPTR
                                JBC           EA, __EA
                                MOV          ?C_XBP, R0
                                MOV          ?C_XBP+1, A
                                SJMP          RETURN
__EA:                        MOV          ?C_XBP, R0
                                MOV          ?C_XBP+1, A
                                SETB          EA
ENDIF


C51编译器 在对 ?C_XBP 的相关处理中,也存在关EA行为。

使用 XBP栈 时,各任务栈要有更充分的预留,以防 任务栈数据 与 XBP栈数据 相互覆盖,
CosyOS 无法对 XBP栈 进行有效监控,就靠用户自己了。

二、增加了 用户自定义任务切换现场保护,对 自定义数组/任务栈 中,寄存器数据的初始化。
详见,MCU配置头文件。

三、新增 51、251 启动文件,并重命名为 startup_8051.s、startup_80251.s,
以替换 Keil 自带的启动文件,在组 Port 中。

startup_8051.s:基于 STARTUP.A51 而修改,摒弃了一些不常用的或用不到的功能,

并添加更为丰富的中文注释。

startup_80251.s:基于 START251.A51 而修改,摒弃了一些不常用的或用不到的功能,

重写了 内存清零 的代码,内存清零速度 较 START251.A51,可提升 3~4 倍。

251的PSP模式,主栈被划分到edata最后512,使edata内存增加了STACKSIZE(默认值256):

                        RSEG        ?STACK
IF MCUCFG_TASKSTACK_MODE == __MSP__
                        DS                STACKSIZE
ELSE
                        DS                1
ENDIF


IF MCUCFG_TASKSTACK_MODE == __MSP__
                        MOV                DR60, #WORD0 (?STACK-1)
ELSE
                        MOV                DR60, #EDATALEN-512-1
ENDIF


251搬栈,分为两种模式,节约flash 和 卓越性能,在 mcucfg_80251.h 中配置。
卓越性能 比 节约flash,代码大了 大概 200 多一点,同时搬栈可减少 28~40 左右个周期。

四、251任务切换现场保护,调整为 PUSH DR56(原为 PUSH DPH/DPL)。

五、251 内存方案一~五,全面支持全局可重入,不必 NOOVERLAY。

六、其它调整及优化。

工程模板和测试程序,稍后在顶楼更新。



回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-04 20:54:20

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-7-8 22:22:40 | 显示全部楼层
补充说明:
251 MSP模式搬栈,卓越性能 比 节约flash,搬栈时间可减少 28~40 左右个周期,
这仅是指一次搬栈。
每次任务切换时,要保护现场、恢复现场,共搬栈两次,
所以,任务切换时间可减少 56~80 左右个周期。



点评

Keil C251 编译器, 也有 ?C_XBP , 不过我没有尝试过. START251.A51默认是 XBPSTACK == 0 的 , 如果把XBPSTACK改为非0值, 是不是在重入函数内定义 xdata 类型变是就会被放到模拟栈去? 现在是重入函数内的指定  详情 回复 发表于 2024-7-8 22:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2323

积分

荣誉版主

积分
2323
发表于 2024-7-8 22:53:35 | 显示全部楼层
本帖最后由 tzz1983 于 2024-7-8 22:58 编辑
Cos*** 发表于 2024-7-8 22:22
补充说明:
251 MSP模式搬栈,卓越性能 比 节约flash,搬栈时间可减少 28~40 左右个周期,
这仅是指一次搬 ...

Keil C251 编译器, 也有 ?C_XBP  , 不过我没有尝试过.  难道你用251也搬栈?   
我觉得即便是只有 2K edata , 只用作任务栈那也够用了, (前提是一些杂七杂八的全局变量不能占用 edata)

START251.A51默认是 XBPSTACK == 0 的  ,  
如果把XBPSTACK改为非0值,  是不是在重入函数内定义 xdata 类型变量就会被放到模拟栈去?

现在是重入函数内的指定存储类型的变量, 具体存在哪, 还是有点乱的,
暂时找出来的规律暂时就是: 不指定存储类型的局部变量, 重入优先放在重入栈中.

明天去试试看, 太晚了, 睡觉!

点评

最近忙啥呢?要不要早日加入到 CosyOS 的开发建设中来?  详情 回复 发表于 2024-7-26 23:49
C251,局部变量, 如果想放在 可重入栈 中,就不要指定 存储域,这样还有 寄存器优先分配; 如果想放在 特定的内存,就用 static,这样就由 存储域 或 内存 Model 决定, 不受 可重入函数 的影响。  详情 回复 发表于 2024-7-10 13:11
; Reentrant Stack Initilization ; ; Note: the defintions below are only required when you application contains ; reentrant code which is written with C251 Version 1 or C51. You ;  详情 回复 发表于 2024-7-9 01:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-04 20:54:20

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-7-9 01:21:47 | 显示全部楼层
本帖最后由 CosyOS 于 2024-7-9 01:27 编辑
tzz1*** 发表于 2024-7-8 22:53
Keil C251 编译器, 也有 ?C_XBP  , 不过我没有尝试过.  难道你用251也搬栈?   
我觉得即便是只有 2K edata ...

;  Reentrant Stack Initilization
;
;  Note:  the defintions below are only required when you application contains
;         reentrant code which is written with C251 Version 1 or C51.  You
;         should not enable IBPSTACK or XBPSTACK for reentrant code written
;         with C251 Version 2 since this compiler is using the hardware stack
;         of the 251 rather than a simulated stack area.

C251 V1.0,可重入栈为和C51一样的模拟栈,即 IBPSTACK、XBPSTACK。
C251 V2.0 开始,可重入栈为和MDK一样的硬件栈,不能再使用 IBPSTACK、XBPSTACK。

1、CosyOS 不支持 C251 V1.0 版本,即C251下不支持 IBPSTACK、XBPSTACK;
2、C51 下,CosyOS 对可重入栈的支持,仅支持 XBPSTACK;
3、C251下,CosyOS 支持 PSP 和 MSP 两种栈模式:
PSP模式,就不说了;
MSP模式,就是搬栈,主栈 -> 任务栈,任务栈 -> 主栈。
4、由于你采用了 MSP+PSP模式,中断入主栈,任务栈可以比较小就够用了,50多、60多、通常不到100;
而 CosyOS 不支持这种模式,仅支持PSP模式,中断也入任务栈,如果4级中断都用的话,基本估算每个任务栈大概也需 40x4=160,
否则可能会有溢出的风险,还是比较耗费 edata 内存的。
5、251搬栈仍然是有必要的,因为有些251MCU,edata内存会很小,此时就得用 MSP模式搬栈了。
总之是有备无患。当前,已有用户正在使用 MSP模式搬栈,用的不亦乐乎。

CosyOS 最新版,51、251 都采用了纯汇编移植,
251,更是精心设计的搬栈代码,可谓是极速搬栈,快的令人发指,,,



回复 支持 反对

使用道具 举报 送花

2

主题

14

回帖

125

积分

注册会员

积分
125
发表于 2024-7-9 15:10:18 | 显示全部楼层
请问图中这个“;”报错怎么解决?我是用V3.0.0的工程模板,根据4月26日的视频操作,编译出现这个错误,以及一些其他的未定义报警,根据我的观察,将报警全部修改正确,最终仅留下这个错误。请教大佬,这个是哪里出了问题,怎么修改。
截图202407091506043626.jpg

ethantlh_Deom.zip

136.98 KB, 下载次数: 285

点评

你这个差的地方有很多: 1、V3.0.0 版本开始,增加了 Port 文件,你没有加入; 2、os_redef.h,原为 #include sDefStr(sCat2Str(..\Port\port_, SYSCFG_MCUCORE.h)) 被你改了,是不能改的,病根是缺失Port文件; 3、  详情 回复 发表于 2024-7-9 15:52
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-04 20:54:20

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-7-9 15:52:20 | 显示全部楼层
本帖最后由 CosyOS 于 2024-7-9 16:03 编辑
etha*** 发表于 2024-7-9 15:10
请问图中这个“;”报错怎么解决?我是用V3.0.0的工程模板,根据4月26日的视频操作,编译出现这个错误,以 ...

你这个差的地方有很多:
1、V3.0.0 版本开始,增加了 Port 文件,你没有加入;
2、os_redef.h,原为 #include sDefStr(sCat2Str(..\Port\port_, SYSCFG_MCUCORE.h))
被你改了,是不能改的,病根是缺失Port文件;
3、Memory Model 必须用 Large,否则有报错;
4、C51 标签页 ,未添加路径 .\STC8H;
5、BL51 Misc 未添加 NOOVERLAY;
6、start_hook.c,不能简单替换文件,原示例中该文件是有内容的。

建议:
1、如果用以前的示例,就不要升级版本了,重点放在 课程内容上,能够掌握 任务的创建、启动任务等流程、及任务运行原理等即可。
2、如果想用新版,直接下载最新版的工程模板及示例。
3、当然你也可以尝试更新为新版,在这个过程中不断发现问题、解决问题。
     但应该先做必要的准备,如下载最新版的工程模板,进行充分的了解,再动手。

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-5 14:46 , Processed in 0.141709 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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