【GD32/STM32】FreeRtos移植

这篇具有很好参考价值的文章主要介绍了【GD32/STM32】FreeRtos移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【GD32】FreeRtos移植以及使用方法

移植过程概述

​ (1)下载FreeRtos源码包

​ FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

​ (2)将源文件添加至工程

​ (3)将GD32中的三个中断交由FreeRtos接管

​ (4)配置管理FreeRTOS.h文件

​ (5)FreeRtos基本使用方法

FreeRtos源码包

源码包结构

gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32

1.Demo中存放的是各种开发环境以及芯片的演示程序,

2.Source文件夹存放的是FreeRtos的源代码文件。

gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
include文件夹:内核通用头文件

portable文件夹:编译器+处理器适配文件

其他大部分为内核通用源文件:

​ croutine.c 内核通用源文件,用于实现携程

​ event_groups 内核通用源文件,用于实现事件组,属于可选文件

​ list.c 内核通用源文件,用于实现链表数据结构,是必须参加编译的文件

​ queue.c 内核通用源文件,用于实现IPC队列,是必须参加编译的文件

​ stream_buffer.c 内核通用源文件,用于实现数据流缓冲,属于可选文件

​ tasks.c 内核通用源文件,用于实现多任务,是必须参加编译的文件

​ timers.c 内核通用源文件,用于实现软件定时器,属于可选文件

代码移植

1.为了减少裁剪的过程和方便后面拓展功能,将内核通用源文件全部加入到工程中。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32

2.在portable文件夹中选择
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
这里以使用KEIL为例,需要使用到的文件夹包括Keil、MemMang和RVDS,实际上keil里面也没有东西,这里只是说明使用keil平台。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
MemMang里面是堆内存管理文件使用时根据需要进行移植,不同的heap有不同的特性,我们通常选用的heap_4,一个堆内存池的方案。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
RVDS中存放的是处理器适配文件port.c,例如我们使用的GDF303是Cortex-M4架构,所以移植ARM_CM4F中的port.c文件。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32

实践操作

​ 创建工程模板,我们这里介绍FreeRtos的移植过程所以省略工程模板的创建。

1、创建文件夹

在工程文件夹中创建一个文件夹用来存放FreeRtos的源文件。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
将前面所说的内核通用代码、内存管理和适配文件复制过来,为了让思路更加清晰,将FREERTOS文件夹下再创建三个文件夹
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
CORE里面存放内核通用代码,下面再创建两个文件夹用来存放头文件和源文件
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
将source中的七个源文件,放入到SRC中,如下所示几个文件
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
再将头文件放入到INC中,这里的头文件来自FreeRtos源码中的include
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
然后移植内存管理文件,在源码包中portable目录下
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
内存管理文件
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
选择堆内存管理方案,创建一个内存池
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
把这个文件放入到我们创建的MEM文件夹中。
然后就是移植RVDS里面的文件,同样在protable下面
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
根据自己芯片所使用的架构进行选择
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
把这里面的源文件以及头文件加入到创建的PORT文件夹中。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
知道我们需要移植的三部分就可以快速将需要的文件移植过来,内核源文件、内存管理文件、适配文件。当然最后还有一个文件需要我们从另外的地方移植过来,也是必须移植的文件,只有这个文件是不包含在include里面的,它是一个FreeRtos的配置文件。这个文件我们去源码包里面,他所提供的例程中复制一个过来。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
在Demo里面找一个工程
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
因为我使用的是GD32F303然后使用keil平台,所以我找一个STM32的Keil工程
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
将里面的FreeRtosConfig.h文件复制出来,放入到我们刚才创建的CORE文件夹的INC中
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
这里我们就将需要的文件移植过来了。

2.KEIL工程中添加文件

按照我们刚才分类的方式,再工程里面创建三个文件夹,并将文件夹下面对应的文件添加到工程中
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
将头文件的路径包含进去
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
到这里已经可以成功编译了,但是要正常跑起来的话还需要将几个中断函数交由FreeRtos。

3.中断重定位

SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用于在操作系统之上的软件开发中。

这几个中断函数无论是在STM32还是GD32中的gd32f303x_it.c中以及写定义好的,但是这几个函数的定义与FreeRtos中定义的不同,所以我们还需要将这几个函数更换成FreeRtos中使用的函数。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32
将上面三个函数注释以后,我们打开FreeRTOS.h,然后加入这三个宏定义。
gd32a503rc + freertos,STM32及GD32基础夯实,单片机,stm32

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

编译完成后可以正常可以创建任务,并正常运行。

创建任务并启动任务调度
#include "FreeRTOS.h"
#include "task.h"
#include <stdio.h>
#include <string.h>

#define LED1_TASK_PRIO    ( tskIDLE_PRIORITY + 2 )
void LED1_task(void * pvParameters);
void led_flash(uint32_t time_ms);

void init_task_create(void)
{
	xTaskCreate(LED1_task, "LED1", configMINIMAL_STACK_SIZE, NULL, LED1_TASK_PRIO, NULL);
	/* start scheduler */
    vTaskStartScheduler();
}

