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

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

 火... [复制链接]

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-4 21:08:18 | 显示全部楼层
lmy*** 发表于 2024-6-4 16:23
什么时候移植GUI

还得过段时间
回复

使用道具 举报 送花

8

主题

89

回帖

1055

积分

金牌会员

积分
1055
发表于 2024-6-6 12:01:26 | 显示全部楼层
我完全仿照 os_debug.c 中的方法,写了一个 modbus rtu 从机,
很尴尬的是
每秒查询一次
在运行到大约 735 次查询的时候,就会“死机”,停止响应
所有内存都是静态分配

点评

注意 任务栈 是否有溢出的可能,尤其是 PSP模式,搞不好是容易任务栈溢出的。  详情 回复 发表于 2024-6-6 13:16
那你提供相关代码,我看一下有没有问题。 或者,你自己再多方面查找原因。 重点是“死机”时还有哪些迹象?  详情 回复 发表于 2024-6-6 12:44
希望这个世界让我小装一次B
回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-6 12:44:13 | 显示全部楼层
本帖最后由 CosyOS 于 2024-6-6 12:52 编辑
Yang.*** 发表于 2024-6-6 12:01
我完全仿照 os_debug.c 中的方法,写了一个 modbus rtu 从机,
很尴尬的是
每秒查询一次

那你提供相关代码,我看一下有没有问题。
或者,你自己再多方面查找原因。
重点是“死机”时还有哪些迹象?

如果是STC32的话,仔细查看 内存方案配置与编译器配置的关系:
截图202406061251374207.jpg


方案三 和 方案五,内存池指针 均指向 xdata,但要注意:
方案三:内存池指针 从 0x10000 开始;
方案五:内存池指针 从 0 开始。





回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-6 13:16:39 | 显示全部楼层
Yang.*** 发表于 2024-6-6 12:01
我完全仿照 os_debug.c 中的方法,写了一个 modbus rtu 从机,
很尴尬的是
每秒查询一次

注意 任务栈 是否有溢出的可能,尤其是 PSP模式,搞不好是容易任务栈溢出的。
回复

使用道具 举报 送花

8

主题

89

回帖

1055

积分

金牌会员

积分
1055
发表于 2024-6-6 13:46:07 | 显示全部楼层
Cos*** 发表于 2024-6-6 12:44
那你提供相关代码,我看一下有没有问题。
或者,你自己再多方面查找原因。
重点是“死机”时还有哪些迹象 ...

我先研究研究,

死机以后,不管多久,任务还可以调度一次(仅仅一次),通过 iResumeTask 还可以触发另一个Task运行一次,至此之后就完全不响应了

我先增加 任务栈 试一试
希望这个世界让我小装一次B
回复

使用道具 举报 送花

8

主题

89

回帖

1055

积分

金牌会员

积分
1055
发表于 2024-6-6 15:39:54 | 显示全部楼层
Cos*** 发表于 2024-6-6 13:16
注意 任务栈 是否有溢出的可能,尤其是 PSP模式,搞不好是容易任务栈溢出的。 ...

补充信息:
1. 我使用的 STC32G12K128
2. 我开启了 Debugger/TaskMgr,记录见本文附录
3. PMB1 就是 MODBUS的任务,
4. 用UART3,Debugger/TaskMgr 占用UART1
5. 自从开了 Debug/TaskManager,感觉又没有死机的迹象了

350次左右的时候
CosyOS-II 任务管理器          0.18%            
                    名称       TID   PRI  状态      CPU         内存
                    
                    Taskmgr      1     7   RDY    0.07%    56B/s192B
                    Debugger     4     7   SPD       0%    43B/s160B
                    PMB1         5     7   SPD    0.04%    43B/s128B
                    EARC         7     7   SPD       0%    39B/s128B
                    RNTC         8     6   SPD    0.02%    55B/s128B
                    THC          6     5   SPD    0.02%    51B/s128B
                    Sysidle      3     0   RDY   99.82%    39B/s160B
                    
                    PSVFIFO: 1/32.
                    Task-PC: 00FF0161.
                    SysTick: 23.20us.

550次左右的时候

CosyOS-II 任务管理器          0.18%            
                    名称       TID   PRI  状态      CPU         内存
                    
                    Taskmgr      1     7   RDY    0.07%    56B/s192B
                    Debugger     4     7   SPD       0%    43B/s160B
                    PMB1         5     7   SPD    0.04%    43B/s128B
                    EARC         7     7   SPD       0%    39B/s128B
                    RNTC         8     6   SPD    0.02%    55B/s128B
                    THC          6     5   SPD    0.02%    51B/s128B
                    Sysidle      3     0   RDY   99.82%    39B/s160B
                    
                    PSVFIFO: 1/32.
                    Task-PC: 00FF0161.
                    SysTick: 23.20us


800次左右的时候

CosyOS-II 任务管理器          0.18%            
                    名称       TID   PRI  状态      CPU         内存
                    
                    Taskmgr      1     7   RDY    0.07%    56B/s192B
                    Debugger     4     7   SPD       0%    43B/s160B
                    PMB1         5     7   SPD    0.04%    43B/s128B
                    EARC         7     7   SPD       0%    39B/s128B
                    RNTC         8     6   SPD    0.02%    55B/s128B
                    THC          6     5   SPD    0.02%    51B/s128B
                    Sysidle      3     0   RDY   99.82%    39B/s160B
                    
                    PSVFIFO: 1/32.
                    Task-PC: 00FF0161.
                    SysTick: 23.21us.


1200次左右的时候

