单片机GD32F303RCT6 (Macos环境)开发 (二十二)—— FreeRTOS的移植

GD32F303RCT6 FreeRTOS的移植

1、在Application的Makefile中增加freertos的编译选项,如下:

ENABLE_FREERTOS = yes
ifeq ($(ENABLE_FREERTOS), yes)
APPLICATION_FLAGS += \
-DENABLE_FREERTOS
endif

2、Application目录下增加FreeRtos目录,将下载的FreeRTOS源码中的如下文件拷贝到FreeRtos目录。
在这里插入图片描述
3、 删除portable下无用的文件跟目录。因为我们的编译环境为gcc,所以只保留gcc目录以及MemMang目录即可。
如下:
在这里插入图片描述
4、删减gcc跟Memmang目录:MemMang只保留heap4.c,而GCC目录只保留ARM_CM4F目录即可。如下:
在这里插入图片描述
5、Application增加FreeRtos文件的编译。

ifeq ($(ENABLE_FREERTOS), yes)
C_DIRS += FreeRTOS/include
C_DIRS += FreeRTOS/portable/GCC/ARM_CM4F
C_DIRS += FreeRTOS/portable/MemMang
endif

ifeq ($(ENABLE_FREERTOS), yes)
C_INCS += FreeRTOS/include
C_INCS += FreeRTOS/portable/GCC/ARM_CM4F
C_INCS += FreeRTOS/portable/MemMang
endif

6、在工程根目录下编译后报错如下:
在这里插入图片描述
提示缺少FreeRTOSConfig.h,这是FreeRTOS的一个配置文件,我们从copy一个出来放在FreeRtos/include目录下。
在这里插入图片描述
7、继续编译。报错如下:
在这里插入图片描述
SystemCoreClock这个变量是system_gd32f30x.c中定义的,所以在FreeRTOS中使用的话,要extern进来。修改
FreeRTOSConfig.h如下
在这里插入图片描述
8、继续编译,报错如下:
在这里插入图片描述
Makefile增加FPU FLOAT-ABI 的编译选项,如下:
在这里插入图片描述

9、继续编译,报错如下:

在这里插入图片描述

提示SVC_Handler PendSV_Handler重重复定义,那么我们屏蔽掉gd32f30x_it.c中的两个函数的定义。
修改如下:
在这里插入图片描述
10、继续编译报错如下:
在这里插入图片描述
屏蔽掉config文件关于钩子函数的选项,修改如下:
在这里插入图片描述
另外,这里改小一点。
在这里插入图片描述

11、继续编译无报错。
12、systick函数的处理。gd 提供的systick初始化就采用了中断的方式,也是1ms中断一次,正好可以给FreeRTOS提供节拍。
所以我们修改gd32f30x_it.c如下:

在这里插入图片描述
在这里插入图片描述

13、继续编译无报错。
14、写个例子试一下吧。

main.c

#define LED1_TASK_PRIO    ( tskIDLE_PRIORITY + 2 )
#define LED2_TASK_PRIO    ( tskIDLE_PRIORITY + 3 )
void LED1_task(void * pvParameters);
void LED2_task(void * pvParameters);

void LED1_task(void * pvParameters)
{  
    for( ;; ){
        gpio_bit_set(GPIOB, GPIO_PIN_4);
        vTaskDelay(1000);
    }
}

void LED2_task(void * pvParameters)
{  
    for( ;; ){
        gpio_bit_reset(GPIOB, GPIO_PIN_4);
        vTaskDelay(500);
    }
}


xTaskCreate(LED1_task, "LED1", configMINIMAL_STACK_SIZE, NULL, LED1_TASK_PRIO, NULL);
xTaskCreate(LED2_task, "LED2", configMINIMAL_STACK_SIZE, NULL, LED2_TASK_PRIO, NULL);
/* start scheduler */
vTaskStartScheduler();
15、编译后灯开始闪烁,说明freertos已经正常运行,至此,移植完成。
16、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值