找回密码
 立即注册
查看: 314|回复: 8

定时器分时任务调度怎么清零task里面的某一个函数

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2025-1-12 19:04:25 | 显示全部楼层 |阅读模式
定时器分时任务调度怎么清零task里面的某一个函数

比如说我定时器是1ms进入一次
有三个任务,
第一个任务1ms进一次.这个没问题
第二个任务100ms进一次,勉勉强强也没问题, 误差也就是1-9ms
第三个任务如果我设置5000ms 进一次. 现在我就是这里出了个问题

有时候4955ms进一次.有时候200ms进一次. 导致这第一次计时会有5秒内的误差
问题在于第一次进中断的时候, 我控制不了这个5000ms到哪里了.  想半天也没想到在哪里可以让这5000ms 从0开始

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2025-1-12 19:07:03 | 显示全部楼层
任务开始时我清零了计数器
任务结束后我也清零了计数器
但是这个task里面的5000ms 始终是个随机值
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2025-1-12 19:24:52 | 显示全部楼层
类似于这样子按键扫描没问题, adc采集也没问题
按键我是什么时候开始按,就有误差了.
比如我要定时1分钟, 那就是设置个变量 time_out ++. 到达12就是一分钟 (有个解决办法就是把time 不要设置5000 ,就50行了. 把time_out变量增大.这个可以解决问题. )
那当我按下按键的时候, 定时1分钟有时候是 55秒,有时候是59秒
没办法让第三个任务从我开始按下那个时候清零.
他从开机就一直0-5000的计数

{0,      1,    1,    Key_Scan},                /* task 1 Period: 按键扫描*/         
{0,      1,     2,   ADC_Isr},           /* task 2 Period: ADC采集数据*/
{0,      5000,  5000,    time},        /* task 3 Period: 按键开启定时开关*/
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:394
  • 最近打卡:2025-05-01 03:26:07

16

主题

702

回帖

2470

积分

金牌会员

积分
2470
发表于 2025-1-13 07:21:57 | 显示全部楼层
这是数据原子操作的问题,看我以前的帖子https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11928
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2025-1-15 19:23:41 | 显示全部楼层
楼上说得对。

楼主要不发一下完整代码?
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2025-1-15 19:39:06 | 显示全部楼层
VC*** 发表于 2025-1-15 19:23
楼上说得对。

楼主要不发一下完整代码?

主要是按键开始计时,那个开始task.c那里

中断值是随机的 91.调度按键PWM io.7z (58.12 KB, 下载次数: 25)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:372
  • 最近打卡:2025-05-01 10:53:48

12

主题

125

回帖

1685

积分

金牌会员

积分
1685
发表于 2025-2-21 22:20:20 | 显示全部楼层
你说的不可能发生    延时也就是延时下一个任务周期而已   任务延时不可能这么长时间   
所有的任务计数都是中断中全部刷新的    每次减一  减到0就在任务格构体第一位置1   表示任务就绪     任务完成后切换主程序会依次巡检下一个任务有没有就绪    就绪了就进入执行    所以说延时很长时间的说法不成立     最有可能是上一任务有阻塞延时   任务一直没有结束而没有进入任务切换程序   
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2025-2-22 10:00:01 | 显示全部楼层
lzz*** 发表于 2025-2-21 22:20
你说的不可能发生    延时也就是延时下一个任务周期而已   任务延时不可能这么长时间   
所有的任务计数都 ...

解决方案就是把定时任务周期缩短,让这个误差变小.
确实是没办法

点评

因为这个不是使用操作系统的那种做现场保护然后切换任务,仅仅是软定时器调用对应的函数而已。 如果函数内使用了堵塞操作,一样是会影响到其他让任务的执行的。  详情 回复 发表于 2025-2-22 12:24
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-2-22 12:24:59 | 显示全部楼层
vb2*** 发表于 2025-2-22 10:00
解决方案就是把定时任务周期缩短,让这个误差变小.
确实是没办法

因为这个不是使用操作系统的那种做现场保护然后切换任务,仅仅是软定时器调用对应的函数而已。
如果函数内使用了堵塞操作,一样是会影响到其他让任务的执行的。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:25 , Processed in 0.210519 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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