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

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

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3990

    积分

    荣誉版主

    积分
    3990
    发表于 2023-9-22 04:45:08 | 显示全部楼层
    对方法4的改进建议:

    定义变量 INT8U , 最高位储存 EA, 后 7位计数(有 127次嵌套, 一般够用了) , 不用 BIT变量定义(便于移植).

    点评

    bit变量是最高效的,最后给EA赋值。 当然如果用bdata,也可以,bit7是保存EA值,也是bit变量,剩余7位,127级别嵌套。 现在的方式多使用一个bit,更好理解吧。  详情 回复 发表于 2023-9-22 12:18
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3990

    积分

    荣誉版主

    积分
    3990
    发表于 2023-9-22 04:49:01 | 显示全部楼层
    这种方法, 也是经典老掉牙的 PLC, 对 定时/计数器 的 标志位, 常用的操作方法.
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    11

    主题

    329

    回帖

    872

    积分

    荣誉版主

    积分
    872
     楼主| 发表于 2023-9-22 12:18:48 | 显示全部楼层
    LAOXU 发表于 2023-9-22 04:45
    对方法4的改进建议:

    定义变量 INT8U , 最高位储存 EA, 后 7位计数(有 127次嵌套, 一般够用了) , 不用 BIT ...

    bit变量是最高效的,最后给EA赋值。
    当然如果用bdata,也可以,bit7是保存EA值,也是bit变量,剩余7位,127级别嵌套。
    现在的方式多使用一个bit,更好理解吧。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    547

    回帖

    1817

    积分

    荣誉版主

    积分
    1817
    发表于 2023-9-22 16:31:06 | 显示全部楼层
    本帖最后由 tzz1983 于 2023-9-22 16:40 编辑

    据说作者开发了一个可以在临界区切换任务的代码, 我们来测试一下, 以下代码是作者自己的, 除了任务, 其它的都没变过. 就是刚下载的原码. 来看图:

    捕获2.JPG

    这是一个正常的代码, 没有在临界区做什么出格的事情. 在任务A挂起自己的同时, 最高优先级已经不是任务A, OS切换到任务B. 并且不再执行任务A的代码.  可以看到任务B正常运行, P24上的LED闪烁.

    接下来看另一个代码:
    捕获.JPG


    此时我们把挂起自己的操作放到临界区内, 在仿真时我可以看到, 执行完挂后, 优先级变成了3(任务B的优先级)并成功的切换到了任务B, 可P24的LED再也不闪了.
    没有再花时间去研其原因. 我大概估计得到, 在执行任务B时, EA是没开的, 所以GAME OVER 了 .

    这个实验结果表明, 作者的在临界区切换任务有很大的隐患,这只是找出其中一项而已.

    可能作者不服, 他会告诉我, 你不可以在临界区调用OS服务.
    呵呵, 我已经习惯了这种说法. 今天上午我和作者聊了一些时间, 在另一个贴上"关于"访问"的描述是否准确那张贴, 有兴趣的朋友可以自己去看.
    当证据有利于他们的时候, 他会这么说, "你不可以在临界区调用OS服务."  当证据不利于他们的时候, 他会这样说, "除了阻塞还有很多OS服务呀, 你都可以调用的".
    说这些没有意义, 我想问的是, 当你做一段代码说可以在临界区切换任务时: 说明了哪些OS应用是可以调用的, 哪些是不可以调用的了吗?  你说明了吗?
    可能他还会这样说, 你这样切换任务不对, 你要用我做的那个 OSCtxSw();来切换呀, 我笑了,  具体这样做到底行不行暂且不说. 你这样做不是给自己添堵吗, 也给将来可能用到你代码的用户添堵啊, 要费多少口舌才能解释清楚这样做的可靠性. 并且现在你自己都很难证明这样做I没有BUG.
    作为一个官方论坛的版主, 还悬赏200元找BUG.  我想问, STC8那个是不是最后证明了, 把那个OSIntNesting++放在函数中, 可能会执行不到就发生后来的高优先级中断. 你最终代码没有表现出来没把这条语句放在中断向量口, 请问这算不算BUG, 那我的奖金呢? 在哪里?




    点评

    1,临界区切换任务是有前提的,不能阻塞任务, 2,例子可以去杨老师的bug3下载  详情 回复 发表于 2023-9-22 17:18
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    11

    主题

    329

    回帖

    872

    积分

    荣誉版主

    积分
    872
     楼主| 发表于 2023-9-22 17:18:46 | 显示全部楼层
    本帖最后由 熊仔 于 2023-9-22 17:25 编辑
    tzz1983 发表于 2023-9-22 16:31
    据说作者开发了一个可以在临界区切换任务的代码, 我们来测试一下, 以下代码是作者自己的, 除了任务, 其它的 ...

    1,临界区里面,和滴答定时器有关的服务都不能用。这个是常识吧。滴答定时器都停止了,还能用这类服务?
    2,例子可以去杨老师的bug3下载

    3,可以参考杨老师今天发的https://www.stcaimcu.com/forum.p ... &extra=page%3D1
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    547

    回帖

    1817

    积分

    荣誉版主

    积分
    1817
    发表于 2023-9-22 17:24:13 来自手机 | 显示全部楼层
    我的例子阻塞任务了吗
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    547

    回帖

    1817

    积分

    荣誉版主

    积分
    1817
    发表于 2023-9-22 17:27:32 来自手机 | 显示全部楼层
    又要开始讲规则了对吗,又当栽判又当运动员?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    547

    回帖

    1817

    积分

    荣誉版主

    积分
    1817
    发表于 2023-9-22 17:30:19 来自手机 | 显示全部楼层
    你敢不敢正面回答我的问题,你要在临界区切换到比自己优先级高的任务,还是低的。

    点评

    杨老师提供的例子应该是唤醒高优先级任务,也就是切换到了高优先级的任务去处理紧急事情。  详情 回复 发表于 2023-9-22 19:33
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    11

    主题

    329

    回帖

    872

    积分

    荣誉版主

    积分
    872
     楼主| 发表于 2023-9-22 17:38:11 | 显示全部楼层
    本帖最后由 熊仔 于 2023-9-22 19:36 编辑

    你去看看例子吧。实现了这个功能。唤醒任务,切换到高优先级的。之前弄错了。

    测试2_uCOSII-STC32G-V1.02.zip

    439.41 KB, 下载次数: 17

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    547

    回帖

    1817

    积分

    荣誉版主

    积分
    1817
    发表于 2023-9-22 18:06:29 来自手机 | 显示全部楼层
    意思就是要切换到低的啰,代码等会我看。看了再说。
    请问我刚才发的例子,在任务A的临界区中,有阻塞吗?你不会告诉我你可以在临界区切换任务,条件是别的任务中也不能阻塞吧?

    点评

    uCOS规定,带阻塞的都不能在临界区里面工作。可以看一下这个delay函数里面的使用注意。  发表于 2023-9-22 18:21
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-8 18:19 , Processed in 0.069715 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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