打印
[应用相关]

STM32H750移植FreeRTOS

[复制链接]
1650|65
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近淘了一块STM32H750XBH6_ArtPi开发板(就是RT-thread出品),开发者完全可以基于此开发板提供的SDK进行开发(已经完全适配rtthread),但是本人还是想自己移植一下FreeRTOS。

        说干就干,让我们开始吧。

        关于FreeRTOS的资料也是一大堆,本人还是比较习惯于使用官网的资料(考虑到初学者可能刚接触FreeRTOS,对RTOS的概念可能也不太清楚,所以我这边计划后面专门出一个栏目介绍FreeRTOS系列)。


使用特权

评论回复
沙发
自动化陈稳|  楼主 | 2022-2-27 22:21 | 只看该作者
    首先从官网下载FreeRTOS源码并解压如下(我下载的是202107的版本,可能你下载时版本已经更新,不用担心直接用即可)

使用特权

评论回复
板凳
自动化陈稳|  楼主 | 2022-2-27 22:22 | 只看该作者

使用特权

评论回复
地板
自动化陈稳|  楼主 | 2022-2-27 22:25 | 只看该作者
  我们关注FreeRTOS文件夹即可(FreeRTOS-Plus里面是一些高级功能暂时用不上)

        

使用特权

评论回复
5
自动化陈稳|  楼主 | 2022-2-27 22:26 | 只看该作者

使用特权

评论回复
6
自动化陈稳|  楼主 | 2022-2-27 22:27 | 只看该作者
   上图中的include目录以及所有的.c文件就是FreeRTOS源代码,然后我们移植的时候需要这些。

        其中,

        croutine.c是协程的实现(基本不用);

        event_group.c是事件组的实现用于线程间、线程与中断间同步;

        list.c是其内部链表的实现;

        queue.c是消息队列的实现用于线程间、线程与中断间同步;其中也实现了二值信号量和计数型信号量;

        stream_buffer.c用于线程间、线程与中断间的数据通信;

        tasks.c就是任务和调度器的实现(很重要)。

        另外我们也需要portable目录下的一些文件,这些文件主要做了不同平台的适配,例如中断时的部分压栈出栈处理(有些寄存器的值是硬件自动进行的),portable文件夹里面内容如下,我们发现基于不同的编译器有对应的实现

使用特权

评论回复
7
自动化陈稳|  楼主 | 2022-2-27 22:28 | 只看该作者

使用特权

评论回复
8
自动化陈稳|  楼主 | 2022-2-27 22:29 | 只看该作者
其中MemMang里面包含了不同的动态内存分配,根据不同的场景我们需要选择合适的实现。本文我们着重讲解如何在Keil MDK下移植FreeRTOS,故需要Keil目录的内容,但其实RVDS只是Keil的别名,所以我们需要的文件在RVDS目录下。

使用特权

评论回复
9
自动化陈稳|  楼主 | 2022-2-27 22:30 | 只看该作者

使用特权

评论回复
10
自动化陈稳|  楼主 | 2022-2-27 22:32 | 只看该作者
我们的芯片为STM32H750XBH6,其是CM7内核,故我们需要如下文件

使用特权

评论回复
11
自动化陈稳|  楼主 | 2022-2-27 22:33 | 只看该作者
二、准备
        FreeRTOSv202107.00

        Keil MDK V5.34

        STM32CubeMX V6.3.0

三、实战  
        下面我们来创建一个工程,使用STM32CubeMX生成一个Keil MDK工程,在这个工程中我们添加板载的LED的GPIO配置。然后我们创建两个任务(在RTOS的世界里任务可以理解为linux系统上的进程,可以完全独立,也可以相关之间有同步,这个后面我会出FreeRTOS指南来讲解)。

        参考《手把手系列--使用STM32CubeMX生成代码工程》

        为方便学习,这边提供的已经准备好的工程给大家下载。

        我们通过STM32CubeMX生成工程为STM32H750XBH6_FreeRTOS_LED,在其目录下我们添加FreeRTOS文件夹,里面的内容即上面提到的FreeRTOS的源码部分。

使用特权

评论回复
12
自动化陈稳|  楼主 | 2022-2-27 22:33 | 只看该作者
下面我们打开Keil工程,如下

        

使用特权

评论回复
13
自动化陈稳|  楼主 | 2022-2-27 22:35 | 只看该作者
我们先直接编译一下


通过STM32CubeMX生成的工程没有任何问题。那下面我们在工程内加入FreeRTOS

相关内容。

使用特权

评论回复
14
自动化陈稳|  楼主 | 2022-2-27 22:35 | 只看该作者
    首先我们需要添加分组FreeRTOS/kernal/src、FreeRTOS/kernal/port、FreeRTOS/heap

使用特权

评论回复
15
自动化陈稳|  楼主 | 2022-2-27 22:36 | 只看该作者
我们需要添加头文件路径\

使用特权

评论回复
16
自动化陈稳|  楼主 | 2022-2-27 22:37 | 只看该作者
这个时候我们直接编译,则会报告如下错误

使用特权

评论回复
17
自动化陈稳|  楼主 | 2022-2-27 22:37 | 只看该作者
错误信息指明FreeRTOSConfig.h文件不存在。

使用特权

评论回复
18
自动化陈稳|  楼主 | 2022-2-27 22:38 | 只看该作者
   由于FreeRTOS是一个可裁剪的OS,那我们在使用时就需要做一些配置,这个文件就是用来配置FreeRTOS的,那FreeRTOS下载包里面肯定有这个配置文件。

        从FreeRTOS源码目录拷贝这个文件到工程目录下并添加到Keil MDK分组中,因为STM32H750属于CM7类型,所以我们直接使用STM32F7系列的也可以。





使用特权

评论回复
19
自动化陈稳|  楼主 | 2022-2-27 22:39 | 只看该作者

使用特权

评论回复
20
自动化陈稳|  楼主 | 2022-2-27 22:45 | 只看该作者
我们再次编译一下,发现还是有问题,如下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

1200

帖子

1

粉丝