GD32移植FreeRTOS

本文详细介绍了如何在GD32开发板上移植FreeRTOS操作系统,包括项目基础环境准备、FreeRTOS源码裁剪与目录构建、解决FreeRTOSConfig.h文件缺失、SystemCoreClock问题、中断处理函数修改、钩子函数配置以及Systick硬件延迟设置。最终通过LED点亮测试验证移植成功,并展示了HelloWorld多任务串口打印功能的实现。

准备工作

  1. GD32开发板。案例是以梁山派为开发板。
  2. Windows系统的电脑。当前是以Win11的电脑来实现案例的。
  3. Keil开发工具。并且已经安装好GD32依赖环境。
  4. FreeRTOS源码包。下载地址为: Releases · FreeRTOS/FreeRTOS · GitHub

当前以FreeRTOSv202212.01版本为例。也是目前的最新版本。

移植流程

项目基础环境准备

参考:

为了将 FreeRTOS 移植GD32 微控制器上,需要完成一系列关键步骤,包括配置编译器环境、设置硬件时钟、中断控制器、以及适配硬件抽象层。以下是详细的移植指南: ### 1. 准备开发环境 首先,确保开发工具链已正确安装。GD32 系列微控制器通常支持多种编译器,例如 GCC、Keil、IAR 等。根据使用的编译器类型,选择合适的 FreeRTOS 移植版本。FreeRTOS 的源代码可以从 SourceForge 获取,其中包含多个编译器和微控制器的移植支持[^1]。 ### 2. 获取 FreeRTOS 源码 从 SourceForge 下载 FreeRTOS 源码包,并找到适用于 GD32移植目录。通常,FreeRTOS移植文件位于 `FreeRTOS/source/portable/[compiler]/[microcontroller]/port.c` 路径中。GD32 基于 ARM Cortex-M 内核,因此可以参考 ARM Cortex-M 系列的移植示例进行适配[^2]。 ### 3. 配置系统节拍中断 FreeRTOS 依赖系统节拍中断(SysTick)来管理任务调度和延时。在 GD32 上,需要实现 `prvSetupTimerInterrupt()` 函数来配置系统节拍中断。该函数通常包括初始化 SysTick 定时器并设置中断优先级。以下是一个简化的 SysTick 配置示例: ```c void prvSetupTimerInterrupt(void) { /* 设置 SysTick 定时器中断周期 */ SysTick_Config(SystemCoreClock / configTICK_RATE_HZ); /* 设置 SysTick 中断优先级 */ NVIC_SetPriority(SysTick_IRQn, configKERNEL_INTERRUPT_PRIORITY); } ``` ### 4. 适配硬件抽象层 GD32 提供了标准外设库,用于访问 GPIO、定时器、串口等外设。需要在 FreeRTOS 中适配 GD32 的硬件抽象层,例如实现 `vPortSetupTimerInterrupt()` 函数来配置系统节拍中断,并确保 FreeRTOS 能够正确响应中断。 ### 5. 配置内存管理 FreeRTOS 支持多种内存分配策略,包括动态内存分配和静态内存分配。根据应用需求选择合适的内存管理方式,并在 `FreeRTOSConfig.h` 文件中进行配置。此外,还需要确保 GD32 的内存映射符合 FreeRTOS 的要求,例如合理分配 RAM 和 ROM 的使用[^2]。 ### 6. 编写测试任务 在完成基本移植后,编写简单的测试任务以验证 FreeRTOS 是否正常运行。例如,可以创建两个任务,分别控制 LED 闪烁和打印调试信息到串口: ```c void vTask1(void *pvParameters) { for (;;) { /* 控制 LED 闪烁 */ GD32_GPIO_Toggle(LED_PIN); vTaskDelay(pdMS_TO_TICKS(500)); } } void vTask2(void *pvParameters) { for (;;) { /* 打印调试信息 */ printf("Task 2 is running\r\n"); vTaskDelay(pdMS_TO_TICKS(1000)); } } int main(void) { /* 初始化 GD32 硬件 */ GD32_Init(); /* 创建任务 */ xTaskCreate(vTask1, "Task 1", configMINIMAL_STACK_SIZE, NULL, 1, NULL); xTaskCreate(vTask2, "Task 2", configMINIMAL_STACK_SIZE, NULL, 1, NULL); /* 启动调度器 */ vTaskStartScheduler(); for (;;) ; } ``` ### 7. 调试与优化 使用调试工具(如 J-Link 或 ST-Link)连接 GD32 微控制器,并通过调试器检查任务调度、中断响应和内存使用情况。根据调试结果优化 FreeRTOS 的配置,例如调整任务优先级、堆栈大小等。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

除不掉的灰色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值