CosyOS
发表于 2024-4-8 12:53:53
_奶咖君_ 发表于 2024-4-8 11:01
手动修改调用树,,我记得之前有个坛友在论坛里出过类似的问题。虽然不是使用系统出现的问题,,不过也是 ...
是的,通过修改调用树的方法可以解决这个问题。
“让用户自己去修改调用树” 显然不能做为RTOS的选项,因为这项工作
不仅难度大、易出错,可能还会反复(随着用户的相关调整),不能把麻烦留给用户。
当然,如果用户有这个爱好,喜欢钻研,是可以一试的,但却不能做为RTOS的选项。
_奶咖君_
发表于 2024-4-8 13:15:41
CosyOS 发表于 2024-4-8 12:53
是的,通过修改调用树的方法可以解决这个问题。
“让用户自己去修改调用树” 显然不能做为RTOS的选项, ...
方法是有这么个方法,而不是你所说的无非...
用不用那就是两回事了,,,你可以认为这个方法不好用,好用的方法也确实你所说的那两种方法。 那你要说无非那两种方法的话,,那并不是。
那至于你说的 不能作为....的选项 不再我的讨论的范围内。我仅仅是想说还有其他的方法。
CosyOS
发表于 2024-4-8 13:41:36
_奶咖君_ 发表于 2024-4-8 13:15
方法是有这么个方法,而不是你所说的无非...
用不用那就是两回事了,,,你可以认为这个方法不好用, ...
1、首先,我并不反对你的方法,做为自己使用,什么方法都是可以的,只要能解决问题就行。
2、我说的“无非”,是在我的认知里,我仅知道这两种便捷的方法,也许还有其它更为高明的方法,但我不知道。
3、做为RTOS,是要提供给大家使用的,当然不能把麻烦留给用户了,所以只能选择易用的方法。
4、如果你有什么高明的方法,还请不吝赐教,如果你愿意的话。
_奶咖君_
发表于 2024-4-8 13:56:08
CosyOS 发表于 2024-4-8 13:41
1、首先,我并不反对你的方法,做为自己使用,什么方法都是可以的,只要能解决问题就行。
2、我说的“无 ...
嗯 可以了,,我再重申一遍 我只是再补充说明,
hhh402
发表于 2024-4-8 18:09:58
请教一下,如果有些函数执行时间很长5~10ms,对1ms周期的任务有什么影响?会出错吗?
乘风飞扬
发表于 2024-4-8 19:15:55
tzz1983 发表于 2024-4-5 22:56
这个例子使用了函数指针, 函数指针是个好东西,
可是我不敢在keilC51, 或keilC251不开全局重入的时候用函数 ...
这个例子只是一个周期性调度任务的方法,不能算是O/S吧。
定时器只提供计时功能,所有任务都在主循环判断执行。
执行完当前任务才能判断执行下一个任务,没有重入/抢占之类的情况。
当然从安全角度考虑确实要慎用指针
tzz1983
发表于 2024-4-8 20:12:56
本帖最后由 tzz1983 于 2024-4-8 20:14 编辑
我的理解是:
1. 调用树和变量覆盖有关系, 和OS没有多大关系,不用OS也有变量覆盖.
2. NOOVERLAY 和可重入不是等同关系, NOOVERLAY不能代表可重入, 可重入可保证不被OVERLAY.
总结: 我只是说在非NOOVERLAY 和 非全局可重入的情况下, 用函数指针可能会使调用树乱掉.
具体会不会出错我不知道. 我也不想去研究证明. 所以我说的是慎用. 仅仅是提个醒.
我没有说此事和OS有关, 也没有说和可重入有关, 只是事件后来被讨论的放大了.
请大家不要再为此事争闹, 各有各的看法,自己真刀实枪的干就完事了.
我认为调用树乱掉是有问题的, 但是我不会去证明, 因为我自己不会这么用.
梁工说这样用没有问题.所以有兴趣的可以自己去试验.
tzz1983
发表于 2024-4-8 20:18:07
本帖最后由 tzz1983 于 2024-4-8 20:22 编辑
hhh402 发表于 2024-4-8 18:09
请教一下,如果有些函数执行时间很长5~10ms,对1ms周期的任务有什么影响?会出错吗? ...
如果这个时间段有别的函数需要执行, 就会被正在执行的函数推迟执行. 仅本次被推迟, 总体上不会累积
这是被动的延迟, 这个就是常规的单任务大循环. 响应不确定的.
要想响应快就不要放在函数内, 需要快响应的代码放中断里去
ageway
发表于 2024-4-10 13:54:54
{:4_250:}
小飞侠
发表于 2024-4-11 16:50:07
官方的例程,是给用户服务的,用户怎么使用都可以,安全性、稳定性自己要把握好