【转】FreeRTOS通用移植,以keil和IAR工程 M7核为例

2024-06-21 12:12

本文主要是介绍【转】FreeRTOS通用移植,以keil和IAR工程 M7核为例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

keil:

IAR


keil:

原文在https://bbs.eeworld.com.cn/thread-1281875-1-1.html

本篇讲述移植FreeRTOS,并创建运行一个任务,对象芯片为M7系列的兆易创新GD32H7xx系列。

一.准备工作

1.下载FreeRTOS源码官网 http://www.freertos.org/ 或者托管网站FreeRTOS Real Time Kernel (RTOS) - Browse /FreeRTOS at SourceForge.net

2.解压,选取Source下源文件

图1:FreeRTOS移植使用到的资源文件

二.移植FreeRTOS

1.在串口打印工程添加如下源文件

图2:工程添加FreeRTOS源文件

2.添加头文件路径

图3:添加FreeRTOS头文件路径

3.在gd32h7xx_it.c屏蔽SVC_Handler和PendSV_Handler函数,修改SysTick_Handler,如下:

复制

 
/*  gd32h7xx_it.c  */#include "gd32h7xx_it.h"
#include "systick.h"#include "FreeRTOS.h"
#include "task.h" extern void xPortSysTickHandler( void );/*
......
*//*!\brief      this function handles SVC exception\param[in]  none\param[out] none\retval     none
*/
//void SVC_Handler(void)
//{
//    /* if SVC exception occurs, go to infinite loop */
//    while(1) {
//    }
//}/*!\brief      this function handles PendSV exception\param[in]  none\param[out] none\retval     none
*/
//void PendSV_Handler(void)
//{
//    /* if PendSV exception occurs, go to infinite loop */
//    while(1) {
//    }
//}/*!\brief      this function handles SysTick exception\param[in]  none\param[out] none\retval     none
*/
void SysTick_Handler(void)
{delay_decrement();if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行{xPortSysTickHandler();        }
}

      PendSV_Handler()与 SVC_Handler()这两个很重要的函数 在 port.c 文件中已经实现 xPortPendSVHandler()与 vPortSVCHandler()函 数.SysTick_Handler提供系统节拍。

4.在FreeRTOSConfig.h配置。这里定义下HEAP_SIZE等,留意下SystemCoreClock为系统时钟。

/* Ensure stdint is only used by the compiler, and not the assembler. */
#if  defined(__ICCARM__) || defined(__CC_ARM) || defined(__TASKING__) || defined(__GNUC__)#include <stdint.h>extern uint32_t SystemCoreClock;
#endif#define configTOTAL_HEAP_SIZE			( ( size_t ) ( 30 * 1024 ) )/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
//#define xPortSysTickHandler SysTick_Handler

5.创建任务,启动调度器


void user_task(void *pvParameters)
{while(1){printf("Run  user_task\r\n");vTaskDelay(1000);}
}int main(void)
{/*...*//* init task */xTaskCreate(user_task, "INIT", configMINIMAL_STACK_SIZE * 2, NULL, 3, NULL);/* start scheduler */vTaskStartScheduler();while(1);
}

6.编译配置,在C/C++选项卡下,去掉勾选Execute-only Code,如下

图4:编译配置

三.编译烧录测验

      编译烧录后,打开串口工具,按复位键,可看到任务创建成功并运行。

图5:FreeRTOS系统运行日志

     至此,实现了开发板MCU GD32H759IMK6的FreeRTOS系统移植。        

IAR

iar的移植,和keil一样,唯一的区别就是port.c这里,如果按照keil的路径选择编译不成功。

iar的选择应该如下:

选择IAR路径下的,同时将portasm.s也添加到工程里,这里面实现了一些底层的东西,不然链接的时候一堆extern 声明的显示找不到定义。

注意:portasm.s是汇编语言,需要在汇编的工程选项中添加头文件路径

这篇关于【转】FreeRTOS通用移植,以keil和IAR工程 M7核为例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081192

相关文章

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

FreeRTOS学习笔记(六)队列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列的基本内容1.1 队列的引入1.2 FreeRTOS 队列的功能与作用1.3 队列的结构体1.4 队列的使用流程 二、相关API详解2.1 xQueueCreate2.2 xQueueSend2.3 xQueueReceive2.4 xQueueSendFromISR2.5 xQueueRecei

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

j2EE通用jar包的作用

原文:http://blog.sina.com.cn/s/blog_610901710101kx37.html IKIKAnalyzer3.2.8.jar // 分词器 ant-junit4.jar // ant junit antlr-2.7.6.jar // 没有此包,hibernate不会执行hql语句。并且会报NoClassDefFoundError: antlr

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )