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

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

 火... [复制链接]

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2024-6-26 13:15:02 | 显示全部楼层
6666
回复

使用道具 举报 送花

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2024-6-26 13:15:16 | 显示全部楼层
6666
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-04 09:42:04

12

主题

110

回帖

1084

积分

金牌会员

积分
1084
发表于 2024-6-26 17:09:58 | 显示全部楼层
用汇编,学习内部原理的门槛又增加了
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-27 19:44:03 | 显示全部楼层
CosyOS-II 最新版 V3.0.0 发布!

新版特性:
一、51、251,移植 和 中断挂起服务的装载,均采用纯汇编实现。
二、arm,移植 和 中断挂起服务的装载,同时提供了 内嵌汇编 和 纯汇编 两套方案,默认启用内嵌汇编方案,提高易用性。
三、新增了 Port 文件夹,里面均为 移植文件,包括 c、h、s。

截图202406271930051935.jpg 截图202406271931041074.jpg 截图202406271932479283.jpg

syscfg.h:系统配置文件
mcucfg_8051.h、mcucfg_80251.h、mcucfg_cmx.h:mcu配置文件
mcucfg_8051.inc、mcucfg_80251.inc:用户自定义任务切换现场保护,汇编语言保护方案
Port/port_xxx:移植文件
port_cmx_s.c:内嵌汇编移植(默认自动启用)
port_cmx_s.s:纯汇编移植


工程模板 附带 测试程序 同时发布,请顶楼下载!



1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-27 20:53:18 | 显示全部楼层
本次的测试程序,
恢复/挂起测试、清除阻塞测试、二值信号量测试、事件标志组测试、零中断延迟测试,
均增加了 中断挂起服务FLAG队列 的测试方案,
在相应的 C 文件中可配置 是采用 中断挂起服务FIFO队列 还是 中断挂起服务FLAG队列?
默认采用 中断挂起服务FIFO队列。


事件标志组测试,另需在 系统配置文件中 配置 用户定时中断/查询总数。
动态内存测试,可能需要重新调整内存池指针和大小。
其它测试,有时可能也需要重新调整内存池指针和大小。
因为 无法一套配置适用于所有的测试情况。


默认 启用了 滴答钩子 和 挂起服务钩子,以配合 中断挂起服务FLAG队列 的测试。







回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-27 21:04:19 | 显示全部楼层
汇编文件,行不对齐的话,tab 设置为 4 就好了。
汇编文件都用的 tab ,以后 再调整为 空格。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-03-28 10:25:35

4

主题

74

回帖

550

积分

高级会员

积分
550
发表于 2024-6-29 20:32:37 | 显示全部楼层
本帖最后由 Yang.Lian 于 2024-6-29 20:34 编辑

我建议将内存管理器精简成一个数据结构
再有该数据结构转成字符展示的任务管理器


这样的话,
比如四个UART都用了,就没法同时显示任务管理器了,但是我有一个UART是MODBUS,我可以把任务管理器融入到MODBUS中
,当前没有简单的做法,我只能通过改OS中的taskmgr来实现

实际上我一般不会去改 OS 的代码,主要是担心影响稳定性

如果通过一个数据结构或者某个API来实现任务管理器,那么把任务管理器变成何种形式就灵活很多

点评

我抽空再研究下,看看能不能做出优化调整。  发表于 2024-6-30 13:35
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2323

积分

荣誉版主

积分
2323
发表于 2024-6-30 11:57:05 | 显示全部楼层
@CosyOS  有个问题需要您帮忙, 请教一下,  251内核, 用RTOS时,  使用XDATA 有什么特别要注意的地方吗?

我这几天调UCOS@251核时, 发现把 任务控制块放在XDATA区时运行不稳定,  找不出原因.  

之前看官方FreeRTOS移植原创时, 看到一句话
截图202406301147232866.jpg

这说明以前原FreeRTOS移植作者也可能遇到了同样的问题.

是不是有什么地方我没有考虑到呢?  希望获得帮助.

另外@神农鼎,FreeRTOS@STC官方移植的作者是谁呢, 帮忙问一下, 之前使用XDATA是遇到了什么问题, 如果有共性, 或许对我有帮助!

点评

还有件事要通知你,当前我的测试结论: 任务切换现场保护时,如果入栈DR56,会导致 访问 xdata 出现异常, 即使内存模型为 XSmall 时,也是如此。 OS_PendSV_Handler{Prefix}: PUSH DR28 PUSH DR24 P  详情 回复 发表于 2024-6-30 19:37
根据我的经验,当内核对象在 XDATA 时,需注意以下事项: 1、generate reentrant fuctions,不要打勾。 虽然通过研究发现,一个可重入函数,即使局部变量被定义在xdata中,仍然还是分配在可重入栈中, 也就是“可  详情 回复 发表于 2024-6-30 13:33
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-30 13:33:36 | 显示全部楼层
tzz1*** 发表于 2024-6-30 11:57
@CosyOS  有个问题需要您帮忙, 请教一下,  251内核, 用RTOS时,  使用XDATA 有什么特别要注意的地方吗?

