lzzasd 发表于 2024-4-5 10:46:19

我用的就是这个   加个了任务看门狗   
在运行任务完成才能切换   就是编程时注意下

神农鼎 发表于 2024-4-5 11:54:46

lzzasd 发表于 2024-4-5 10:46
我用的就是这个   加个了任务看门狗   在运行任务完成才能切换   就是编程时注意下
...

成功案例啊

xxxevery 发表于 2024-4-5 13:37:23

支持一下

tzz1983 发表于 2024-4-5 22:56:52

本帖最后由 tzz1983 于 2024-4-5 23:04 编辑

这个例子使用了函数指针, 函数指针是个好东西,
可是我不敢在keilC51, 或keilC251不开全局重入的时候用函数指针.

好像编译器调用树不能跟踪函数指针的调用.

以主题例程75来说,所有的任务函数都是在这调用的


打开map查看调用树,Task_Pro_Handler_Callback下面的调用树是空的.


我的理解是, keilC51要慎用函数指针, keilC251不开全局重入的时候也要慎用函数指针.

小型代码可能不会出问题, 代码大了就不好玩了, 手工指定调用树也很困难.

不知道我的理解是否正确?可以讨论一下



tzz1983 发表于 2024-4-6 08:55:41

全局可重入或 NOOVERLAY 是可解决,
应该把任务函数设为调用树顶层也可以,
我的意思是, 例子没有任何说明, 对于拿来主义,可能要犯错
主题例子还是一个比较简单的例子, 如果函数指针遍布整个项目,
那犯错机率就大了

还有就是这个例子也用于C51呀, 没有全局可重入选项,
NOOVERLAY代价太大, 同样的机制还不如函数名调用

fanxsp 发表于 2024-4-6 09:37:21

本帖最后由 fanxsp 于 2024-4-6 09:47 编辑

tzz1983 发表于 2024-4-5 22:56
这个例子使用了函数指针, 函数指针是个好东西,
可是我不敢在keilC51, 或keilC251不开全局重入的时候用函数 ...
使用函数指针,编译器无法正确理解调用关系,可以用链接指令来手工调整调用树,但是有点麻烦。

tzz1983 发表于 2024-4-6 09:51:36

fanxsp 发表于 2024-4-6 09:37
使用函数指针,编译器无法正确理解调用关系,可以用链接指令来手工调整调用树,但是有点麻烦。 ...

是的, 不适合新人, 还是直接用函数名调用比较容易

CosyOS 发表于 2024-4-6 11:59:36

的确,函数指针的问题应给予足够的重视,
应在使用说明中提示用户,并给出具体的解决方案供用户选择。
CosyOS 内核源码中大量使用了函数指针,
如定时中断钩子、定时查询钩子、中断挂起服务的执行函数等,
没有什么高明的方法,无非是 NOOVERLAY 或 全局可重入。

梁工 发表于 2024-4-6 12:57:10

tzz1983 发表于 2024-4-6 08:55
全局可重入或 NOOVERLAY 是可解决,
应该把任务函数设为调用树顶层也可以,
我的意思是, 例子没有任何说明,...

如果是同一个任务调用而中断不调用的函数,使用函数指针不需要特殊处理。
如果是占先内核不同优先级任务或中断都调用同一个函数,则要注意重入问题。

_奶咖君_ 发表于 2024-4-8 11:01:07

CosyOS 发表于 2024-4-6 11:59
的确,函数指针的问题应给予足够的重视,
应在使用说明中提示用户,并给出具体的解决方案供用户选择。
Cosy ...

手动修改调用树,,我记得之前有个坛友在论坛里出过类似的问题。虽然不是使用系统出现的问题,,不过也是关于函数指针使用的,,帖子里面说了如何修改正确的调用树
页: 1 [2] 3 4 5 6
查看完整版本: 任务调度方法,【无错,至简】!“多任务分时调度”