找回密码
 立即注册
楼主: 熊仔

最新版本uC-OS2-2.93.01已移植到STC32G上,请帮忙查错

[复制链接]

11

主题

340

回帖

939

积分

荣誉版主

积分
939
发表于 2023-9-19 09:16:09 | 显示全部楼层
本帖最后由 熊仔 于 2023-9-19 09:18 编辑

是的,昨天测试死机重启就是堆栈空间分配64不够,另一个帖子说了。后面例子需要更新,最少128B堆栈空间。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-9-21 18:52:31 | 显示全部楼层
关于老杨提到的测试2 , 我很感兴趣

(13)测试2结论:如果对用户程序进行临界区保护,会带来系统崩溃。
(14)综合结论:采用方法0不关闭总中断,不进行任何临界区保护,对系统本身和用户程序没有任何影响,都可以正常运行。采用方法3,采用关闭总中断对用户程序进行临界区保护,系统会崩溃。

(15)存在BUG:在采用软中断的uC/OS-II移植版中,向用户提供关闭总中断的临界区方法就是BUG。

------------------------------------------------------------------------------------------------------------------------------------------

分析了一下相关程序, 使用了经典老掉牙的 PLC位操作方式, 保护 EA.

对 uCOS-II 来说, 可能属于 非典(非标).

第一次改 , 对 uCOS-II 的框架及程序结构, 理解的不是很透彻, 不知这样改动, 是否可行.

请小熊在百忙之中, 帮忙测试一下.  如行, 在 STC8上,也可这样改.

谢谢!

点评

他这个结论重点是关闭中断后,不能切换任务了。 这个临界区方法不是重点。这个次要的。  详情 回复 发表于 2023-9-21 19:03
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-9-21 18:54:13 | 显示全部楼层
捕获b.JPG




捕获q.JPG




测试2_uCOSII-STC32G-V1.zip (1.07 MB, 下载次数: 88)




点评

在关闭中断前,操作临界区重要变量都是不行的。不能先左移。  详情 回复 发表于 2023-9-21 20:03
相当于嵌套次数保存在_BitSEA 变量中,最多8级嵌套。 方法很新颖。  详情 回复 发表于 2023-9-21 19:01
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

939

积分

荣誉版主

积分
939
发表于 2023-9-21 18:56:40 | 显示全部楼层
*修改版本: V1.02
*修改时间: 2023-09-20
修改:   1.方法3,方法4,支持临界区切换任务

昨天更新了,忘记更新到这个帖子。
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

939

积分

荣誉版主

积分
939
发表于 2023-9-21 19:01:41 | 显示全部楼层

相当于嵌套次数保存在_BitSEA 变量中,最多8级嵌套。
方法很新颖。

回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

939

积分

荣誉版主

积分
939
发表于 2023-9-21 19:03:37 | 显示全部楼层
LAO*** 发表于 2023-9-21 18:52
关于老杨提到的测试2 , 我很感兴趣

(13)测试2结论:如果对用户程序进行临界区保护,会带来系统崩溃。

他这个结论重点是关闭中断后,不能切换任务了。
这个临界区方法不是重点。这个次要的。
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

939

积分

荣誉版主

积分
939
发表于 2023-9-21 20:03:59 | 显示全部楼层
本帖最后由 熊仔 于 2023-9-21 22:37 编辑

进入临界区:在关闭中断前,操作临界区重要变量都是不行的。不能先右移。
退出临界区:操作开中断必须在后面。左移放最后肯定出问题。
稍微改下可以变成一个新的方法。
  1. #if OS_CRITICAL_METHOD==5
  2. //JBC指令方式
  3. //非典方式: LAOXU提供的方法
  4. INT8U data _BitSEA=0;
  5. //采用通用的PLC位操作工作方式, 8BitS最多保存嵌套次数8次, 一般够用了,
  6. //如不够用, 可改成 16BitS或 32BitS, 最多保存嵌套次数16次(或32次), 依次类推.
  7. void OSEnterCritical(void) {
  8.     if (_testbit_(EA)) {
  9.         _BitSEA >>= 1;
  10.         _BitSEA |= 0x80;
  11.     } else {
  12.         _BitSEA >>= 1;
  13.     }
  14. }
  15. void OSEXitCritical(void) {
  16.     _BitSEA <<= 1;
  17.     EA = CY;
  18.    
  19. }
  20. #endif
复制代码


我的观点:多于8次嵌套需要增加变量。还不如方法4优秀。其实嵌套只有第一次是1,其他都是0。当然这个也是一个方法。行得通。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-9-22 04:20:52 | 显示全部楼层
谢谢小熊回复.



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-9-22 04:27:50 | 显示全部楼层
少于16次嵌套, 定义变量INT16U。执行速度 和定义变量INT8U 几乎相同, 还是挺快的,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2023-9-22 04:40:13 | 显示全部楼层
方法4我刚才看了, 确实不错.
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 18:04 , Processed in 0.397674 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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