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

任务调度方法,【无错,至简】!“多任务分时调度”

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

    [LV.6]常住居民II

    9

    主题

    90

    回帖

    538

    积分

    高级会员

    积分
    538
    发表于 2024-4-5 10:46:19 | 显示全部楼层
    我用的就是这个   加个了任务看门狗   
    在运行任务完成才能切换     就是编程时注意下

    点评

    成功案例啊  详情 回复 发表于 2024-4-5 11:54
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9269

    回帖

    1万

    积分

    管理员

    积分
    14023
     楼主| 发表于 2024-4-5 11:54:46 | 显示全部楼层
    lzzasd 发表于 2024-4-5 10:46
    我用的就是这个   加个了任务看门狗   在运行任务完成才能切换     就是编程时注意下
    ...

    成功案例啊
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 57 天

    [LV.5]常住居民I

    0

    主题

    181

    回帖

    352

    积分

    中级会员

    积分
    352
    发表于 2024-4-5 13:37:23 | 显示全部楼层
    支持一下
    回复 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1644

    积分

    荣誉版主

    积分
    1644
    发表于 2024-4-5 22:56:52 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-4-5 23:04 编辑

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

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

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

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

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

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

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




    点评

    全局可重入或 NOOVERLAY 都可解决  发表于 2024-4-6 00:15
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1644

    积分

    荣誉版主

    积分
    1644
    发表于 2024-4-6 08:55:41 | 显示全部楼层
    全局可重入或 NOOVERLAY 是可解决,
    应该把任务函数设为调用树顶层也可以,
    我的意思是, 例子没有任何说明, 对于拿来主义,可能要犯错
    主题例子还是一个比较简单的例子, 如果函数指针遍布整个项目,

    那犯错机率就大了

    还有就是这个例子也用于C51呀, 没有全局可重入选项,

    NOOVERLAY代价太大, 同样的机制还不如函数名调用

    点评

    如果是同一个任务调用而中断不调用的函数,使用函数指针不需要特殊处理。 如果是占先内核不同优先级任务或中断都调用同一个函数,则要注意重入问题。  详情 回复 发表于 2024-4-6 12:57
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    半小时前
  • 签到天数: 156 天

    [LV.7]常住居民III

    1

    主题

    98

    回帖

    465

    积分

    中级会员

    积分
    465
    发表于 2024-4-6 09:37:21 | 显示全部楼层
    本帖最后由 fanxsp 于 2024-4-6 09:47 编辑
    tzz1983 发表于 2024-4-5 22:56
    这个例子使用了函数指针, 函数指针是个好东西,
    可是我不敢在keilC51, 或keilC251不开全局重入的时候用函数 ...

    使用函数指针,编译器无法正确理解调用关系,可以用链接指令来手工调整调用树,但是有点麻烦。

    点评

    是的, 不适合新人, 还是直接用函数名调用比较容易  详情 回复 发表于 2024-4-6 09:51
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1644

    积分

    荣誉版主

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

    是的, 不适合新人, 还是直接用函数名调用比较容易
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 13:30
  • 签到天数: 157 天

    [LV.7]常住居民III

    5

    主题

    487

    回帖

    2108

    积分

    荣誉版主

    积分
    2108
    发表于 2024-4-6 11:59:36 | 显示全部楼层
    的确,函数指针的问题应给予足够的重视,
    应在使用说明中提示用户,并给出具体的解决方案供用户选择。
    CosyOS 内核源码中大量使用了函数指针,
    如定时中断钩子、定时查询钩子、中断挂起服务的执行函数等,
    没有什么高明的方法,无非是 NOOVERLAY 或 全局可重入。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2930

    回帖

    6593

    积分

    超级版主

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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 08:41
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

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

    手动修改调用树,,我记得之前有个坛友在论坛里出过类似的问题。虽然不是使用系统出现的问题,,不过也是关于函数指针使用的,,帖子里面说了如何修改正确的调用树

    点评

    是的,通过修改调用树的方法可以解决这个问题。 “让用户自己去修改调用树” 显然不能做为RTOS的选项,因为这项工作 不仅难度大、易出错,可能还会反复(随着用户的相关调整),不能把麻烦留给用户。 当然,如果用  详情 回复 发表于 2024-4-8 12:53
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 09:12 , Processed in 0.069439 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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