硬汉嵌入式论坛

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

[有问必答] 咨询个问题,RTthread下想100us轮询传感器,节拍在1000的情况下,有什么好方案吗

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2025-12-1 16:02:45 | 显示全部楼层 |阅读模式
如题在rtthread中,不更改系统节拍,100us定时器发送没有问题,解析时想通过队列丢到任务里处理,且想要实时解析数据,但1ms的节拍限制进一次任务得处理10条数据,有什么比较推荐且稳妥的方案吗
回复

使用道具 举报

0

主题

306

回帖

306

积分

高级会员

积分
306
发表于 2025-12-1 17:15:20 | 显示全部楼层
用硬件时钟中断
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
发表于 2025-12-1 17:58:59 | 显示全部楼层
rtthread不清楚,如果是freertos可以使用队列或者信号量。
回复

使用道具 举报

5

主题

309

回帖

324

积分

高级会员

积分
324
发表于 2025-12-2 09:31:19 | 显示全部楼层
貌似没啥特别完美的办法,如果能接受数据延迟,就收到数据后丢到队列里再批量解析
如果一点延迟都不允许,只能在中断里实现了,假如接收数据能触发对应的接收中断,就在接收中断回调里解析,来一个解析一个,解析完再丢到队列里。但是这种方法要求解析代码不能耗时太长,否则会影响rtos调度
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120428
QQ
发表于 2025-12-2 09:44:55 | 显示全部楼层
直接定时器中断发消息队列就行,如果接收任务是高优先级任务,且解析一次小于100us,基本可以保证100us执行一次,不受1ms系统时钟节拍影响。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2025-12-2 13:27:43 | 显示全部楼层
eric2013 发表于 2025-12-2 09:44
直接定时器中断发消息队列就行,如果接收任务是高优先级任务,且解析一次小于100us,基本可以保证100us执行 ...

明白我试试看
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2025-12-2 13:29:09 | 显示全部楼层
凯瑞 发表于 2025-12-1 17:58
rtthread不清楚,如果是freertos可以使用队列或者信号量。

和freertos功能基本一致,目前用了个队列跑1ms没问题,往小了还在调试
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2025-12-2 13:30:23 | 显示全部楼层
DX3906 发表于 2025-12-2 09:31
貌似没啥特别完美的办法,如果能接受数据延迟,就收到数据后丢到队列里再批量解析
如果一点延迟都不允许, ...

嗯,试过中断直接解析,跑时间长了确实感受到节拍会拉长
回复

使用道具 举报

0

主题

30

回帖

30

积分

新手上路

积分
30
发表于 2025-12-3 09:38:10 | 显示全部楼层
用 HWTIMER 硬件定时器
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
发表于 2025-12-3 11:26:35 | 显示全部楼层
Kilomi 发表于 2025-12-2 13:29
和freertos功能基本一致,目前用了个队列跑1ms没问题,往小了还在调试

我用STM32H7芯片用过这种方法,3khz频率读取并处理ADC数据。就是使用定时器产生3khz的中断,在中断里面发送信号量,任务等待信号量读取AD数据。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-10 07:55 , Processed in 0.052640 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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