【兆易GD32H759I-EVAL】FreeRTOS系统移植
[复制链接]
本帖最后由 TL-LED 于 2024-5-12 13:19 编辑
学习下在GD32H759-EVAL上移植FreeRTOS系统。
一、源码下载
官网地址:https://www.freertos.org/zh-cn-cmn-s/a00104.html
二、复制文件
将源码复制到前面创建的工程文件中
2.1、复制源码
2.2、复制配置文件
三、添加文件到项目
3.1、添加源码到项目
3.2、添加头文件
四、程序部分
4.1、修改gd32h7xx_it.c
屏蔽掉SVC_Handler和PendSV_Handler函数,增加滴答函数部分
4.2、修改FreeRTOSConfig.h
根据编译提示修改此文件,直到编译不报错。
五、测试程序
5.1、fun_task.c
#include "main.h"
#define START_TASK_PRO 1
#define START_STK_SIZE 128
TaskHandle_t StartTask_Handler;
#define TASK1_PRIO 4
#define TASK1_STK_SIZE 128
static TaskHandle_t Task1Task_Handler = NULL;
#define TASK2_PRIO 3
#define TASK2_STK_SIZE 128
static TaskHandle_t Task2Task_Handler = NULL;
void start_task(void *pvParameters);
void gui_task(void *pvParameters);
void task1(void *pvParameters);
void task2(void *pvParameters);
void task_create(void)
{
//start_task
xTaskCreate((TaskFunction_t )start_task,
(const char* )"start_task",
(uint16_t )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRO,
(TaskHandle_t* )&StartTask_Handler);
vTaskStartScheduler();
}
void start_task(void *pvParameters)
{
taskENTER_CRITICAL();
//task1
xTaskCreate((TaskFunction_t )task1,
(const char* )"task1",
(uint16_t )TASK1_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK1_PRIO,
(TaskHandle_t* )&Task1Task_Handler);
//task2
xTaskCreate((TaskFunction_t )task2,
(const char* )"task2",
(uint16_t )TASK2_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK2_PRIO,
(TaskHandle_t* )&Task2Task_Handler);
taskEXIT_CRITICAL();
vTaskDelete(StartTask_Handler);
}
//task1
void task1(void *pvParameters)
{
while (1)
{
printf("task1 run ...\r\n");
vTaskDelay(2000);
}
}
//task2
void task2(void *pvParameters)
{
while (1)
{
printf("task2 run ...\r\n");
vTaskDelay(1000);
}
}
5.2、main.c
#include "main.h"
#include "FreeRTOS.h"
void cache_enable(void);
int main(void)
{
cache_enable();
systick_config();
init_usart(115200);
task_create();
while(1)
{
}
}
void cache_enable(void)
{
/* enable i-cache */
SCB_EnableICache();
/* enable d-cache */
SCB_EnableDCache();
}
六、程序运行
程序运行后,串口输出内容
|