硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6573|回复: 8
收起左侧

[有问必答] KEIL的RTX系统滴答定时器能否回调用户函数

[复制链接]

34

主题

83

回帖

185

积分

初级会员

积分
185
发表于 2021-3-18 20:41:33 | 显示全部楼层 |阅读模式
STM32的定时器不够用,想到RTX占用的系统滴答定时器能否回调我的用户函数呢?设置的是1ms切换1次任务,正好我的函数也需要1ms执行一次,请问有办法共用系统滴答定时器吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107452
QQ
发表于 2021-3-19 08:48:36 | 显示全部楼层
直接开个1ms一次的任务即可,最简单有效。
回复

使用道具 举报

34

主题

83

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2021-3-19 08:49:27 | 显示全部楼层
eric2013 发表于 2021-3-19 08:48
直接开个1ms一次的任务即可,最简单有效。

我的任务太多,那样不准确。我需要的1ms必须非常精确。
回复

使用道具 举报

34

主题

83

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2021-3-19 09:00:34 | 显示全部楼层
eric2013 发表于 2021-3-19 08:48
直接开个1ms一次的任务即可,最简单有效。

如果无法实现回调的话,我需要考虑看看能否用窗口看门口产生1ms中断。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107452
QQ
发表于 2021-3-19 11:06:11 | 显示全部楼层
shuaigew88 发表于 2021-3-19 09:00
如果无法实现回调的话,我需要考虑看看能否用窗口看门口产生1ms中断。

最高优先级任务做时间基准,采用绝对延迟

这个已经相当准确了
回复

使用道具 举报

34

主题

83

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2021-3-19 13:03:30 | 显示全部楼层
eric2013 发表于 2021-3-19 11:06
最高优先级任务做时间基准,采用绝对延迟

这个已经相当准确了

RTX4不支持优先级吧?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107452
QQ
发表于 2021-3-19 13:51:49 | 显示全部楼层
shuaigew88 发表于 2021-3-19 13:03
RTX4不支持优先级吧?

支持。
回复

使用道具 举报

3

主题

340

回帖

349

积分

高级会员

积分
349
发表于 2021-3-20 18:31:28 | 显示全部楼层
不建议用高优先级任务做这个功能,因为它增加了很多系统负担。每个tick中断退出就会调度到这个任务,然后才回到被中断的任务,很浪费资源。
应该用我之前介绍过的方法:
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //|          |
  3. //| 函数名称 |: os_tmr_tick
  4. //| 功能描述 |: 在RTX中,每tick都会调用os_tmr_tick函数;
  5. //|          |: 所以利用armlink的挂钩特性,用于执行我们的tick服务
  6. //| 参数列表 |:
  7. //|          |:
  8. //| 返    回 |:
  9. //|          |:
  10. //| 备注信息 |: $Super$yourfunc 成为原先的函数标号。
  11. //|          |: $Sub$yourfunc   改造后的函数标号,替代原来的yourfunc标号。
  12. //|          |:
  13. //|          |: (  要注意os_tmr_tick()是在tsk_lock()情况下执行的  )
  14. ////////////////////////////////////////////////////////////////////////////////
  15. extern void $Super$os_tmr_tick(void);
  16. void $Sub$os_tmr_tick(void)
  17. {
  18.   $Super$os_tmr_tick();
  19.   TICK_Exec();
  20. }
复制代码
回复

使用道具 举报

34

主题

83

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2021-5-23 14:58:49 | 显示全部楼层
glory 发表于 2021-3-20 18:31
不建议用高优先级任务做这个功能,因为它增加了很多系统负担。每个tick中断退出就会调度到这个任务,然后才 ...

你好,请问这种方式需要包含什么头文件? 我按照这种方式编译后提示未定义的错误。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-1 18:38 , Processed in 0.214642 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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