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

发布时间:2024-09-03  

引言

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


介绍

什么是 RTOS?

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



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


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


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


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


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


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


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


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


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

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


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


FreeRTOS

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


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


具体步骤

首先准备一个基础项目,我们的点灯或者串口收发这种简单的程序就行,甚至连点灯都没有的项目也可以。毕竟操作系统也要依托于一个MCU的项目。

获取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上,这是嵌入式入门的关键,后面会继续分享更多嵌入式相关内容。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>