void LED1_task(void * pvParameters)
{
	while(1) {
		led_flash(500);
	}
}

到这里移植完成可以正常使用,移植的关键就在于三部分代码的移植和FreeRtosConfig.h的移植,还有中断的修改。文章来源地址https://www.toymoban.com/news/detail-807971.html

到了这里,关于【GD32/STM32】FreeRtos移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32或gd32移植libcanard实现UAVCAN协议

    点击我下载 自己上传的点击下载 我自己是使用rt-thread操作系统移植的。但是不局限与操作系统,裸机也可以。 canard.node_id 设置本机id canardTxInit(1536, CANARD_MTU_CAN_CLASSIC); 初始化发送队列,1536为大小。 CANARD_MTU_CAN_CLASSIC 表示使用的是普通的can,数据最大为8个字节, CANARD_MTU_CA

    2024年02月09日
    浏览(69)
  • 【FreeRTOS】FreeRTOS移植stm32详细步骤介绍

    我在查找FreeRTOS移植的相关教程特别少,所以想非常详细的介绍FreeRTOS移植stm32详细步骤,包括源码的下载,源码介绍,系统移植,代码验证等,每一步都有对应的介绍和解释,希望可以帮助到你们。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分

    2024年02月08日
    浏览(47)
  • 单片机移植freemodbus主机(STM32、GD32、瑞萨、国民技术等)

    从github下载:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 无法下载或者下载太慢可以用资源下载,无需积分。freeModbus主机源码下载 示例代码 参考从机代码创建 将FreeModbus主机源代码拷贝到工程中间件-第三方库-freemodbus源码库:即MiddlewaresThird_PartyFreeModbusMaster文件夹中。

    2024年02月11日
    浏览(47)
  • 手动移植FreeRTOS到STM32

            前言:这只是一篇FreeRTOS入门的文章,用于自己忘记的时候回看复习。本文是采用CubeMX生成的STM32F407的基础工程后来进行移植的。 一、FreeRTOS简介 1.什么是实时操作系统         实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、

    2024年02月21日
    浏览(35)
  • STM32FreeRTOS操作系统移植

    移植好的FreeRTOS模板: 链接:https://pan.baidu.com/s/1_87VQAWXUl4jTqSCZ0MFjw?pwd=dw52  提取码:dw52 1.在工程中新建FreeRTOS文件夹 2.把源码source里面的文件全部粘贴进FreeRTOS文件夹中  3.在portable文件中只保留一下文件,其余删除  4.新建如下两个文件夹  5.在FreeRTOS_CODE目录下添加以下文件

    2024年02月08日
    浏览(46)
  • STM32移植FreeRTOS操作系统

    一、FreeRTOS源码下载 (1)移植钱得准备前菜对吧,我们先来去官网瞄一瞄 网址:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions 第一步:点击下载FreeRTOS 第二步:选择版本下载(我选择稳定版本) 注:我们下载的稳定版本不包含DEMO例

    2024年01月17日
    浏览(41)
  • KEIL环境stm32移植FreeRTOS

    准备工作:keil软件,一份点灯代码,FreeRTOS源码。 1.FreeRTOS源码下载 直接在官网下载    FreeRTOS - Free RTOS Source Code Downloads, the official FreeRTOS zip file release download 2.解压资源 打开FreeRTOS文件夹 会用到的是Demo文件夹和Source文件夹。 Demo文件夹里面就是 FreeRTOS的相关例程,里面有各

    2024年02月03日
    浏览(39)
  • stm32移植freertos报错keil

    *** Using Compiler \\\'V5.06 update 7 (build 960)\\\', folder: \\\'d:Keil_v5ARMARMCCBin\\\' compiling main.c... .USERFreeRTOSConfig.h(79): error:  #130: expected a \\\"{\\\"       extern uint32_t SystemCoreClock; .FreeRTOSportableportmacro.h(210): warning:  #12-D: parsing restarts here after previous syntax error   { .FreeRTOSportableportmacro.h(215): error:

    2024年02月10日
    浏览(43)
  • GD32F470 移植STM32F429工程 Keil调试笔记

    keil版本:5.25 安装 GigaDevice.GD32F4xx_DFP.3.0.4.pack Keil.STM32F4xx_DFP.2.15.0.pack 1、原项目为STM32F429 工程,切换到GD32F470 只需在 Options for Target\\\"“对话框的Device菜单中选中“GD32F470II”,重新编译即可,一般不会有编译错误。 2、将项目工程在切换回STM32F429,在 Options for Target”\\\"对话框的D

    2024年02月09日
    浏览(50)
  • STM32F407 移植 FreeRTOS

    本实验是基于正点原子 STM32F407ZG 探索者开发板完成的,所以需要一个STM32F407ZG 探索者开发板 用于移植的基础工程(下面会讲) FreeRTOS源码(下面会讲) 本实验所有用到的代码:基于正点原子STM32F407的FreeRTOS移植工程.zip 1.1 移植前准备 1.1.1 基础工程 由于后续需要用到 LED、

    2024年02月08日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包