STM32F4使用FreeRTOS的中断
来源:互联网 发布:wap站长之家源码 编辑:程序博客网 时间:2024/05/21 22:27
在使用stm32f4-discovery的FreeRTOS是设置一个按键中断,但是中断发生之后程序就卡住了,通过调试,发现程序卡在port.c中的configASSERT()语句。通过查找资料发现是中断优先级设置的问题。
CORTEX内核的优先级是数值越小优先级越高,即0是最高优先级。FreeRTOS为了满足某些应用对中断实时性要求高的需求,使得中断优先级高于某个值之后,就不能调用操作系统的内核函数来提高实时性。
而我所犯的错误就是将中断的优先级设置的高于这个值,却还在中断中调用操作系统提供的API引起的。当把优先级改小也就是数值改大之后,程序能够正常运行。
下面是程序卡住的地方,从上面的注释也可以看出是因为优先级的原因。
- /* The following assertion will fail if a service routine (ISR) for
- an interrupt that has been assigned a priority above
- configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
- function. ISR safe FreeRTOS API functions must *only* be called
- from interrupts that have been assigned a priority at or below
- configMAX_SYSCALL_INTERRUPT_PRIORITY.*/
- configASSERT( ucCurrentPriority>= ucMaxSysCallPriority );
FREERTOS中的优先级数值设定的参数是configMAX_SYSCALL_INTERUPT_PRORITY。默认值是5,所以要想在中断中使用操作系统函数需要将中断的优先级设置的大于等于5.
- #define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
0 0
- STM32F4使用FreeRTOS的中断
- STM32F4使用FreeRTOS的中断
- stm32F4的NVIC和中断
- STM32F4 RTC的使用
- STM32F4 RTC的使用
- FreeRTOS 中断
- FreeRTOS在STM32F4上移植
- STM32使用freertos时在中断中调用系统函数的注意点
- stm32f 使用freertos时在中断中调用系统函数的注意点
- STM32F4定时器 -- 定时中断
- STM32F4中断抢占优先级和响应优先级的概念
- STM32F4的HAL库开启串口空闲中断
- stm32f4 DAC DMA 频率发生器+FreeRTOS
- FreeRTOS 软件定时器的使用
- 使用Stm32CubeMX+FreeRTOS的组合
- FreeRTOS中断分析
- FreeRTOS之开关中断
- 嵌入式FreeRTOS系统,在中断中调用FreeRTOS系统的API函数
- poj2068:Nim——题解
- 面试(五)
- 全局变量让看上去合理的程序出问题
- 自定义的UI里永远不要写任何有关数据的东西,全放到UIViewController里
- Android 桌面角标在各大品牌机型上的实现
- STM32F4使用FreeRTOS的中断
- 爬虫
- SetActive();和Destroy();两个函数对脚本中函数的不同的影响
- android.intent.action大全和用法收集
- UVA 230
- 对于Python中if __name__=='__main__' 的理解
- 高性能Nginx服务器优化实战
- sharding jdbc--Cloud not resolve placeholder … in string value …?
- 数据库<2>