GD32F303移植FreeRTOS

[复制链接]
5148|81
 楼主| xiyaoko2365 发表于 2022-12-31 22:32 | 显示全部楼层 |阅读模式
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
7607663b0480949dd4.png

评论

———————————————— 版权声明:本文为CSDN博主「笙歌君独忧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_23852045/article/details/108730470  发表于 2022-12-31 22:55
 楼主| xiyaoko2365 发表于 2022-12-31 22:33 | 显示全部楼层
将下载的文件解压,内容如下:FreeRTOS就是我们需要移植用到的,里面包含了官方移植的demo和内核文件,FreeRTOS-Plus里面包含了一些第三方的组件。
2065363b04838a1420.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:34 | 显示全部楼层
FreeRTOS文件夹内容如下:Demo文件夹下是官方在开发板移植好的demo,可以参考,Source文件夹下就是我们需要移植的内核文件。
1715063b0484aa6660.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:34 | 显示全部楼层
Source文件夹内容如下:
7730563b04883f18f7.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:35 | 显示全部楼层
在准备好的工程下创建一个FreeRTOS文件夹下,将1>提到的Source文件中所有的内容复制到这个文件夹下:
1968863b048ba61b17.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:36 | 显示全部楼层
删除上图中红框中的内容,如下:

5313963b048e09bb7f.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:36 | 显示全部楼层
在当前目录下新建一个文件夹src,将红框中的内容剪切到src文件夹下,如下图:
6085263b0490838b88.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:39 | 显示全部楼层
进入到portable文件夹下,只保留下图三个文件夹,其余全部删除,如下图:
2214063b049a868550.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:40 | 显示全部楼层
其中keil文件夹下没有可以用的内容,MemMang下是官方给的5种内存管理的方法,没有好坏之分,都有优缺点,根据需要选一种方式即可。
 楼主| xiyaoko2365 发表于 2022-12-31 22:41 | 显示全部楼层
添加FreeRTOS文件到工程
1> 添加src下的文件到工程

5355463b04a04b12f7.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:42 | 显示全部楼层
添加portable/MemMang/heap_4文件到工程
2794463b04a1041d91.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:42 | 显示全部楼层
添加portable/RVDS/ARM_CM4F/port文件到工程,因为GD32F303内核是Cortex-M4F内核。
 楼主| xiyaoko2365 发表于 2022-12-31 22:43 | 显示全部楼层
 楼主| xiyaoko2365 发表于 2022-12-31 22:44 | 显示全部楼层
添加相应的头文件路径
5612463b04ab3d2091.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:45 | 显示全部楼层
编译一下,提示如下错误
8035463b04aed3c98e.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:46 | 显示全部楼层
缺少FreeRTOSConfig.h这个头文件,我们在FreeRTOS源码中复制一个将这个路径下的(FreeRTOS\FreeRTOS\Demo\CORTEX_STM32F103_Keil)FreeRTOSConfig.h文件复制到工程中,并且添加到工程中,如下图: 755163b04b1f7d901.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:47 | 显示全部楼层
再次编译,提示如下错误:
6789063b04b6138c1f.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:48 | 显示全部楼层
其实就是缺少一个宏定义,这里可以在FreeRTOSConfig.h中定义一个
6286863b04b9926a7b.png
 楼主| xiyaoko2365 发表于 2022-12-31 22:49 | 显示全部楼层
再次编译发现没有错误了。
 楼主| xiyaoko2365 发表于 2022-12-31 22:49 | 显示全部楼层
写一个简单的LED任务测试一下,如下图:
  1. #include "gd32f30x.h"
  2. #include "led.h"
  3. #include "systick.h"
  4. #include <stdio.h>

  5. #include "FreeRTOS.h"
  6. #include "task.h"

  7. #define LED1_TASK_PRIO    ( tskIDLE_PRIORITY + 2 )

  8. void LED1_task(void * pvParameters);

  9. int main(void)
  10. {
  11.         /* 设置优先级分组为4,16个优先级全是抢占优先级 */
  12.     nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
  13.        
  14.         GW_LedInit(LED1);
  15.         GW_LedInit(LED2);
  16.         xTaskCreate(LED1_task, "LED1", configMINIMAL_STACK_SIZE, NULL, LED1_TASK_PRIO, NULL);
  17.         /* start scheduler */
  18.     vTaskStartScheduler();
  19.     while(1){
  20.     }
  21. }
  22. void LED1_task(void * pvParameters)
  23. {  
  24.     for( ;; ){
  25.         /* toggle LED2 each 500ms */
  26.         GW_LedToggle(LED1);
  27.         vTaskDelay(300);
  28.     }
  29. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

511

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部