LAOXU 发表于 2023-9-22 04:45:08

对方法4的改进建议:

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

LAOXU 发表于 2023-9-22 04:49:01

这种方法, 也是经典老掉牙的 PLC, 对 定时/计数器 的 标志位, 常用的操作方法.

熊仔 发表于 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,更好理解吧。

tzz1983 发表于 2023-9-22 16:31:06

本帖最后由 tzz1983 于 2023-9-22 16:40 编辑

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



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

接下来看另一个代码:



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

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

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




熊仔 发表于 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.php?mod=viewthread&tid=4369&extra=page%3D1

tzz1983 发表于 2023-9-22 17:24:13

我的例子阻塞任务了吗

tzz1983 发表于 2023-9-22 17:27:32

又要开始讲规则了对吗,又当栽判又当运动员?

tzz1983 发表于 2023-9-22 17:30:19

你敢不敢正面回答我的问题,你要在临界区切换到比自己优先级高的任务,还是低的。

熊仔 发表于 2023-9-22 17:38:11

本帖最后由 熊仔 于 2023-9-22 19:36 编辑

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

tzz1983 发表于 2023-9-22 18:06:29

意思就是要切换到低的啰,代码等会我看。看了再说。
请问我刚才发的例子,在任务A的临界区中,有阻塞吗?你不会告诉我你可以在临界区切换任务,条件是别的任务中也不能阻塞吧?
页: 1 2 3 [4] 5 6 7
查看完整版本: 最新版本uC-OS2-2.93.01已移植到STC32G上,请帮忙查错