STM32
直播中

赵淑洁

7年用户 913经验值
私信 关注
[问答]

怎样将FreeRTOS的源码移植到STM32F103上去

什么是FreeRTOS?
怎样将FreeRTOS的源码移植到STM32F103上去?

回帖(1)

魏双艳

2021-10-9 15:28:53
  一、简介
  FreeRTOS 是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。FreeRTOS 提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
  FreeRTOS 是用 C 和汇编来写的,其中绝大部分都是用 C 语言编写的,只有极少数的与处理器密切相关的部分代码才是用汇编写的,FreeRTOS 结构简洁,可读性很强!最主要的是非常适合初次接触嵌入式实时操作系统学生、嵌入式系统开发人员和爱好者学习。
  最新版本 V9.0.0(2016年),尽管现在 FreeRTOS 的版本已经更新到 V10.4.1 了,但是我们还是选择 V9.0.0,因为内核很稳定,并且网上资料很多,因为 V10.0.0 版本之后是亚马逊收购了FreeRTOS之后才出来的版本,主要添加了一些云端组件,一般采用 V9.0.0 版本足以。
  二、目录结构
  FreeRTOS 包含:
  Demo 例程
  Source 内核源码
  
  Source 包含:
  include 通用头文件
  portable 通用C文件
  croutine 协程
  list 列表
  queue 队列
  tasks 任务
  timers 软件定时器
  
  portable 包含:
  Keil 同 RVDS
  MemMang 内存管理
  RVDS
  
  MemMang 包含:
  5个 heap 文件
  在移植时必须使用其中一个,因为 FreeRTOS 在创建对象的时候使用的是动态内存分配,而这些动态内存分配的函数则在这几个文件里面实现,不同的分配算法导致不同的效率和结果,一般用 heap4.c。
  
  RVDS 包含:
  Cortex-M0、M3、M4、M7 等内核的单片机接口文件
  port.c 接口文件
  portmacro.h 头文件,主要是一些数据类型和宏定义
  
  
  三、移植过程
  3.1 提取最简源码
  首先在 STM32 裸机工程根目录下新建一个文件夹,命名 FreeRTOS
  
  然后在 FreeRTOS 文件夹下新建三个空文件夹,include、port、src
  
  打开 FreeRTOS V9.0.0 源码在 “FreeRTOSv9.0.0FreeRTOSSource” 目录下找到所有的 ‘.c 文件’,将它们拷贝到我们新建的 src 文件夹中
  
  打开 FreeRTOS V9.0.0 源码,在“FreeRTOSv9.0.0FreeRTOSSourceportable” 目
  录下找到 “MemMang” 夹与 “RVDS” 文件夹,将它们拷贝到我们新建的 port 文件夹中
  
  打开 FreeRTOS V9.0.0 源码,在 “FreeRTOSv9.0.0 FreeRTOSSource” 目录下找到 “include” 文件夹,它是我们需要用到 FreeRTOS 的一些头文件,将它直接拷贝到我们新建的 include 文件夹中
  
  3.2 拷贝FreeRTOSConfig.h文件到User文件夹
  FreeRTOSConfig.h 文件是 FreeRTOS 的工程配置文件,因为 FreeRTOS 是可以裁剪的实时操作内核,应用于不同的处理器平台,用户可以通过修改这个 FreeRTOS 内核的配置头文件来裁剪 FreeRTOS 的功能,所以我们把它拷贝一份放在 User 这个文件夹下面。
  打开 FreeRTOSv9.0.0 源码,在 “FreeRTOSv9.0.0FreeRTOSDemo” 文件夹下面找到 “CORTEX_STM32F103_Keil” 这个文件夹,在其根目录下找到这个 “FreeRTOSConfig.h” 文件,然后拷贝到我们工程的 User 文件夹下即可
  
  3.3 添加源码到工程组文件夹
  接下来我们在 mdk 里面新建 FreeRTOS/src 和 FreeRTOS/port 两个组文件夹,其中 FreeRTOS/src 用于存放 src 文件夹的内容,FreeRTOS/port 用于存放 portMemMang 文件夹与 portRVDSARM_CM3 文件夹的内容。
  然后我们将工程文件中 FreeRTOS 的内容添加到工程中去,按照已经新建的分组添加我们的 FreeRTOS 工程源码。
  在 FreeRTOS/port 分组中添加 MemMang 文件夹中的文件只需选择其中一个即可,我们选择 “heap_4.c”,这是 FreeRTOS 的一个内存管理源码文件。
  然后在 User 分组中添加我们 FreeRTOS 的配置文件 “FreeRTOSConfig.h”
  
  3.4 指定头文件路径
  FreeRTOS 的源码已经添加到开发环境的组文件夹下面,编译的时候需要为这些源文件指定头文件的路径,不然编译会报错。FreeRTOS 的源码里面只有 FreeRTOSinclude和FreeRTOSportRVDSARM_CM3 这两个文件夹下面有头文件,只需要将这两个头文件的路径在开发环境里面指定即可。同时我们还将 FreeRTOSConfig.h 这个头文件拷贝到了工程根目录下的 User 文件夹下,所以 User 的路径也要加到开发环境里面。
  
  3.5 修改FreeRTOSConfig.h
  FreeRTOSConfig.h 是直接从 demo 文件夹下面拷贝过来的,该头文件对裁剪整个 FreeRTOS 所需的功能的宏均做了定义,有些宏定义被使能,有些宏定义被失能,一开始我们只需要配置最简单的功能即可。要想随心所欲的配置 FreeRTOS 的功能,我们必须对这些宏定义的功能有所掌握。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分