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

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

[复制链接]

该用户从未签到

11

主题

329

回帖

872

积分

荣誉版主

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

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

使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

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




    捕获q.JPG




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




    点评

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

    使用道具 举报

    该用户从未签到

    11

    主题

    329

    回帖

    872

    积分

    荣誉版主

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

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

    使用道具 举报

    该用户从未签到

    11

    主题

    329

    回帖

    872

    积分

    荣誉版主

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

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

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    11

    主题

    329

    回帖

    872

    积分

    荣誉版主

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

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

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

    使用道具 举报

    该用户从未签到

    11

    主题

    329

    回帖

    872

    积分

    荣誉版主

    积分
    872
     楼主| 发表于 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。当然这个也是一个方法。行得通。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

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



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 03:18
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    873

    回帖

    3992

    积分

    荣誉版主

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-4 11:58 , Processed in 0.071066 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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