FreeRTOS中断遇到的坑

在FreeRTOS启动前使用ADC+中断+DMA进行数据采集时遇到问题,发现ADC中断未触发。原因是FreeRTOS会控制部分中断优先级,当设置的ADC中断优先级高于configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY宏定义的值时,该中断在FreeRTOS启动前无效。解决方案是在采集前将ADC中断优先级设为低于5的值,采集后再改回。这样改动小,风险低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

      有一个功能要在frreertos启动前完成ADC采集。ADC采用的是ADC+中断+DMA的方式。在freertos的任务里面跑,是没有问题的。但当把这段代码放到freertos启动之前发现ADC竟然读不到数据了!后来在调试中发现原来adc的中断没有进去。看到这个问题当时就有点懵了。后来就开始网上查找资料,发现了一个帖子,瞬间乌云消散。传送门 FreeRTOS-中断相关坑 - 一地鸡毛- - 博客园

原因:

     freertos会控制一些中断的优先级,在FreeRTOSConfig.h文件中有一个宏

#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 

当设置的中断优先级的数字大于这个宏定义的优先级的时候,那这个中断就受freertos控制。在freertos启动之前,这个中断是失效的。而我当时对adc中断的设置正好是5,是受freertos控制的中断的。问题找到了,解决办法就有了!

解决办法:

     在进行adc采集之前,将adc的优先级设置为4,让adc中断不受freertos控制。在采集完之后再修改为5。这样代码改动量最小,风险最低。问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星期天电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值