完善资料让更多小伙伴认识你,还能领取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内完成即可 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1524 浏览 0 评论
4725 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9675 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2941 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2356 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 03:52 , Processed in 0.842591 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
915