sqj 发表于 2024-7-7 23:29:42

{:5_300:}感谢分享

tzz1983 发表于 2024-7-8 15:40:38

感觉我是你的福星哈,上次我来聊会天,你就随手推出了全局变量访问的功能。
这次来聊了几次天, 你又是出新版本, 又找到BUG,好奇妙。

CosyOS 发表于 2024-7-8 16:28:01

tzz1983 发表于 2024-7-8 15:40
感觉我是你的福星哈,上次我来聊会天,你就随手推出了全局变量访问的功能。
这次来聊了几次天, 你又是出新 ...

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

tzz1983 发表于 2024-7-8 16:43:01

CosyOS 发表于 2024-7-8 16:28
是的,可见你是多么的重要,没有你,星星都没有那么亮了,月亮也没有那么圆。
当前,CosyOS新版刚刚推出 ...

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

CosyOS 发表于 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。

六、其它调整及优化。

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



CosyOS 发表于 2024-7-8 22:22:40

补充说明:
251 MSP模式搬栈,卓越性能 比 节约flash,搬栈时间可减少 28~40 左右个周期,
这仅是指一次搬栈。
每次任务切换时,要保护现场、恢复现场,共搬栈两次,
所以,任务切换时间可减少 56~80 左右个周期。


tzz1983 发表于 2024-7-8 22:53:35

本帖最后由 tzz1983 于 2024-7-8 22:58 编辑

CosyOS 发表于 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 类型变量就会被放到模拟栈去?

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

明天去试试看, 太晚了, 睡觉!{:lol:}

CosyOS 发表于 2024-7-9 01:21:47

本帖最后由 CosyOS 于 2024-7-9 01:27 编辑

tzz1983 发表于 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,更是精心设计的搬栈代码,可谓是极速搬栈,快的令人发指,,,



ethantlh 发表于 2024-7-9 15:10:18

请问图中这个“;”报错怎么解决?我是用V3.0.0的工程模板,根据4月26日的视频操作,编译出现这个错误,以及一些其他的未定义报警,根据我的观察,将报警全部修改正确,最终仅留下这个错误。请教大佬,这个是哪里出了问题,怎么修改。

CosyOS 发表于 2024-7-9 15:52:20

本帖最后由 CosyOS 于 2024-7-9 16:03 编辑

ethantlh 发表于 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、当然你也可以尝试更新为新版,在这个过程中不断发现问题、解决问题。
   但应该先做必要的准备,如下载最新版的工程模板,进行充分的了解,再动手。

页: 73 74 75 76 77 78 79 80 81 82 [83] 84 85 86 87 88 89 90 91 92
查看完整版本: 全局不关总中断的 RTOS,CosyOS-III-V1.2.0, 送 擎天柱-AI8051U转89C52核心板