在创建完任务后执行发现任务没有被执行,打断电调试后发现 vTaskStartScheduler(); ->xPortStartScheduler(); ->prvStartFirstTask();//执行第一个任务 ->svc 0 卡死了
需修改:
FreeRTOSConfig.h文件
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 2
修改成
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5//或者更大 这里改成5进入了任务 可能后续还需要修改
//#define xPortSysTickHandler SysTick_Handler 注释掉这句系统时钟中断
且修改gd32f4xxx_it.c 里的SysTick_Handler()函数
extern void xPortSysTickHandler(void);
/*!
\brief this function handles SysTick exception
\param[in] none
\param[out] none
\retval none
*/
void SysTick_Handler(void)
{
delay_decrement();
#if (INCLUDE_xTaskGetSchedulerState == 1 )
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
{
#endif /* INCLUDE_xTaskGetSchedulerState */
xPortSysTickHandler();
#if (INCLUDE_xTaskGetSchedulerState == 1 )
}
#endif /* INCLUDE_xTaskGetSchedulerState */
}
FreeRTOSConfig.h文件中 对 SVC_Handler和PendSV_Handler有写中断函数 。就需要把gd32f4xx_it.h里的这两个函数屏蔽掉不然会报错。
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
//#define xPortSysTickHandler SysTick_Handler
/*!
\brief this function handles SVC exception
\param[in] none
\param[out] none
\retval none
*/
//void SVC_Handler(void)
//{
//}
\brief this function handles PendSV exception
\param[in] none
\param[out] none
\retval none
*/
//void PendSV_Handler(void)
//{
//}
后续编译就不会报错。