GD32F303VCT6移植FreeRTOS系统

一、资源准备

(1)准备RTOS源码,可以去官网下载,也可以通过下面链接进行下载

https://download.csdn.net/download/qq_37681280/89702183

(2)准备GD32F303VCT6基础功能,这里也给大家准备好了

https://download.csdn.net/download/qq_37681280/89702210

二、开始移植

1、在工程目录下建立FreeRTOS文件夹,用于存放FreeRTOS相关文件

该文件夹下需要放置FreeRTOS的一些源码文件,具体需要放置文件为“FreeRTOSv202212.00/FreeRTOS/Source"底下的所有文件,内容为:

对以上文件进行处理。其实就是处理portable文件夹,把不需要的东西都删掉,整理的内容只剩下这三个文件夹:

接着打开工程,把FreeRTOS源码移植进去:需要建立FreeRTOS_CORE和FreeRTOS_PORTABLE文件夹,分别放置FreeROTOS的源码文件和内核所需文件,两个文件的内容分别如下:

FreeRTOS_PORTABLE

这里注意不要选错,一定是ARM_CM4F底下的,因为GD32F3系列的内核是“Cortex-M4”

建立后的工程如下:

接下来是添加路径:

如下内容:

到此则开始编译,修复语法上的错误:

这里提示少了这个文件,那就去找到他,一般都在FreeRTOS源文件底下,在demo底下的Keil

把它复制到我们工程里面 在进行编译

到此已经提示没有语法错误啦,可能是我的编译器问题,一般需要屏蔽掉gd32f30x_it.c下的void SVC_Handler(void)、void PendSV_Handler(void),void SysTick_Handler(void)这三个文件,好像是和FreeRTOS的文件冲突了,屏蔽完之后,需要把在FreeRTOSConfig.文件夹下进行关联(就是把这四行代码复制过去就行,这里是进行关联)

#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
#define INCLUDE_xTaskGetSchedulerState 1

接着修改FreeRTOSConfig下的系统所有总的堆大小和时钟

去配置系统的所欲的对大小(16K主要看具体的要求):

好了,到此已经移植成功了,接下来建三个任务来验证是否移植成功:

#include "FreeRTOS.h"
#include "task.h"
TaskHandle_t            StartTask_Handler;
TaskHandle_t            Task1_Handler;
TaskHandle_t            Task2_Handler;

void task1(void *pvParameters) {
    while(1) {
      printf("test1-run\n");
            vTaskDelay(1000);
    }
}
void task2(void *pvParameters) {
    while(1) {
       printf("test2-run\n");
             vTaskDelay(3000);
    }
}
void start_task(void *pvParameters) {
    taskENTER_CRITICAL();
            xTaskCreate((TaskFunction_t)task1, 
            (const char*   )"task1",
            50,
      NULL,
       2, 
      (TaskHandle_t*  )&Task1_Handler);
            xTaskCreate((TaskFunction_t)task2, 
            (const char*   )"task2",
     50,
     NULL,
      2, 
     (TaskHandle_t*  )&Task2_Handler);
    vTaskDelete(StartTask_Handler);
    taskEXIT_CRITICAL();
}
int main(void)
{
       systick_config();
       uart0_init();
       xTaskCreate((TaskFunction_t)start_task, 
     (const char*   )"start_task",
     128,             
     NULL,
     1, 
     (TaskHandle_t*  )&StartTask_Handler);
     vTaskStartScheduler();
    while(1){
        }
}

可以看到,程序已经按照预期的跑起来了,到此移植结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值