FreeRTOS进入函数prvStartFirstTask() 启动SVC后进入HardFault死循环
原因:在初始化串口时为串口中断配置的NVIC与FreeRTOS的优先级设置冲突
解决方法:设置USART的中断分组为,主优先级为4位,副优先级为0位即可!!
这是修改前的代码:
usart_transmit_config(UART_Periph,USART_TRANSMIT_ENABLE);
usart_receive_config(UART_Periph,USART_RECEIVE_ENABLE);
nvic_priority_group_set(NVIC_PRIGROUP_PRE0_SUB4);
nvic_irq_enable(USART0_IRQn,0,1);
这是修改后可以正常工作的代码:
usart_transmit_config(UART_Periph,USART_TRANSMIT_ENABLE);
usart_receive_config(UART_Periph,USART_RECEIVE_ENABLE);
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
nvic_irq_enable(USART0_IRQn,0xF,0);
在FreeRTOSConfig.h文件中,设置的中断最低优先级为15.
//中断最低优先级
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
//系统可管理的最高中断优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) /* 240 */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)