STM32移植FreeRTOS出现的问题及解决办法
- 引言
- 问题:\FreeRTOS\queue.c(2761): error: #268: declaration may not appear after executable statement in block
- 问题:..\OBJ\IAP.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by port.o and stm32f10x_it.o).
- 解决方法
- 问题:..\OBJ\IAP.axf: Error: L6218E: Undefined symbol vApplicationStackOverflowHook (referred from tasks.o).
- 解决方法、
引言
我们在使用STM32移植FreeRTOS时,可能会出现很多问题,本文主要来归纳总结一下(未完待续)。
问题:\FreeRTOS\queue.c(2761): error: #268: declaration may not appear after executable statement in block
解决方法
把C99 Mode勾上
问题:…\OBJ\IAP.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by port.o and stm32f10x_it.o).
解决方法
提示函数有重复定义,PendSV_Handler,SVC_Handle在FreeRTOS中重新定义用于任务切换,所以需要注释掉stm32F1xxx_it.c中的这三个中断函数。
问题:…\OBJ\IAP.axf: Error: L6218E: Undefined symbol vApplicationStackOverflowHook (referred from tasks.o).
解决方法、
因为在"FreeRTOSConfig.h"中定义了钩子函数,但未找到函数定义。
- 直接在FreeRTOSConfig.h文件中将configCHECK_FOR_STACK_OVERFLOW 置为0;
#define configCHECK_FOR_STACK_OVERFLOW 0
- 编写一个钩子函数
#if (configCHECK_FOR_STACK_OVERFLOW == 1)
void vApplicationStackOverflowHook(TaskHandle_t xTask,char * pcTaskName )
{
portDISABLE_INTERRUPTS();
printf("\nStack overflow!\n");
while(1);
}
#endif
具体放在那个文件里,可以自己设定。