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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

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

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

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

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 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

主题

340

回帖

929

积分

荣誉版主

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

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

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

点评

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

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

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

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

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

439.41 KB, 下载次数: 89

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

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

点评

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:24 , Processed in 0.152697 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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