GD32F303移植FreeRTOS
GD32F303移植FreeRTOS一、移植环境
系统:WIN7
MDK:keil v5.26
开发板:GD32F303C-EVAL
固件库:V1.0.2
FreeRTOS版本:V10.4.0
二、复制FreeRTOS到工程文件中
1> FreeRTOS简要介绍
FreeRTSO下载链接:https://www.freertos.org/a00104.html
将下载的文件解压,内容如下:FreeRTOS就是我们需要移植用到的,里面包含了官方移植的demo和内核文件,FreeRTOS-Plus里面包含了一些第三方的组件。
FreeRTOS文件夹内容如下:Demo文件夹下是官方在开发板移植好的demo,可以参考,Source文件夹下就是我们需要移植的内核文件。
Source文件夹内容如下:
在准备好的工程下创建一个FreeRTOS文件夹下,将1>提到的Source文件中所有的内容复制到这个文件夹下:
删除上图中红框中的内容,如下:
在当前目录下新建一个文件夹src,将红框中的内容剪切到src文件夹下,如下图:
进入到portable文件夹下,只保留下图三个文件夹,其余全部删除,如下图:
其中keil文件夹下没有可以用的内容,MemMang下是官方给的5种内存管理的方法,没有好坏之分,都有优缺点,根据需要选一种方式即可。 添加FreeRTOS文件到工程
1> 添加src下的文件到工程
添加portable/MemMang/heap_4文件到工程
添加portable/RVDS/ARM_CM4F/port文件到工程,因为GD32F303内核是Cortex-M4F内核。
添加相应的头文件路径
编译一下,提示如下错误
缺少FreeRTOSConfig.h这个头文件,我们在FreeRTOS源码中复制一个将这个路径下的(FreeRTOS\FreeRTOS\Demo\CORTEX_STM32F103_Keil)FreeRTOSConfig.h文件复制到工程中,并且添加到工程中,如下图: 再次编译,提示如下错误:
其实就是缺少一个宏定义,这里可以在FreeRTOSConfig.h中定义一个
再次编译发现没有错误了。
写一个简单的LED任务测试一下,如下图:#include "gd32f30x.h"
#include "led.h"
#include "systick.h"
#include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"
#define LED1_TASK_PRIO ( tskIDLE_PRIORITY + 2 )
void LED1_task(void * pvParameters);
int main(void)
{
/* 设置优先级分组为4,16个优先级全是抢占优先级 */
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
GW_LedInit(LED1);
GW_LedInit(LED2);
xTaskCreate(LED1_task, "LED1", configMINIMAL_STACK_SIZE, NULL, LED1_TASK_PRIO, NULL);
/* start scheduler */
vTaskStartScheduler();
while(1){
}
}
void LED1_task(void * pvParameters)
{
for( ;; ){
/* toggle LED2 each 500ms */
GW_LedToggle(LED1);
vTaskDelay(300);
}
}