移植FreeRTOS到STM32
创始人
2024-05-03 12:30:11
0

移植FreeRTOS到STM32单片机上

  • 引言
  • 介绍
    • 什么是 RTOS?
    • 为什么嵌入式设备往往使用RTOS?
    • FreeRTOS
  • 具体步骤
  • 总结

引言

本文详细介绍如何移植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最开始网站是全英的,我刚入门的时候因为英语不好,饱受折磨。现在网站已经能切换中文了,算是方便了后面学习的人。

具体步骤

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

  • CSDN资源平台:FreeRTOS源码(最新)-嵌入式文档类资源-CSDN文库

  • 官网下载:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

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


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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJGKbvQN-1672372740060)(image-20221230110308042.png)]

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

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

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

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

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

总结

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

相关内容

热门资讯

开源电脑安卓系统排行,探索自由... 亲爱的电脑爱好者们,你是否曾想过,在电脑的世界里,也能体验到安卓系统的便捷与乐趣?没错,这就是今天我...
如何清空相册安卓系统,轻松恢复... 手机里的相册是不是越来越满,看着那些堆积如山的照片,是不是有点头疼呢?别急,今天就来教你怎么在安卓系...
安卓系统要停止更新,拥抱新变革 你知道吗?最近有个大消息在安卓圈里炸开了锅!安卓系统,这个陪伴我们多年的老朋友,竟然要停止更新了!这...
安卓系统怎样强行关机,安卓系统... 手机突然卡壳了,是不是又想强行关机了?别急,今天就来教你安卓系统怎样强行关机,让你轻松应对各种突发状...
安卓系统如何删除桌面,轻松删除... 手机桌面乱糟糟的,是不是感觉像你的房间一样,东西堆得有点多?别急,今天就来教你怎么给安卓系统的桌面来...
安卓系统怎么发英语,Andro... 你有没有想过,在安卓系统上发送英语信息竟然也能变得如此简单有趣?没错,就是那种轻松自如,仿佛英语是你...
最早期的安卓系统,揭秘最早期安... 亲爱的读者,你是否曾好奇过,那个陪伴我们手机成长的安卓系统,它的起源究竟是怎样的呢?今天,就让我们一...
安卓双系统添加应用,轻松实现多... 你有没有想过,你的安卓手机里可以同时运行两个系统呢?听起来是不是很酷?想象一边是熟悉的安卓系统,一边...
pipo安卓进系统慢,探究pi... 最近是不是发现你的Pipo安卓系统更新或者运行起来特别慢?别急,今天就来给你好好分析分析这个问题,让...
怎样使用安卓手机系统,安卓手机... 你有没有发现,安卓手机已经成为我们生活中不可或缺的一部分呢?从早晨闹钟响起,到晚上睡前刷剧,安卓手机...
双系统安卓安装caj,轻松实现... 你有没有想过,你的安卓手机里装上双系统,是不是就能同时享受安卓和Windows系统的乐趣呢?没错,这...
安卓使用ios系统教程,安卓用... 你是不是也和我一样,对安卓手机上的iOS系统充满了好奇?想要体验一下苹果的优雅和流畅?别急,今天我就...
安卓系统gps快速定位,畅享便... 你有没有遇到过这样的情况:手机里装了各种地图导航软件,但每次出门前都要等上好几分钟才能定位成功,急得...
安卓手机系统更新原理,原理与流... 你有没有发现,你的安卓手机最近是不是总在提醒你更新系统呢?别急,别急,让我来给你揭秘一下安卓手机系统...
安卓系统通知管理,全面解析与优... 你有没有发现,手机里的通知就像是一群调皮的小精灵,时不时地跳出来和你互动?没错,说的就是安卓系统的通...
安卓系统手机哪买,揭秘哪里购买... 你有没有想过,拥有一部安卓系统手机是多么酷的事情呢?想象你可以自由安装各种应用,不受限制地探索各种功...
安卓系统 ipv4,基于安卓系... 你知道吗?在智能手机的世界里,有一个系统可是无人不知、无人不晓,那就是安卓系统。而在这个庞大的安卓家...
目前安卓是什么系统,探索安卓系... 亲爱的读者,你是否曾好奇过,如今安卓系统究竟是什么模样?在这个科技飞速发展的时代,操作系统如同人体的...
安卓6.0系统比5.0,从5.... 你有没有发现,自从手机更新了安卓6.0系统,感觉整个人都清爽了不少呢?没错,今天咱们就来聊聊这个话题...
安卓2.36系统升级,功能革新... 你知道吗?最近安卓系统又来了一次大变身,那就是安卓2.36系统升级!这可不是一个小打小闹的更新,而是...