准备
移植
- 通过STM32CubeMx创建MDK空项目
- STM32F103
- RCC -> HSE
- SYS
- Debug -> Serial Wire
- Timebase Source -> TIM1
- GPIO -> LED
- 解压FreeRTOS源码
- 在项目新建文件夹FreeRTOS,放FreeRTOS源码
- 将FreeRTOS源码Source文件夹中:
- include文件夹
- portable文件夹
- croutine.c
- event_groups.c
- list.c
- queue.c
- stream_buffer.c
- tasks.c
- timers.c
复制到项目新建FreeRTOS文件夹下
portable文件夹只保留以下文件夹
- GCC
- Keil
- MemMang
- 用Kiel打开项目进行环境配置
- 在Manage Project Items中新建组FreeRTOS/Source,并添加
- Manage Project Items -> Groups - > FreeRTOS\Source -> Files
- croutine.c
- event_groups.c
- list.c
- queue.c
- stream_buffer.c
- tasks.c
- timers.c
- 在Manage Project Items中新建组FreeRTOS/Others,并添加
- Manage Project Items -> Groups - > FreeRTOS/Others -> Files
- port.c
- heap_4.c
port.c位于FreeRTOS\portable\GCC\ARM_CM3,
heap_4.c位于FreeRTOS\portable\MemMang
- 添加头文件
- Options for Target -> C/C++ -> Include Paths
- FreeRTOS\include
- FreeRTOS\portable\GCC\ARM_CM3
- FreeRTOS
- 复制FreeRTOSConfig.h到FreeRTOS文件夹下,并添加到项目中
- 在FreeRTOSConfig.h添加以下define
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
#define vPortSVCHandler SVC_Handler
- 注释
void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
测试
void LED_Task(void *p)
{
while (1)
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
vTaskDelay(1000);
}
}
xTaskCreate(LED_Task, "LED_Task", 128, NULL, 1, NULL);
vTaskStartScheduler();
评论区