本文详细介绍如何移植FreeRTOS到STM32单片机上。移植操作系统是嵌入式开发的入门基础,单片机和嵌入式在物理上其实是一摸一样的,区别就是软件上嵌入式跑了操作系统而单片机没有。本文选用市场上最常见的STM32和FreeRTOS,为大家介绍如何移植操作系统到MCU上。
实时操作系统(Real-time operating system, RTOS),它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。
实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
只有“实时性”才是RTOS的最大特征,其它的都不算是。
实时运算是计算机科学中对受到“实时约束”的计算机硬件和计算机软件系统的研究,实时约束像是从事件发生到系统回应之间的最长时间限制。实时程序必须保证在严格的时间限制内响应。
实时操作系统中都要包含一个实时任务调度器,这个任务调度器与其它操作系统的最大不同是强调:严格按照优先级来分配CPU时间,并且时间片轮转不是实时调度器的一个必选项。
提出实时操作系统的概念,可以至少解决两个问题:一个是早期的CPU任务切换的开销太大,实时调度器可以避免任务频繁切换导致CPU时间的浪费;另一个是在一些特殊的应用场景中,必须要保证重要的任务优先被执行。
在这样的背景下,实时操作系统就被设计出来了,典型的实时操作系统有FreeRTOS、VxWorks,RT-Thread,uCOS,QNX,WinCE等。
由于设备性能的发展,原来很多实时性要求高的场景,已经切换到普通的操作系统了。Linux在嵌入式设备上的推广,使用实时操作系统的很多设备已经改用Linux了,因为硬件性能的提升会让系统延迟降低到一个用户可以接受的程度。
但在某些特定的场景下,比如工业自动化、机器人、航空航天、军工领域等,仍然对实时操作系统有需求,并且应该会长期存在。
由于嵌入式设备对资源,功耗很敏感,所以RTOS也具备可裁剪、低功耗、资源占用率低等特点。相对于通用的分时操作系统,如linux,Windows而言,RTOS更强调实时。
RTOS保证了在规定时间内能够完成某个任务,如果不能在指定时间完成会造成重大事故,所以必须某些场景必须使用RTOS。
FreeRTOS应该算是目前最流行的嵌入式操作系统之一,具体原因当然是因为开源,毕竟产品还是要控制成本的。FreeRTOS 十分的小巧,可以在资源有限的微控制器中运行,我们学习中最常用的STM32F103C8T6跑很多RTOS都可能因为内存受限,但FreeRTOS就不会,完全能满足我们日常的开发需求。当然了,FreeRTOS 不仅局限于在微控制器中使用。但从文件数量上来看 FreeRTOS 要比UCOSII 和 UCOSIII 小的多。
FreeRTOS最开始网站是全英的,我刚入门的时候因为英语不好,饱受折磨。现在网站已经能切换中文了,算是方便了后面学习的人。
公众号:物联网知识,后台回复:FreeRTOS源码
CSDN资源平台:
https://download.csdn.net/download/qq_44629109/87354102
官网下载:https://www.freertos.org/zh-cn-cmn-s/
将FreeRTOS相关的文件添加进来。
port.c 是 RVDS 文件夹下的 ARM_CM3 中的文件,因为 STM32F103 是 Cortex-M3 内核的,因此要选择 ARM_CM3中的 port.c 文件。heap_4.c 是 MemMang 文件夹中的。
我们把这个文件复制粘贴放进我们的项目中存放头文件的文件夹即可。FreeRTOSConfig.h是剪裁RTOS的关键,后面的学习中,还会涉及到,读者也可以在网上查一查相关内容。
当裸机开发的实时性差,资源浪费和编写困难等问题逐渐暴露出来时,RTOS就是我们首选的解决方式。我们也就从单片机工程师转变成嵌入式工程师了。本文详细介绍了如何移植FreeRTOS到STM32上,这是嵌入式入门的关键,后面会继续分享更多嵌入式相关内容。
全部0条评论
快来发表一下你的评论吧 !