0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将FreeRTOS移植到STM32单片机上

汽车电子技术 来源:物联网知识 作者: 跋扈洋 2023-01-20 17:36 次阅读

引言

本文详细介绍如何移植FreeRTOSSTM32单片机上。移植操作系统嵌入式开发的入门基础,单片机和嵌入式在物理上其实是一摸一样的,区别就是软件上嵌入式跑了操作系统而单片机没有。本文选用市场上最常见的STM32和FreeRTOS,为大家介绍如何移植操作系统到MCU上。

介绍

什么是 RTOS

实时操作系统(Real-time operating system, RTOS),它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。

实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。

只有“实时性”才是RTOS的最大特征,其它的都不算是。

实时运算是计算机科学中对受到“实时约束”的计算机硬件和计算机软件系统的研究,实时约束像是从事件发生到系统回应之间的最长时间限制。实时程序必须保证在严格的时间限制内响应。

实时操作系统中都要包含一个实时任务调度器,这个任务调度器与其它操作系统的最大不同是强调:严格按照优先级来分配CPU时间,并且时间片轮转不是实时调度器的一个必选项。

提出实时操作系统的概念,可以至少解决两个问题:一个是早期的CPU任务切换的开销太大,实时调度器可以避免任务频繁切换导致CPU时间的浪费;另一个是在一些特殊的应用场景中,必须要保证重要的任务优先被执行。

在这样的背景下,实时操作系统就被设计出来了,典型的实时操作系统有FreeRTOS、VxWorksRT-ThreaduCOS,QNX,WinCE等。

由于设备性能的发展,原来很多实时性要求高的场景,已经切换到普通的操作系统了。Linux在嵌入式设备上的推广,使用实时操作系统的很多设备已经改用Linux了,因为硬件性能的提升会让系统延迟降低到一个用户可以接受的程度。

但在某些特定的场景下,比如工业自动化机器人、航空航天、军工领域等,仍然对实时操作系统有需求,并且应该会长期存在。

为什么嵌入式设备往往使用RTOS?

由于嵌入式设备对资源,功耗很敏感,所以RTOS也具备可裁剪、低功耗、资源占用率低等特点。相对于通用的分时操作系统,如linux,Windows而言,RTOS更强调实时。

RTOS保证了在规定时间内能够完成某个任务,如果不能在指定时间完成会造成重大事故,所以必须某些场景必须使用RTOS。

FreeRTOS

FreeRTOS应该算是目前最流行的嵌入式操作系统之一,具体原因当然是因为开源,毕竟产品还是要控制成本的。FreeRTOS 十分的小巧,可以在资源有限的微控制器中运行,我们学习中最常用的STM32F103C8T6跑很多RTOS都可能因为内存受限,但FreeRTOS就不会,完全能满足我们日常的开发需求。当然了,FreeRTOS 不仅局限于在微控制器中使用。但从文件数量上来看 FreeRTOS 要比UCOSII 和 UCOSIII 小的多。

FreeRTOS最开始网站是全英的,我刚入门的时候因为英语不好,饱受折磨。现在网站已经能切换中文了,算是方便了后面学习的人。

具体步骤

  1. 首先准备一个基础项目,我们的点灯或者串口收发这种简单的程序就行,甚至连点灯都没有的项目也可以。毕竟操作系统也要依托于一个MCU的项目。
  2. 获取FreeRTOS系统源码,两种方法。
  • 公众号:物联网知识,后台回复:FreeRTOS源码

  • CSDN资源平台:

    https://download.csdn.net/download/qq_44629109/87354102

  • 官网下载:https://www.freertos.org/zh-cn-cmn-s/

微信截图_20230105161930.png

微信截图_20230105161930.png

  1. 解压我们下载的文件,我们进入FreeRTOSv202112.00,之后进入FreeRTOS,再后进入吧Source文件。一会我们需要用到的文件主要就在这里。

微信截图_20230105161930.png

微信截图_20230105161930.png

  1. 我们在我们准备的项目中创建一个文件夹FreeRTOS,将上面一步的文件中的内容复制到刚创建的FreeRTOS中。

微信截图_20230105161930.png

  1. 进行剪裁,portable 文件夹,我们只需要留下 keil、MemMang 和 RVDS这三个文件夹,其他的都可以删除掉。
  2. 向工程分组中添加文件,创建两个组,分别是FreeRTOS_CORE和FreeRTOS_Portable。

微信截图_20230105161930.png

将FreeRTOS相关的文件添加进来。

微信截图_20230105161930.png

port.c 是 RVDS 文件夹下的 ARM_CM3 中的文件,因为 STM32F103 是 Cortex-M3 内核的,因此要选择 ARM_CM3中的 port.c 文件。heap_4.c 是 MemMang 文件夹中的。

  1. 添加头文件,我们将FreeRTOS相关的头文件添加进项目。

