查看: 2883|回复: 0

STM32F4使用FreeRTOS的中断

[复制链接]
  • TA的每日心情
    慵懒
    2016-11-22 11:58
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-12-15 22:49:28 | 显示全部楼层 |阅读模式
    分享到:
    在使用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) )
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 13:55 , Processed in 0.118759 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.