完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
场景:项目需要50ms读取一次数据,时间精度越高越好。
于是使用硬件定时器或软件定时器实现周期读取数据,发现rt_spi_send函数中含有互斥量的take函数,此函数不能用于中断中,有其他实现思路吗? 在不使用RTT的时候,无这个问题。 |
|
相关推荐
2个回答
|
|
如 crystal266 所言,可以用until函数,绝对延时。
也可以新建一个信号量sem,初始值为0;在硬件定时器ISR中release信号量;在线程中等待信号量。缺点是,如果spi读取不能在50ms内完成,会出现多次release,导致多次读SPI,在时序要求严格的场合读取数据有错误; 还可以新建一个事件集event/信号signal;在硬件定时器ISR中发送事件/信号;在线程中等待事件/信号。没有信号量sem的缺点,但是,如果SPI读取不能在50ms内完成,会出现丢失1次读取结果。 其他调用OS服务的思路都行,核心观点是,ISR负责提供通知,将耗时操作延迟到线程中处理,按需设计该线程的优先级。从时间宏观上看,近似50ms一个周期(其他中断不多的情况下)。 两个缺点的解决,可以将SPI读取任务的优先级尽可能设置为高。再建议,打开RT_USING_CPUTIME使能高精度时钟计算CPU时钟,确认一下SPI读取一定可以在50ms内完成即可 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
529 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2000 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1174 浏览 0 评论
1674 浏览 0 评论
1439 浏览 0 评论
74750 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 23:35 , Processed in 0.599270 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号