微信截图_20230105161930.png

  1. 头文件路径添加完成以后编译一下,看看有没有什么错误,结果会发现提示打不开“FreeRTOSConfig.h”这个文件,因为我们还没添加这个文件。这个文件最好是自己编写,当然官方也给我提供了一些例程。打开我们最开始下载的FreeRTOS源码,里面的Deme文件夹中有一个CORTEX_STM32F103_Keil文件夹,我们可以看到,里面是有这个.h文件的。

微信截图_20230105161930.png

我们把这个文件复制粘贴放进我们的项目中存放头文件的文件夹即可。FreeRTOSConfig.h是剪裁RTOS的关键,后面的学习中,还会涉及到,读者也可以在网上查一查相关内容。

  1. 我们编译一下我们的项目,看看是否出现错误,如果出现错误就按照错误改正就好了,一般情况下不会出现什么错误,如果有错,绝大多数都是因为FreeRTOSConfig.h的配置问题,因为问题种类多样,这里就不一一列举,大家可以在网上搜索,我也会总结移植常遇到的问题和解决方法,后面再写一篇推文给大家分享。
  2. 移植成功,大家可以动手试试了。

微信截图_20230105161930.png

总结

当裸机开发的实时性差,资源浪费和编写困难等问题逐渐暴露出来时,RTOS就是我们首选的解决方式。我们也就从单片机工程师转变成嵌入式工程师了。本文详细介绍了如何移植FreeRTOS到STM32上,这是嵌入式入门的关键,后面会继续分享更多嵌入式相关内容。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620833
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288438
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61347
收藏 人收藏

    评论

    相关推荐

    如何将freemodbus移植stm32平台

    modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。这里详细说下如何将freemodbus移植stm32平台。我之前下载的
    发表于 08-16 06:59

    FreeRTOS系统在STM32系列单片机移植

    STM32F103C8T6及其系列的FreeRTOS移植本文所提到的所有软件、驱动、代码百度参考自正点原子手册。1.前言​嵌入式系统是实时性强、宏观上多线程运行、且在单片机上运行的操作
    发表于 08-17 09:15

    FreeRTOS移植STM32F103中的步骤

    目录一、FreeRTOS的介绍二、FreeRTOS移植STM32F103中的步骤1.前期准备
    发表于 08-24 07:26

    如何将STM32移植GD32芯片上

    GD32芯片内部flash同STM32有哪些区别?如何将STM32移植GD32芯片上?
    发表于 09-23 09:31

    FreeRTOS系统在STM32单片机上是怎样去移植

    FreeRTOS的主要特性有哪些呢?FreeRTOS系统在STM32单片机上是怎样去移植的?
    发表于 11-18 06:54

    怎样FreeRTOS移植STM32上去呢

    怎样FreeRTOS移植STM32上去呢?有哪些移植步骤?
    发表于 11-29 07:57

    STM32不同型号单片机keil工程移植方法

    STM32系列单片机如果库函数开发的话,那么不同型号单片机的工程是可以直接移植的。这样的话如果项目中更换了芯片,工程就可以直接移植过去,不用
    发表于 11-29 06:41

    如何将FreeRTOS实时操作系统移植STM32单片机

    前言本文主要讲解如何将FreeRTOS实时操作系统移植STM32单片机中,在本文之前已经基于M
    发表于 01-11 08:15

    如何将hex下载到单片机上

    如何将hex下载到单片机上
    发表于 01-19 07:26

    如何将FreeRTOS移植stm32上呢

    目录一、FreeRTOS介绍1、初识FreeRTOS,什么是 FreeRTOS2、FreeRTOS的特点二、FreeRTOS
    发表于 02-10 06:01

    如何将FreeMODBUS协议栈移植AT32F43x单片机

    本应用笔记介绍了如何将FreeMODBUS协议栈移植AT32F43x单片机方法。本文档提供的源代码演示了使用Modbus的应用程序。单片机
    发表于 10-26 06:18

    uip在单片机上移植精讲

    uip在单片机上移植精讲,内容包括基于单片机的网络编程概述、uIP协议栈分析、网络芯片的驱动等等
    发表于 03-01 17:48 11次下载

    STM32不同型号单片机keil工程移植说明

    STM32系列单片机如果库函数开发的话,那么不同型号单片机的工程是可以直接移植的。这样的话如果项目中更换了芯片,工程就可以直接移植过去,不用
    发表于 11-19 11:36 14次下载
    <b class='flag-5'>STM32</b>不同型号<b class='flag-5'>单片机</b>keil工程<b class='flag-5'>移植</b>说明

    转发:stm32 移植 freertos

    转发:stm32 移植 freertos
    发表于 11-20 12:36 14次下载
    转发:<b class='flag-5'>stm32</b> <b class='flag-5'>移植</b> <b class='flag-5'>freertos</b>

    FreeRTOS移植—基于STM32

    FreeRTOS移植—基于STM32
    发表于 12-04 12:51 18次下载
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>移植</b>—基于<b class='flag-5'>STM32</b>