FreeRTOS - STM32中任务未进行调度问题

将FreeRTOS源码移植到STM32F10X中,编译通过,烧录后,发现开启的新任务没有运行。

现象:串口值仅仅打印了 printf("TesetesettettttttttttesT\r\n");

          子任务中没有 循环打印 printf("start_task! \r\n");

          任务创建返回值正确 printf("ret = %ld \r\n", ret); 返回值为1 

原因判断:最开始怀疑,任务堆栈过小,但都没有解决,最后判断是未进入start_task任务中,没有任务调度。

原始代码如下:

FreeRTOS - STM32中任务未进行调度问题_第1张图片

 FreeRTOS 的任务调度,是由调度器在sysTick中断中执行,同时为了中断服务得到及时响应,引入pendSV 执行任务上下文切换。

最终发现在FreeRTOSConfig.h 配置文件中没有 配置SVC异常和PenSV异常 的宏,增加下图红框中的宏定义,重命名这两个异常的函数实现名字。

FreeRTOS - STM32中任务未进行调度问题_第2张图片

#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler

 xPortPendSVHandler 和 vPortSVCHandler 是FreeRTOS源码中port.h文件实现的,但是STM32 原始的异常函数名应该为PendSV_Handler 和 SVC_Handler,所以将其重命名即可。

修改后,任务调度正常。

你可能感兴趣的:(嵌入式开发,FreeRTOS,stm32,单片机,arm)