我 ...


根据我的经验,当内核对象在 XDATA 时,需注意以下事项:

1、generate reentrant fuctions,不要打勾。
虽然通过研究发现,一个可重入函数,即使局部变量被定义在xdata中,仍然还是分配在可重入栈中,
也就是“可重入优先原则”,但CosyOS只要是在大模型 Large 时,generate reentrant fuctions 打勾 就会出问题,未能找到确切原因。
此时,全局方案调整为 generate reentrant fuctions 不打勾,并添加控制命令 NOOVERLAY,需要可重入的函数,手动添加 reentrant。

2、4 Byte Interrupt Frame Size,不要打勾。
在CosyOS的实际测试中,只要内存模型为 Large 时,4 Byte Interrupt Frame Size 如果打勾,有些测试项 就会出问题。
这证明此时,PSW1 必须入栈保护。

3、Alias checking on pointer accesses
在CosyOS的实际测试中,Alias checking on pointer accesses 打勾,会导致一些问题产生,而是否产生这些问题,仿佛与内存模型无关。
CosyOS 建议用户在任何情况下,Alias checking on pointer accesses 都不要打勾。



主要就这3点,你可以调整下试一试。

点评

回馈一个问题: 这个说法并不严谨.以下6种举例: void TestXdata(void) reentrant { unsigned char val[1]; //large编译模式 正确, 变量在重入栈中 val[0] = 0XFF; P2 = val[0]; } void Te  详情 回复 发表于 2024-7-3 11:30
话说, 你说的所有选项我都尝试了一遍, 无果! 真的是很无耐, 控制块放在EDATA, 一切正常. 一旦放在XDATA, 就会随机出再一些问题 ,(比如有的任务直接就不运行了) , 偶尔也会出现重启. 仔细检查了代码, 真没什  详情 回复 发表于 2024-6-30 18:52
好的,多谢解答,我再多尝试一下  发表于 2024-6-30 17:31
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2323

积分

荣誉版主

积分
2323
发表于 2024-6-30 18:52:19 | 显示全部楼层
本帖最后由 tzz1983 于 2024-6-30 18:54 编辑
Cos*** 发表于 2024-6-30 13:33
根据我的经验,当内核对象在 XDATA 时,需注意以下事项:

1、generate reentrant fuctions,不要打勾。
我这几天调UCOS@251核时, 发现把 任务控制块放在XDATA区时运行不稳定,

话说,  你说的所有选项我都尝试了一遍, 无果!  

真的是很无耐, 控制块放在EDATA, 一切正常.  
一旦放在XDATA, 就会随机出再一些问题 ,(比如有的任务直接就不运行了) , 偶尔也会出现重启.
仔细检查了代码, 真没什么问题呀.

几个有意思的点:
1. 不改代码的情况下, 只调整时钟频率, 有些频率运行正常 , 比如 35M , 正常运行几个小时不出问题. 换24M, 几分钟甚至几十秒就出问题.
2. 随变在哪个地方添加一个 _nop_() 指令, 也会有不同的运行结果, 比如:
截图202406301843384636.jpg

头搞炸了, 产生怀疑了!!!

最新进展情况, 有一个意外的发现, 之前串口1驱动用了DMA,  我怀疑DMA 读写 XDATA 会和CPU 抢总线, (当然规格书上说不会, 我自己猜的)
于是改成了中断方式, 结果, 现在测试了两个多小时, 一切正常,  令人产生遐想啊



点评

当前的有效解决方案就是,不要 PUSH/POP DR56,改为 PUSH/POP DPH、DPL, 这样,访问 xdata 就会一切正常。  详情 回复 发表于 2024-6-30 20:09
我又做了一些有关 DPXL 的测试,这个 DPXL 也不是能写, 每次任务切换时,都做下面的事, 1: MOV DPXL, #1 2: MOV R0, #1 MOV DPXL, R0 访问xdata都没问题的。 如果把入栈的 DPXL 出栈到 DPXL,或出栈到其它寄存  详情 回复 发表于 2024-6-30 20:06
你再调整一下 PUSH DR56 / POP DR56,试一试吧  详情 回复 发表于 2024-6-30 19:45
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-5 14:57 , Processed in 0.150724 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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