FreeRTOS移植步骤
一、FreeRTOS源码下载
二、FreeRTOS源码介绍
(1)?FreeRTOS源码打开
?
(2)?FreeRTOS文件夹打开
(3)Soutce文件夹打开
(4)portable文件夹打开
三、FreeRTOS的移植过程
(1)新建一个FreeRTOS的文件夹
(2)将 FreeRTOS内核源码的 Source 文件夹下的所有文件添加到工程的 FreeRTOS 文件夹中
(3)打开基础工程 ,新建两个文件分组 ,分别为FreeRTOS_CORE和FreeRTOS_PORT
(4)?FreeRTOS_CORE 存放 所有的 FreeRTOS 的内核 C 源文件croutine.c,event_groups.c,list.c,queue.c,stream_buffer.c,tasks.c,timers.c
(5)FreeRTOS_PORT 存放 FreeRTOS 内核的移植文件,heap_x.c 和 port.c
- FreeRTOS/portable/MemMang 下有五个 C 源文件,这五个 C 源文件对应了五种 FreeRTOS 提供的内存管理算法,博主使用heap_4.c。
- port.c 文件的路径在FreeRTOS/portable/RVDS 。port.c 是 FreeRTOS 这个软件与 MCU 这个硬件连接的桥梁。?FreeRTOS 针对不同的 MCU 提供了不同的 port.c 文件。例如STM32F1? 系列,就使用ARM_CM3下的port.c
(6)?添加 FreeRTOS 源码的头文件路径。其中一个头文件路径就是 FreeRTOS/include,另外一个头文件路径为 port.c 文件的路径
(7)添加 FreeRTOSConfig.h ?文件并添加头文件路径。获取途径:FreeRTOS官方历程或者正点原子移植工程等
四、编译看是否移植成功
????????出现? .\output\Project.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by port.o and gd32f30x_it.o).错误。这个错误的原因是SVC_Handler函数在多个地方被定义,所以我们需要将gd32f30x_it.o里面的SVC_Handler函数屏蔽。再次编译,没有错误
五、添加任务代码
? ? ? ? 添加代码的原因是为了近一步确定是否移植成功
#include "FreeRTOS.h"
#include "task.h"
//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);
//创建开始任务
xTaskCreate((TaskFunction_t )start_task, //任务函数
(const char* )"start_task", //任务名称
(uint16_t )START_STK_SIZE, //任务堆栈大小
(void* )NULL, //传递给任务函数的参数
(UBaseType_t )START_TASK_PRIO, //任务优先级
(TaskHandle_t* )&StartTask_Handler); //任务句柄
vTaskStartScheduler(); //开启任务调度
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //进入临界区
while(1)
{
}
taskEXIT_CRITICAL(); //退出临界区
}
六、FreeRTOS纯净版移植前后对比
移植前 heap_1.c ARM_CA9 | 移植后 heap_4.c(内存管理算法) ARM_CM4F(ARM4内核)
|
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!