打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32F4使用FreeRTOS的中断

在使用stm32f4-discovery的FreeRTOS是设置一个按键中断,但是中断发生之后程序就卡住了,通过调试,发现程序卡在port.c中的configASSERT()语句。通过查找资料发现是中断优先级设置的问题。

CORTEX内核的优先级是数值越小优先级越高,即0是最高优先级。FreeRTOS为了满足某些应用对中断实时性要求高的需求,使得中断优先级高于某个值之后,就不能调用操作系统的内核函数来提高实时性。

而我所犯的错误就是将中断的优先级设置的高于这个值,却还在中断中调用操作系统提供的API引起的。当把优先级改小也就是数值改大之后,程序能够正常运行。

下面是程序卡住的地方,从上面的注释也可以看出是因为优先级的原因。

  1. /* The following assertion will fail if a service routine (ISR) for
  2. an interrupt that has been assigned a priority above
  3. configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
  4. function. ISR safe FreeRTOS API functions must *only* be called
  5. from interrupts that have been assigned a priority at or below
  6. configMAX_SYSCALL_INTERRUPT_PRIORITY.*/
  7. configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );

FREERTOS中的优先级数值设定的参数是configMAX_SYSCALL_INTERUPT_PRORITY。默认值是5,所以要想在中断中使用操作系统函数需要将中断的优先级设置的大于等于5.

  1. #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【跟着我一起来学习s7-200】35中断
FreeRTOS 在STM32上的移植 V1.0 - 伟研科技
嵌入式面试题(STM32部分)
STM32
掌握这五大嵌入式操作系统,你就是STM32牛人
UCOS/RTX/FreeRTOS性能对比
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服