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

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

 火... [复制链接]

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-30 19:45:16 | 显示全部楼层
tzz1*** 发表于 2024-6-30 18:52
话说,  你说的所有选项我都尝试了一遍, 无果!  

真的是很无耐, 控制块放在EDATA, 一切正常.  

你再调整一下 PUSH DR56 / POP DR56,试一试吧
回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-30 20:06:27 | 显示全部楼层
本帖最后由 CosyOS 于 2024-6-30 20:20 编辑
tzz1*** 发表于 2024-6-30 18:52
话说,  你说的所有选项我都尝试了一遍, 无果!  

真的是很无耐, 控制块放在EDATA, 一切正常.  

我又做了一些有关 DPXL 的测试,这个 DPXL 也不是不能写,
每次任务切换时,都做下面的事,
1:
MOV DPXL, #1

2:
MOV R0, #1
MOV DPXL, R0

访问xdata都没问题的。

如果把入栈的 DPXL 出栈到 DPXL,或出栈到其它寄存器再MOV到DPXL,就不行。
但我也校验了,出栈到 DPXL 后,再读出来确实还是1啊,为什么就不行呢???

回复

使用道具 举报 送花

19

主题

920

回帖

2767

积分

荣誉版主

积分
2767
发表于 2024-6-30 20:08:47 | 显示全部楼层
本帖最后由 tzz1983 于 2024-6-30 20:11 编辑
Cos*** 发表于 2024-6-30 19:37
还有件事要通知你,当前我的测试结论:
任务切换现场保护时,如果入栈DR56,会导致 访问 xdata 出现异常, ...

嗯 , 你说的很有道理!

你这么一说, 我就想起来一件事情, 前两天看反汇编的时候, 就发现了一个疑问, 当时并没有引起注意.

如下图:
截图202406302000576007.jpg

编译器是写了DPTR就直接用DR56访问, 确实没有写DPXL.
当时以为DR56是专门用作XDATA间址的, 写或不写DPXL都无所谓. 现在看来是编译器故意不写的吧!

看来硬件冷知识还是欠缺. 等会我再去试一下, 改改这个地方看看能不能一针见血.

回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-30 20:09:24 | 显示全部楼层
tzz1*** 发表于 2024-6-30 18:52
话说,  你说的所有选项我都尝试了一遍, 无果!  

真的是很无耐, 控制块放在EDATA, 一切正常.  

当前的有效解决方案就是,不要 PUSH/POP DR56,改为 PUSH/POP DPH、DPL,
这样,访问 xdata 就会一切正常。

点评

非常感谢, 等会我去尝试  详情 回复 发表于 2024-6-30 20:13
回复

使用道具 举报 送花

19

主题

920

回帖

2767

积分

荣誉版主

积分
2767
发表于 2024-6-30 20:13:47 | 显示全部楼层
Cos*** 发表于 2024-6-30 20:09
当前的有效解决方案就是,不要 PUSH/POP DR56,改为 PUSH/POP DPH、DPL,
这样,访问 xdata 就会一切正常 ...

非常感谢, 等会我去尝试

点评

我找到 PUSH DR56 导致 访问 xdata 异常的原因了! 不是 不能 PUSH DR56, 是因为各个任务在首次调度的时候,是直接恢复现场, 所以,各个任务栈数据的初始化 要正确,DPXL 对应的字节需要正确的初始化, 直接把 DPX  详情 回复 发表于 2024-7-2 23:14
而且,我们看一下 C251 反汇编,Keil 从来都不会 PUSH DR56,从来都是 PUSH DPH、DPL。 最早我还再想,Keil 怎么这么蠢呢?直接 PUSH DR56 不就完了吗? 现在看来,其中必有深意。。。  详情 回复 发表于 2024-6-30 20:45
虽然原因未知,按我说的方法做,一定会正常的。 当前 CosyOS 最新版,已经进行了全方位的测试,包括内存方案1、2、3、4、5。 方案4、5都是大模型,而且 CosyOS 的任务管理器 的串口发送缓存,固定使用 xdata, 前些  详情 回复 发表于 2024-6-30 20:29
回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-30 20:29:42 | 显示全部楼层
tzz1*** 发表于 2024-6-30 20:13
非常感谢, 等会我去尝试