CosyOS-II 任务管理器          0.18%            
                    名称       TID   PRI  状态      CPU         内存
                    
                    Taskmgr      1     7   RDY    0.07%    56B/s192B
                    Debugger     4     7   SPD       0%    43B/s160B
                    PMB1         5     7   SPD    0.04%    43B/s128B
                    EARC         7     7   SPD       0%    47B/s128B
                    RNTC         8     6   SPD    0.02%    55B/s128B
                    THC          6     5   SPD    0.02%    51B/s128B
                    Sysidle      3     0   RDY   99.82%    39B/s160B
                    
                    PSVFIFO: 5/32.
                    Task-PC: 00FF0161.
                    SysTick: 23.20us.



2100次左右的时候

CosyOS-II 任务管理器          0.18%            
                    名称       TID   PRI  状态      CPU         内存
                    
                    Taskmgr      1     7   RDY    0.07%    56B/s192B
                    Debugger     4     7   SPD       0%    43B/s160B
                    PMB1         5     7   SPD    0.04%    43B/s128B
                    EARC         7     7   SPD       0%    47B/s128B
                    RNTC         8     6   SPD    0.02%    55B/s128B
                    THC          6     5   SPD    0.02%    51B/s128B
                    Sysidle      3     0   RDY   99.82%    39B/s160B
                    
                    PSVFIFO: 5/32.
                    Task-PC: 00FF0161.
                    SysTick: 23.20us.


还在持续运行中,没有任何问题

点评

检查一下 Alias checking on pointer accesses 打勾了吗? 不要打勾。  详情 回复 发表于 2024-6-6 16:06
希望这个世界让我小装一次B
回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-6 16:06:42 | 显示全部楼层
本帖最后由 CosyOS 于 2024-6-6 16:08 编辑
Yang.*** 发表于 2024-6-6 15:39
补充信息:
1. 我使用的 STC32G12K128
2. 我开启了 Debugger/TaskMgr,记录见本文附录

检查一下 Alias checking on pointer accesses 打勾了吗?
不要打勾。
你用的是 PSP模式吗?mcucfg中,是内存方案一吗?
回复

使用道具 举报 送花

8

主题

89

回帖

1055

积分

金牌会员

积分
1055
发表于 2024-6-6 16:13:15 | 显示全部楼层
本帖最后由 Yang.Lian 于 2024-6-6 16:16 编辑
Cos*** 发表于 2024-6-6 16:06
检查一下 Alias checking on pointer accesses 打勾了吗?
不要打勾。
你用的是 PSP模式吗?mcucfg中,是 ...

Alias checking on pointer accesses 没有打钩
mcucfg_80251.h 选择是方案一: PSP

我怀疑是 PSVFIFO 溢出了

点评

那 你 PENDSV_FIFO 深度 设置大一些, 测试一段时间,观察它的最大值  详情 回复 发表于 2024-6-6 16:47
希望这个世界让我小装一次B
回复

使用道具 举报 送花

5

主题

1070

回帖

4729

积分

荣誉版主

积分
4729
 楼主| 发表于 2024-6-6 16:47:26 | 显示全部楼层
Yang.*** 发表于 2024-6-6 16:13
Alias checking on pointer accesses 没有打钩
mcucfg_80251.h 选择是方案一: PSP

那 你 PENDSV_FIFO 深度 设置大一些,
测试一段时间,观察它的最大值
回复

使用道具 举报 送花

8

主题

89

回帖

1055

积分

金牌会员

积分
1055
发表于 2024-6-6 16:56:26 | 显示全部楼层
本帖最后由 Yang.Lian 于 2024-6-6 17:23 编辑
Cos*** 发表于 2024-6-6 16:47
那 你 PENDSV_FIFO 深度 设置大一些,
测试一段时间,观察它的最大值

可能不是 PENDSV_FIFO 的问题
我原以为 PSVFIFO 显示的是当前值深度,
后来看了一下代码,发现是当前使用的最大深度

真的是很奇怪,我如果不开 Debugger/Taskmgr 很容易卡死,最近一次尝试 331 次卡死了

如果开启 Debugger/Taskmgr ,仅仅只开启,其他一行代码都不动,重新编译,哪怕是发个 exit\r\n 关闭输出,依然都坚挺到 2000+ 以后

有没有可能是 PendSV 中断导致的?
我现在用的 P7

// <o> 中断向量号
// <i> 中断向量号
#define MCUCFG_PENDSVIRQ P7INT_VECTOR

// <o> 中断开启
// <i> 此项您应在文本编辑界面中定义。
// <i> 示例:EX0 = 1
#define mPendSV_Enable (P7INTE |= 0x01)

// <o> 中断关闭
// <i> 此项您应在文本编辑界面中定义。
// <i> 示例:EX0 = 0
#define mPendSV_Disable (P7INTE = 0x00)

// <o> 中断触发(置中断标志位)
// <i> 此项您应在文本编辑界面中定义。
// <i> 示例:IE0 = 1
#define mPendSV_Set (P70 = 0)


// <o> 中断清零(清中断标志位)
// <i> 此项您应在文本编辑界面中定义。
// <i> 即使该标志位能够在中断服务程序中硬件自动清零,仍建议用户不要省略,以确保其可靠清零。
// <i> 示例:IE0 = 0
#define mPendSV_Clear  \
        do                 \
        {                  \
                P70 = 1;       \
                P7INTF = 0x00; \
        } while (false)

点评

你各有几个 定时中断 和 查询?包括任务和钩子  详情 回复 发表于 2024-6-6 17:31
希望这个世界让我小装一次B
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-11 23:42 , Processed in 0.083549 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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