- 程序在进入调度
vTaskStartScheduler
之后立马进入hardfault
中断,解决方法有网友提到将configMAX_SYSCALL_INTERRUPT_PRIORITY
宏定义改大到9,实测可以解决问题,但是当我再使用队列进行中断发送xQueueSendToBackFromISR(RECEIVE_Queue_Handler, &Res, &xHigherPriorityTaskWoken );
的时候发现,程序会卡死在port.c文件的699行configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
这个函数。队列的优先级我设置的是4,configMAX_SYSCALL_INTERRUPT_PRIORITY
设置的是5,所以断言失败。 - 后来改变优先级分组,将
nvic_priority_group_set( NVIC_PRIGROUP_PRE4_SUB0 );
放在main.c开头,然后再将configMAX_SYSCALL_INTERRUPT_PRIORITY
设置为2,即可正常运行。因为当优先级number低于configMAX_SYSCALL_INTERRUPT_PRIORITY
的时候,是不能够使用RTOS的API的,所以改小即可。
以上问题测试使用将队列的优先级number大于configMAX_SYSCALL_INTERRUPT_PRIORITY
的时候即可使用串口发送队列,可以正常打印。
网友帖子:https://blog.youkuaiyun.com/p1279030826/article/details/111320751