打印

GD32F303移植FreeRTOS

[复制链接]
3370|81
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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


使用特权

评论回复
评论
xiyaoko2365 2022-12-31 22:55 回复TA
———————————————— 版权声明:本文为CSDN博主「笙歌君独忧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_23852045/article/details/108730470 
沙发
xiyaoko2365|  楼主 | 2022-12-31 22:33 | 只看该作者
将下载的文件解压,内容如下:FreeRTOS就是我们需要移植用到的,里面包含了官方移植的demo和内核文件,FreeRTOS-Plus里面包含了一些第三方的组件。

使用特权

评论回复
板凳
xiyaoko2365|  楼主 | 2022-12-31 22:34 | 只看该作者
FreeRTOS文件夹内容如下:Demo文件夹下是官方在开发板移植好的demo,可以参考,Source文件夹下就是我们需要移植的内核文件。

使用特权

评论回复
地板
xiyaoko2365|  楼主 | 2022-12-31 22:34 | 只看该作者
Source文件夹内容如下:

使用特权

评论回复
5
xiyaoko2365|  楼主 | 2022-12-31 22:35 | 只看该作者
在准备好的工程下创建一个FreeRTOS文件夹下,将1>提到的Source文件中所有的内容复制到这个文件夹下:

使用特权

评论回复
6
xiyaoko2365|  楼主 | 2022-12-31 22:36 | 只看该作者
删除上图中红框中的内容,如下:

使用特权

评论回复
7
xiyaoko2365|  楼主 | 2022-12-31 22:36 | 只看该作者
在当前目录下新建一个文件夹src,将红框中的内容剪切到src文件夹下,如下图:

使用特权

评论回复
8
xiyaoko2365|  楼主 | 2022-12-31 22:39 | 只看该作者
进入到portable文件夹下,只保留下图三个文件夹,其余全部删除,如下图:

使用特权

评论回复
9
xiyaoko2365|  楼主 | 2022-12-31 22:40 | 只看该作者
其中keil文件夹下没有可以用的内容,MemMang下是官方给的5种内存管理的方法,没有好坏之分,都有优缺点,根据需要选一种方式即可。

使用特权

评论回复
10
xiyaoko2365|  楼主 | 2022-12-31 22:41 | 只看该作者
添加FreeRTOS文件到工程
1> 添加src下的文件到工程

使用特权

评论回复
11
xiyaoko2365|  楼主 | 2022-12-31 22:42 | 只看该作者
添加portable/MemMang/heap_4文件到工程

使用特权

评论回复
12
xiyaoko2365|  楼主 | 2022-12-31 22:42 | 只看该作者
添加portable/RVDS/ARM_CM4F/port文件到工程,因为GD32F303内核是Cortex-M4F内核。

使用特权

评论回复
13
xiyaoko2365|  楼主 | 2022-12-31 22:43 | 只看该作者

使用特权

评论回复
14
xiyaoko2365|  楼主 | 2022-12-31 22:44 | 只看该作者
添加相应的头文件路径

使用特权

评论回复
15
xiyaoko2365|  楼主 | 2022-12-31 22:45 | 只看该作者
编译一下,提示如下错误

使用特权

评论回复
16
xiyaoko2365|  楼主 | 2022-12-31 22:46 | 只看该作者
缺少FreeRTOSConfig.h这个头文件,我们在FreeRTOS源码中复制一个将这个路径下的(FreeRTOS\FreeRTOS\Demo\CORTEX_STM32F103_Keil)FreeRTOSConfig.h文件复制到工程中,并且添加到工程中,如下图:

使用特权

评论回复
17
xiyaoko2365|  楼主 | 2022-12-31 22:47 | 只看该作者
再次编译,提示如下错误:

使用特权

评论回复
18
xiyaoko2365|  楼主 | 2022-12-31 22:48 | 只看该作者
其实就是缺少一个宏定义,这里可以在FreeRTOSConfig.h中定义一个

使用特权

评论回复
19
xiyaoko2365|  楼主 | 2022-12-31 22:49 | 只看该作者
再次编译发现没有错误了。

使用特权

评论回复
20
xiyaoko2365|  楼主 | 2022-12-31 22:49 | 只看该作者
写一个简单的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);
    }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

403

帖子

0

粉丝