找回密码
 立即注册
查看: 107|回复: 11

通过定时器周期性调度任务综合例程中的一些疑问?

[复制链接]
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 152 天

    [LV.7]常住居民III

    110

    主题

    458

    回帖

    856

    积分

    高级会员

    积分
    856
    发表于 2024-4-15 17:05:29 | 显示全部楼层 |阅读模式
    本帖最后由 380091044 于 2024-4-15 17:07 编辑



    typedef struct
    {
            u8 Run;//任务状态:Run/Stop
            u16 TIMCount;//定时计数器
            u16 TRITime;//重载计数器
            void (*TaskHook) (void);//任务函数
    } TASK_COMPONENTS;



    static TASK_COMPONENTS Task_Comps[]=
    {
                //状态 计数 周期  任务函数名
                    {0, 1,   1,   Sample_Display},/* 任务1:task 1 Period:1ms */
                    {0, 10,  10,  Sample_MatrixKey},/*任务2: task 2 Period:10ms */
                    {0, 10,  10,  Sample_adcKey},/* 任务3:task 3 Period:10ms */
                    {0, 300, 300, Sample_NTC},/* 任务4:task 4 Period:300ms */
                    {0, 500, 500, Sample_RTC},/*任务5:task 5 Period:500ms */
                    /* Add new task here */
    };//这里任务状态,都是0是停止状态是吗?

    void Task_Marks_Handler_Callback(void)
    {
            u8 i;
            for(i=0; i<Tasks_Max; i++)
            {
                    if(Task_Comps.TIMCount)/* If the time is not 0 */
                    {
                            Task_Comps.TIMCount--;/* Time counter decrement */
                            if(Task_Comps.TIMCount == 0)/* If time arrives */任务时间倒计时到0了,
                            {
                                    /*Resume the timer value and try again  */
                                    Task_Comps.TIMCount = Task_Comps.TRITime;//重载计数值
                                    Task_Comps.Run = 1;/* The task can be run */开始任务运行是吗?感觉有点晕这点?                        }
                    }
            }
    }



    void Task_Pro_Handler_Callback(void)
    {
            u8 i;
            for(i=0; i<Tasks_Max; i++)
            {
                    if(Task_Comps.Run)/* If task can be run */程序运行就清零,说不通?
                    {
                            Task_Comps.Run = 0;/* Flag clear 0 */   //这里任务状态是0不是停止吗?下面一条,说是运行任务,是0运行,1停止吗?
                            Task_Comps.TaskHook();/* Run task */任务运行??
                    }
            }
    }

    回复 送花

    使用道具 举报

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

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2024-4-15 20:43:47 | 显示全部楼层
    读一读代码么呗
    了解一下 函数指针的知识

    run 是个变量 在这里做任务函数的运行标志,
    主函数中轮询所有任务的运行标志,,如果标志为1 则执行任务函数 ,然后清除掉运行标志,,

    找本C语言的书看看?
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:58
  • 签到天数: 128 天

    [LV.7]常住居民III

    26

    主题

    1290

    回帖

    4007

    积分

    论坛元老

    积分
    4007
    发表于 2024-4-16 09:28:45 | 显示全部楼层
    Task_Comps.Run 是当前任务是否可以执行的状态标志。
    Task_Comps.Run = 1 表示当前任务执行时间已到,接下来可以运行该任务。
    Task_Comps.Run = 0 表示当前任务执行时间还没到,需要继续等待。
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 152 天

    [LV.7]常住居民III

    110

    主题

    458

    回帖

    856

    积分

    高级会员

    积分
    856
     楼主| 发表于 2024-4-16 10:53:03 | 显示全部楼层
    乘风飞扬 发表于 2024-4-16 09:28
    Task_Comps.Run 是当前任务是否可以执行的状态标志。
    Task_Comps.Run = 1 表示当前任务执行时间已到,接下 ...

    老师:如下图:增加任务,初始状态都是0,都是等待状态,第一个任务是怎么运行起来的?刚开始所有计数都是满的,没有是0的,
    Snipaste_2024-04-16_10-50-43.png
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:58
  • 签到天数: 128 天

    [LV.7]常住居民III

    26

    主题

    1290

    回帖

    4007

    积分

    论坛元老

    积分
    4007
    发表于 2024-4-16 11:35:32 | 显示全部楼层
    380091044 发表于 2024-4-16 10:53
    老师:如下图:增加任务,初始状态都是0,都是等待状态,第一个任务是怎么运行起来的?刚开始所有计数都 ...

    每个任务都是通过定时器计时判断是否到执行时间。
    第一个任务执行周期最短,1ms执行一次,那么定时器计时1ms时间就会在中断里将这个任务状态置1,主循环里面判断任务状态为1后就会执行这个任务。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 152 天

    [LV.7]常住居民III

    110

    主题

    458

    回帖

    856

    积分

    高级会员

    积分
    856
     楼主| 发表于 2024-4-17 08:45:47 | 显示全部楼层
    乘风飞扬 发表于 2024-4-16 11:35
    每个任务都是通过定时器计时判断是否到执行时间。
    第一个任务执行周期最短,1ms执行一次,那么定时器计时 ...

    老师:我想问一个问题,就是一个任务,我是给1ms还是10ms运行时间,这个是依据什么设定的?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 152 天

    [LV.7]常住居民III

    110

    主题

    458

    回帖

    856

    积分

    高级会员

    积分
    856
     楼主| 发表于 2024-4-17 09:02:13 | 显示全部楼层
    乘风飞扬 发表于 2024-4-16 11:35
    每个任务都是通过定时器计时判断是否到执行时间。
    第一个任务执行周期最短,1ms执行一次,那么定时器计时 ...

    老师:咱们这个分时复用框架,怎么没有当前程序运行一次后,现有状态的保存,到下次开始运行时,接着运行衔接呢?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:58
  • 签到天数: 128 天

    [LV.7]常住居民III

    26

    主题

    1290

    回帖

    4007

    积分

    论坛元老

    积分
    4007
    发表于 2024-4-17 09:07:53 | 显示全部楼层
    380091044 发表于 2024-4-17 08:45
    老师:我想问一个问题,就是一个任务,我是给1ms还是10ms运行时间,这个是依据什么设定的? ...

    根据每个任务所处理的事情需要响应的速度决定。
    例如数码管刷新1ms刷新一次比较合适,速度慢的话就会出现闪烁。
    按键扫描10ms检测一次,连续5,6检测到有效电平就认为按键正常按下,可以起到防抖作用。按键以正常速度按下一般会产生100ms左右的有效电平,扫描间隔时间太快的话浪费CPU资源,扫描间隔时间太慢的话影响响应速度。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 152 天

    [LV.7]常住居民III

    110

    主题

    458

    回帖

    856

    积分

    高级会员

    积分
    856
     楼主| 发表于 2024-4-17 09:21:20 | 显示全部楼层
    乘风飞扬 发表于 2024-4-17 09:07
    根据每个任务所处理的事情需要响应的速度决定。
    例如数码管刷新1ms刷新一次比较合适,速度慢的话就会出现 ...

    1、那就是说运行一次,就是把这个事情处理完毕,中间不需要衔接?再进行下个事件,不是一件事,处理一部分,下次再处理一部分;
    2、这个事件运行的时间,没有经验就要尝试找到合适的值,
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-24 13:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    8

    主题

    623

    回帖

    1034

    积分

    超级版主

    积分
    1034
    发表于 2024-4-17 09:24:16 | 显示全部楼层
    全国大学生智能汽车竞赛 STC-逐飞 联合技术分享 直播通知,第十九届
    一,直播技术专家:
    STC USB 专家陈峰, 逐飞技术专家徐康, 刘鑫
    二,直播时间:
    2024年4月17日, 周三下午 14:00 ~ 16:00
    2024年4月19日, 周五下午 14:00 ~ 16:00
    三,直播平台:腾讯会议
    腾讯会议号:748-9686-5212 (安装腾讯会议软件后,输入该会议号)
    四,直播内容安排:
    2024年4月17日, 周三下午 14:00 ~ 16:00
    《镜头组STC赛道,本科专科均可参加》+《气垫组/专科》技术分享
    STC 专家 陈峰:
    1,基于STC32系列的仿真、任务调度介绍=======4月17日下午14:00 ~ 16:00有时间可来腾讯会议室,陈工会重点对任务调度做介绍分享
    2,介绍PWM、比较器、CAN的视频资源
    逐飞 技术专家 徐康、刘鑫:
    1,基于STC32的无感无刷电机驱动开源项目技术分享
    2,基于STC32G的负压CCD小车、气垫船制作分享
    2024年4月19日, 周五下午 14:00 ~ 16:00
    《电磁组 STC 赛道 技术分享》
    STC 专家 陈峰:
    STC32G系列 PWM、比较器、CAN 的 应用例程介绍
    逐飞 技术专家 徐康、刘鑫:
    基于STC32G的电磁小车制作分享

    STC官网:https://www.stcai.com/
    QQ:2593903262
    微信号:18106296598
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-1 07:46 , Processed in 0.070776 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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