FreeRTOS移植步骤

一、FreeRTOS源码下载

FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

二、FreeRTOS源码介绍

(1) FreeRTOS源码打开

 FreeRTOS移植步骤_第1张图片FreeRTOS移植步骤_第2张图片

(2) FreeRTOS文件夹打开

FreeRTOS移植步骤_第3张图片FreeRTOS移植步骤_第4张图片

(3)Soutce文件夹打开

FreeRTOS移植步骤_第5张图片FreeRTOS移植步骤_第6张图片

(4)portable文件夹打开

FreeRTOS移植步骤_第7张图片FreeRTOS移植步骤_第8张图片

三、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纯净版移植前后对比

移植前
croutine.c
event_groups.c
list.c
queue.c
task.c
timers.c

heap_1.c
heap_2.c
heap_3.c
heap_4.c
heap_5.c

ARM_CA9
ARM_CM0
ARM_CM3
ARM_CM4_MPU
ARM_CM4F
ARM_CM7
ARM7_LPC21xx

移植后
croutine.c
event_groups.c
list.c
queue.c
task.c
timers.c

heap_4.c(内存管理算法)

ARM_CM4F(ARM4内核)


 

你可能感兴趣的:(FreeRTOS,服务器,linux,网络)