我使用的
FreeRTOS
是官网最新的版本
v202212.01
,
FreeRTOSConfig.h
文件也是使用的
v202212.01
版本
demo
文件夹例程里的,在移植过程中出现了三个错误
1.
按照正点原子的例程移植完成后
LED
灯不亮,在
FreeRTOSConfig.H文件末端增加两个宏定义解决
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
在解决这个问题过程中,曾经看到另一个答案,说是
STM32F103
的
FLASH
容量超出了,需要在
FreeRTOSConfig.h
文件中,把
#define configTOTAL_HEAP_
SIZE ( ( size_t ) ( 20 * 1024 ) )
改成
17*1024
或者
10*1024
,但
v202212.01
版本默认就是
17*1024
,所以并不是这个问题导致的,低版本的请检查下这里
2.提示SysTick_Handler重复定义了,把stm32f10x_it.c
内将这三个中断注释掉
/*
void PendSV_Handler(void)
{
}
void SysTick_Handler(void)
{
}
*/
/*
void SVC_Handler(void)
{
}
*/
3.
提示
delay.o里xTaskGetSchedulerState没有定义,在FreeRTOS.h
内
将宏定义设置为
1
#ifndef INCLUDE_xTaskGetCurrentTaskHandle
#define INCLUDE_xTaskGetCurrentTaskHandle 1
#endif
4.
非必要项目,我没有按照例程去写主函数,用下面的函数测试
LED
灯正常闪烁,串口正常输出
static TaskHandle_t LedTaskHandle=NULL;
static void Led0Task(void *pvParameters)
{
while(1)
{
LED0=0;
delay_ms(1000);
LED0=1;
delay_ms(1000);
printf("LED0
正在闪烁
!\r\n");
}
}
int main(void)
{
LED_Init(); //
初始化与
LED
连接的硬件接口
delay_init();
uart_init(115200);
xTaskCreate(Led0Task,
"Led0Task",
128,
NULL,
4,
&LedTaskHandle);
vTaskStartScheduler();
}