1732|9

441

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【兆易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();
}

 

六、程序运行

 

程序运行后,串口输出内容

 

最新回复

特地登录来感谢一下,我的移植一直卡在  configASSERT( ucMaxPriorityValue == ( configKERNEL_INTERRUPT_PRIORITY & ucMaxPriorityValue ) ); 这句话这里动不了,然后怀疑就是 Config.h这个文件,然后移植demo里面的M7的一直不行,然后看到 你成功了,然后借过来用一下,就成了,现在在找原因,起码能成了     详情 回复 发表于 2024-12-20 15:41
点赞 关注
 
 

回复
举报

7067

帖子

11

TA的资源

版主

沙发
 
大佬的RTOS用得非常溜呀,太强了!GD本身有freertos的示例,移植完后对比一下,有什么区别。

点评

这款例程没有找到,就直接移植了。  详情 回复 发表于 2024-5-12 15:58
 
 
 

回复

441

帖子

3

TA的资源

纯净的硅(高级)

板凳
 
lugl4313820 发表于 2024-5-12 15:05 大佬的RTOS用得非常溜呀,太强了!GD本身有freertos的示例,移植完后对比一下,有什么区别。

这款例程没有找到,就直接移植了。

 
 
 

回复

7067

帖子

11

TA的资源

版主

4
 

  楼主大佬,这是什么原因呀,是GD的产品有问题,还是freertos有问题,这任务调度有问题呀,是不是需要复现一下,提交给GD,这可是大BUG呀。

点评

操作问题。应该是测试过程中开发板重新上电了,串口助手接收数据没有清空。有时间再试下。  详情 回复 发表于 2024-5-13 09:19
 
 
 

回复

7067

帖子

11

TA的资源

版主

5
 

提交这样的报告,对freertos,也对GD产品有重大发现,太强了!

image.png (312.42 KB, 下载次数: )

image.png

点评

这两个任务设置的时间周期是1S和2S,测试中间有重新上电,造成串口打印结果有重复,我测试完成后直接截图了,我再试下。  详情 回复 发表于 2024-5-13 08:29
 
 
 

回复

441

帖子

3

TA的资源

纯净的硅(高级)

6
 
lugl4313820 发表于 2024-5-13 07:05 提交这样的报告,对freertos,也对GD产品有重大发现,太强了!

这两个任务设置的时间周期是1S和2S,测试中间有重新上电,造成串口打印结果有重复,我测试完成后直接截图了,我再试下。

 
 
 

回复

441

帖子

3

TA的资源

纯净的硅(高级)

7
 
lugl4313820 发表于 2024-5-13 07:04   楼主大佬,这是什么原因呀,是GD的产品有问题,还是freertos有问题,这任务调度有问题呀,是不是需 ...

操作问题。应该是测试过程中开发板重新上电了,串口助手接收数据没有清空。有时间再试下。

 
 
 

回复

441

帖子

3

TA的资源

纯净的硅(高级)

8
 

重新测试了下,没有出现上面的情况。

 

 

程序源码:

gd32h759_freertos_prj_20240513.rar (3.14 MB, 下载次数: 21)

 

 
 
 

回复

7067

帖子

11

TA的资源

版主

9
 
TL-LED 发表于 2024-5-13 12:42 重新测试了下,没有出现上面的情况。     程序源码:  

收到,大佬以后测试时注意一下,要不会给GD的产品产生一些错觉。

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 

特地登录来感谢一下,我的移植一直卡在 

configASSERT( ucMaxPriorityValue == ( configKERNEL_INTERRUPT_PRIORITY & ucMaxPriorityValue ) );

这句话这里动不了,然后怀疑就是 Config.h这个文件,然后移植demo里面的M7的一直不行,然后看到 你成功了,然后借过来用一下,就成了,现在在找原因,起码能成了

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表