工作中将freeRTOS移植到cotexM4F的单片机上,在运行过程中老是进hardfaut。最开始以为是栈溢出了,最后把栈改大以后现象还是没有变,后来发现设置pendSV中断和systick中的优先级的地方如下:
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 7
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
#define configPRIO_BITS 5
#define configKERNEL_INTERRUPT_PRIORITY (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
#define configMAX_SYSALL_INTERRUPT_PRIORITY (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
正常在操作系统中pendSV的中断优先级应该是最低的,上面的配置显然有问题
修改后
#define configKERNEL_INTERRUPT_PRIORITY 255 //(configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
#define configMAX_SYSALL_INTERRUPT_PRIORITY 191//(configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
再运行就没有问题了,这里简单做一个记录。由于程序源码在公司内网,所有就不贴图了。