虽然原因未知,按我说的方法做,一定会正常的。
当前 CosyOS 最新版,已经进行了全方位的测试,包括内存方案1、2、3、4、5。
方案4、5都是大模型,而且 CosyOS 的任务管理器 的串口发送缓存,固定使用 xdata,
前些天移植的时候,一旦 PUSH DR56,就会导致任务管理器 不能运行,而且方案4、5,任务也不能运行。
最后调整为 PUSH DPH、DPL,才解决了相关问题,xdata的访问才正常。


回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-30 20:45:33 | 显示全部楼层
tzz1*** 发表于 2024-6-30 20:13
非常感谢, 等会我去尝试

而且,我们看一下 C251 反汇编,Keil 从来都不会 PUSH DR56,从来都是 PUSH DPH、DPL。
最早我还在想,Keil 怎么这么蠢呢?直接 PUSH DR56 不就完了吗?
现在看来,其中必有深意。。。
回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-7-1 13:32:24 | 显示全部楼层
本帖最后由 CosyOS 于 2024-10-26 03:08 编辑

CosyOS-II 最新版 V3.0.0 补充说明

V3.0.0 较以前版本,优化调整的地方还是比较多的,
不仅仅是 任务切换保护/恢复现场、搬栈、中断挂起服务的装载 等,用纯汇编来实现。

1、增加了新的 指针域定义,_STATIC_MEM_
以前版本,只要是 内核对象,数据结构中的相关指针,指针域一律用 _OBJ_MEM_,
251内存方案3、4的时候,内核对象可能为静态或动态,所以,_OBJ_MEM_ 为空,
相关指针为 far* 或 huge*,4字节,访问慢。
由于 CosyOS 大部分内核对象只有静态创建,任务是有静态创建和动态创建,所以,
增加了 _STATIC_MEM_ 后,数据结构中,大部分内核对象的指针,指针域固定为
_STATIC_MEM_,只有可静态可动态的,如任务,指针域才用 _OBJ_MEM_,
这使得,新版本中,251下,无论哪种内存方案,相关指针都是 2bytes,
内存占用更低,访问速度更快。

2、51,增加了 ?C_XBP,的任务切换现场保护,可在mcu配置文件中配置,
默认为 不保护。方便用户在C51下,采用 reentrant 定义 可重入函数。

3、51、251,用户自定义任务切换现场保护,同时支持 C语言 和 汇编语言 两种保护
方法,用户可自由选择,具体可查看mcu配置文件 .h、.inc。

4、性能提升
(1)51搬栈速度不会有提升,相反还会稍有下降较以前版本。
(2)251搬栈速度会有质的提升
据热心网友评测,251搬栈速度较以前版本,相同内存配置方案,提升了30%~40%;
新版内存配置方案五(任务栈在xdata)的搬栈速度,与以前版本内存配置方案二(任务栈在edata)的搬栈速度相当。
这为 STC32G 小edata内存 的应用(内存配置方案五),提供了强有力的保障。





回复

使用道具 举报 送花

4

主题

36

回帖

1026

积分

金牌会员

积分
1026
发表于 2024-7-1 21:03:07 | 显示全部楼层
恭喜,恭喜,又出新版本了。
回复

使用道具 举报 送花

4

主题

36

回帖

1026

积分

金牌会员

积分
1026
发表于 2024-7-1 21:09:48 | 显示全部楼层
CosyOS-II-STC8H中,默认情况下,系统时钟是定时器0,pendSV是外部中断0,DEBUG监控是串口2。因CosyOS-II-STC8H未使用stc8h的库函数,不知道printf()是如何联到串口1的?

点评

printf()是C51标准库函数,调用的是标准库的putchar(),就是连接到串口1。 如果想更换其它串口,只能自己重写putchar()。  详情 回复 发表于 2024-7-1 22:08
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-12 00:06 , Processed in 0.074143 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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