FreeRTOS
FreeRTOS目录结构
移植过程
在工程中创建freertos文件夹,在freertos文件夹中创建src文件夹、inc文件夹、port文件夹。
freertos/src | 存放源码 |
freertos/inc | 存放头文件 |
freertos/port | 存放移植平台的相关文件 |
复制内存管理文件:复制FreeRTOS/Source/portable/MemMang/heap_4.c文件到freertos/port文件夹。
文件 优点 缺点 heap_1.c 分配简单,时间确定 只分配、不回收 heap_2.c 动态分配,最佳匹配 产生碎片、时间不定 heap_3.c 调用标准库函数 速度慢、时间不定 heap_4.c 相邻空闲内存可合并 可解决碎片问题、时间不定 heap_5.c 在heap_4.c文件基础上支持分隔的内存块 可解决碎片问题、时间不定
复制移植相关文件:复制FreeRTOS/Source/portable/RVDS/ARM_CM3文件下的port.c文件、portmacro.h文件到freertos/port文件夹。
复制通用核心文件:复制FreeRTOS/Source文件夹下的croutine.c文件、event_groups.c文件、list.c文件、queue.c文件、task.c文件、timers.c文件到freertos/src文件夹。
复制源码头文件:复制FreeRTOS/Source/include下的所有文件到freertos/inc文件夹。
复制配置文件:复制FreeRTOS/Demo/CORTEX_STM32F103_Keil文件夹下的FreeRTOSConfig.h文件到freertos文件夹。
到此配置完成,在IDE里把添加的文件导到工程中。
需要额外修改:
在FreeRTOSConfig.h文件中末尾#endif前添加3个宏。
#define xPortPendSVHandler PendSV_Handler
#define xPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
这三个宏是中断服务函数的宏,在FreeRTOS里用到,并且FreeRTOS操作系统已经实现了这三个中断服务函数。
因此在stm32f10x_it.c文件中注释掉3个相关的中断服务函数。
创建任务
#include "freertos.h"
#include "task.h"
TaskHandler_t myTaskHandler;
void myTask(void *arg)
{
whiel(1)
{
vTaskDelay(500);
}
}
int main(void)
{
初始化工作
// 任务函数名称,任务名称,分配的任务堆栈大小,任务传递参数,任务优先级,任务句柄
xTaskCreate(myTask, "myTask", 512, NULL, 2, &myTaskHandler);
// 开启调度
vTaskStartScheduler();
while(1)
{}
}