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

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

 火... [复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-03-28 10:25:35

4

主题

74

回帖

550

积分

高级会员

积分
550
发表于 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
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-6 17:31:29 | 显示全部楼层
本帖最后由 CosyOS 于 2024-6-6 17:32 编辑
Yang.*** 发表于 2024-6-6 16:56
可能不是 PENDSV_FIFO 的问题
我原以为 PSVFIFO 显示的是当前值深度,
后来看了一下代码,发现是当前使用 ...

你各有几个 定时中断 和 查询?包括任务和钩子
系统空闲中,关掉低功耗
回复 支持 反对

使用道具 举报 送花

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

4

主题

74

回帖

550

积分

高级会员

积分
550
发表于 2024-6-6 17:42:13 | 显示全部楼层
Cos*** 发表于 2024-6-6 17:31
你各有几个 定时中断 和 查询?包括任务和钩子
系统空闲中,关掉低功耗
...

还有一个现象:


我还有一个中断,在中断中会 iReusmeTask 一个 Task,我会在中断中点灯,然后在 Task 中关灯,
正常情况下,如果外部触发一下,这个灯会快速的闪烁,直到停止触发
但是,如果MODBUS卡死以后(卡死以后多久?这里时间就比较随意了,可能是卡死5秒钟,也可能是卡死1个小时后)此时触发一下,灯会亮,但是不会灭了



1个中断查询 syscfg.h
2个定时查询 syscfg.h
系统空闲已经关了

点评

你先关掉任务管理器,再创建一个定时中断任务,内容随便写,看能否正常?  详情 回复 发表于 2024-6-6 17:48
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-6 17:48:29 | 显示全部楼层
本帖最后由 CosyOS 于 2024-6-6 17:51 编辑

你先关掉任务管理器,再创建一个定时中断任务,内容随便写,比如只有一个空操作,看能否正常?
注意 syscfg.h 中 用户定时中断总数 用户定时查询总数 要调整。
回复 支持 反对

使用道具 举报 送花

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

4

主题

74

回帖

550

积分

高级会员

积分
550
发表于 2024-6-6 18:17:28 | 显示全部楼层
Cos*** 发表于 2024-6-6 17:48
你先关掉任务管理器,再创建一个定时中断任务,内容随便写,比如只有一个空操作,看能否正常?
注意 syscf ...

明天再战

今天PendSV中断改了一下,我担心用只用P70会偶尔漏触发,而且我用的是下降沿触发,但是在STC文档中普通IO暂时不要用上下沿触发
所以,我改了一下,
1. 使用P70改为用P7
2. 下降沿触发改为高电平触发

今晚不关机,明天看结果

如果不行,就按楼主的方法试一下

点评

历来的测试结论: 如果全局只有一个 定时查询,会出问题; 如果全局只有一个 定时中断,不会有问题。 开启任务管理器后,会有两个系统级的 定时查询、一个系统级的 定时中断。 如果用户只创建了一个 定时查询,又  详情 回复 发表于 2024-6-6 18:30
好的。 如果还不行,我们再找原因。  详情 回复 发表于 2024-6-6 18:19
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-6 18:19:49 | 显示全部楼层
Yang.*** 发表于 2024-6-6 18:17
明天再战

今天PendSV中断改了一下,我担心用只用P70会偶尔漏触发,而且我用的是下降沿触发,但是在STC文 ...

好的。
如果还不行,我们再找原因。
回复 支持 反对

使用道具 举报 送花

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

5

主题

1127

回帖

4275

积分

荣誉版主

积分
4275
发表于 2024-6-6 18:30:43 | 显示全部楼层
本帖最后由 CosyOS 于 2024-6-6 18:32 编辑
Yang.*** 发表于 2024-6-6 18:17
明天再战

今天PendSV中断改了一下,我担心用只用P70会偶尔漏触发,而且我用的是下降沿触发,但是在STC文 ...

历来的测试结论:
1、如果全局只有一个 定时查询,会出问题的;
2、如果全局只有一个 定时中断,不会出问题。

开启任务管理器后,会有两个系统级的 定时查询、一个系统级的 定时中断。

如果用户只创建了一个 定时查询,又未开启任务管理器,就要出问题了。

你这个情况,看来 很有可能和 PendSV中断 的选择 有关,不是 定时中断/查询 的原因。




点评

我昨天手贱,本来两个定时查询,一个1秒另一个2秒,我就合并成一个,后来发现不能运行,我就emo了,以为是我代码写错了,就直接git checkout  发表于 2024-6-7 10:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-05 07:14:28
已绑定手机

151

主题

589

回帖

1212

积分

金牌会员

积分
1212
发表于 2024-6-7 08:20:18 | 显示全部楼层
黄*** 发表于 2024-6-4 13:24
直接在该网页下载的例程,怎么编译后提示   ERROR:   FILE DOES NOT EXIST 工程里面是包含 os_var.h文件的 ...

跟我昨天出现的错误一模一样,很奇怪,跟文件名字有关,文件名不能太长,我的改短就好了。
回复 支持 反对

使用道具 举报 送花

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

4

主题

74

回帖

550

积分

高级会员

积分
550
发表于 2024-6-7 09:25:41 | 显示全部楼层
Cos*** 发表于 2024-6-6 18:30
历来的测试结论:
1、如果全局只有一个 定时查询,会出问题的;
2、如果全局只有一个 定时中断,不会出问 ...

稳定运行54639次了

所以,
根本原因我猜想就是 PendSV 的中断,突然有一次没有成功,导致内核的调度错误,进而死锁了

官方文档也没有说为什么普通IO不要使用上下沿中断,保险起见用高电平触发,
现在要担心的问题是,
PendSV有可能重复触发,会不会影响 CosyOS 内核?有没有副作用
不过从测试的结果来看没有发现异常

又一个宝贵的经验啊,至少在 STC32G12K 要这样
1. 将 P7 配置成高电平触发或者低电平触发
2. 使用整个P7作为中断源

附代码供参考
初始化代码

        {
                /* PendSV_Handler */
                P7_MODE_IO_PU(GPIO_Pin_All);
                /* P7 中断优先级为0级 */
                PIN_IPH &= ~0x80;
                PIN_IP &= ~0x80; /* PIN_IPL */
                /* 初始化设置为低电平 */
                P7 = 0x00;
                /* P07 高电平中断  */
                P7IM0 = 0xff;
                P7IM1 = 0xff;
        }




///////////////////////////////////////////////////////////////////////////////
// <h> PendSV_Handler设置
// <i> 您可选择一个未使用的硬件中断,做为PendSV_Handler,用于执行系统的挂起服务。
// <i> 还需在初始化钩子中配置该中断,确保它不会被硬件触发,中断优先级必须为最低级。


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

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

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

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

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





点评

官方文档也没有说为什么普通IO不要使用上下沿中断,保险起见用高电平触发, -------------------------------------------------------------------------------------------- 这种简易的扩展中断源输入,硬件一般  详情 回复 发表于 2024-6-8 02:19
感谢你分享 PendSV 的使用经验,大家可以引以为鉴。 STC32G下,如果使用普通IO口中断,应格外留意。 PendSV 会经常性的被重复触发,不会有什么副作用, 只要 PendSV_FIFO 不溢出, 只要 高速中断中不是 永不停息的  详情 回复 发表于 2024-6-7 11:44
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

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

4

主题

74

回帖

550

积分

高级会员

积分
550
发表于 2024-6-7 09:48:23 | 显示全部楼层
小结一下,最近使用 CosyOS 的心得
1. CosyOS 的代码质量非常高,还特别快;另外我的代码质量也还行,哈哈
2. CosyOS 的时钟确实可以随便设置,没有发现什么副作用,11059200 都不是问题,时间还是很准的
3. CosyOS 会自动帮你进入低功耗模式,我建议作者改一下,
    这个事情开发者必须知道,不然DMA中断莫名其妙不中断就不好了
4. CosyOS 再次催作者的 FAQ

点评

好的,未来会做出相关调整 ,感谢你的建议。  详情 回复 发表于 2024-6-7 11:49
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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