“从0开始的FreeRTOS”系列教程第一讲

作者:satori

大家好,这次给大家带来了Freertos的教程。

这个系列的教程的主要目的是带大家了解实时系统(real time operating system)的基本概念,熟悉freertos的api使用方法,具备基本的使用rtos进行工程开发的能力

本教程的开发环境:

  • 硬件环境

    stm32f103ZET6
  • 软件版本

    Keil MDK 5.23

    CubeMX 4.17
  • 软件库环境

    HAL库版本1.13.0

    FreeRTOS版本9.0

我们这节课主要解决两个问题:

  1. 什么是RTOS?
  2. 为什么要用RTOS?

第一个问题:

什么是RTOS(Real time operating system 实时操作系统),在回答这个问题之前,我们先说明白什么是OS(Operating system 操作系统)。

我们正常使用电脑时感觉和使用单片机有很大的差距,在单片机上,我们可以直接调用IO,中断这些硬件功能,但是在电脑时,我们只能够通过一些应用程序与计算机进行交互。

这是因为我们在操作单片机时是在直接和单片机的硬件进行交互,而在使用电脑的时候,实际上我们是和操作系统进行交互,然后操作系统再帮我们完成和硬件交互的过程,用专业一点的方法来说,就是操作系统区分了用户态和内核态,涉及硬件的操作,只能在内核态下由操作系统进行访问,而用户则只能在用户态进行操作。

操作系统本身就像套在硬件外面的一层壳一样,我们用户再在操作系统的外层进行用户应用的开发,用户应用通过操作系统去操作硬件。

而实时操作系统也是操作系统的一种。

实时操作系统相比一般的操作系统会更加强调实时性,相比我们平时使用的操作系统更加注重及时响应用户的输入,实时操作系统的重点是在外界时间或者数据产生时,能够快速接收和处理,处理的结果又能在规定的时间做出响应。

实时操作系统一般用在工业控制,军事设备,航空航天这些对实时性要求强的场景中。

在stm32开发时,我们一般会采取裸机开发的方式,所谓裸机是指我们一般的轮询+中断的工程代码构筑方式,我们能够实现比较复杂的任务的手段主要是通过中断优先级和中断嵌套。而且这些工作的完成是依赖于nvic寄存器,也就是完全以硬件的方式完成的。

但我们也可以通过freertos这样的实时操作系统进行开发,也就是我们创建一些用户进程,由操作系统根据我们之前设定好的需求对进程的运行进行管理,这是一种通过软件对任务进行调度的方式。

当然,我们上面讲的并不是操作系统的全部,实际上操作系统的历史发展和多道程序设计技术密切相关,但这些不是我们这里的重点了

第二个问题,为什么要用rtos:

使用rtos最大的优势是避免由于不定长中断引发的问题,在传统的裸机开发时,有的时候会因为过长等待一个中断的触发,或者过长时间处理一个中断,导致整个系统发生了混乱乃至于崩溃。

而在rtos中,我们可以通过灵活的调度机制避免这种问题

另外RTOS会给每个任务分配固定的任务栈,并在发生栈溢出时进行处理,避免了由于栈溢出导致系统崩溃的风险

此外使用rtos还有便于实现软件接口等一些优势,比如在移植工程时,如果是裸机开发,我们就要重新配置中断,而如果是rtos,我们直接将用户进程拷贝过来就能使用了,免去了重新进行硬件配置的麻烦

最后,在非常复杂的大工程,以至于完全基于中断进行设计几乎不可能时,使用rtos进行任务调度会是很好的选择

我们这次教程要介绍的FreeRTOS就是RTOS的一种,其他比较常见的还有uCOSⅡ,eCos,都江堰等实时操作系统,FreeRTOS正如其名,是一个'free'的rtos,它的源码和文档可以免费从官网上面获取。

选择FreeRTOS作为我们这次教程讲解的对象,一方面是因为可以通过CubeMX很轻松的生成一个包含FreeRTOS的32工程。另一方面,FreeRTOS已经是一个应用范围很广,占有率很高,社区很庞大的实时操作系统了。

在下一期教程里,我会给大家介绍一下freertos的源码结构,用cubemx生成包含freertos的工程的方法,以及工程的组件。

从0开始的FreeRTOS(1)的更多相关文章

  1. 1、FreeRTOS移植

    1.FreeRTOS目录结构 FreeRTOS FreeRTOS简略目录如下: ├─FreeRTOS │ ├─Demo // 各种开发工具的完整Demo,开发者可以方便的以此搭建出自己的项目,甚至直接 ...

  2. 在Amazon FreeRTOS V10中使用运行时统计信息

    在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考 ...

  3. FreeRTOS config开始的宏

    FreeRTOSConfig.h系统配置文件中可以自定义,FreeRTOS.h中定义默认值 configAPPLICATION_ALLOCATED_HEAP 默认情况下FreeRTOS的堆内存是由编译 ...

  4. 不可被忽视的操作系统( FreeRTOS )【1】

    把大多数人每个星期的双休过过成了奢侈的节假日放假,把每天23点后定义为自己的自由时间,应该如何去思考这个问题 ? 双休的两天里,不!是放假的两天里,终于有较长的时间好好的学习一下一直断断续续的Free ...

  5. 不可被忽视的操作系统( FreeRTOS )【2】

    本文章总结基于官方FreeRTOS手册,测试系统为ESP32的IDF 4.0 本篇续上一篇<不可被忽视的操作系统( FreeRTOS )[1]> 其中上一篇主要内容为: FreeRTOS介 ...

  6. FreeRTOS相关转载-(朱工的专栏)

    FreeRTOS系列第1篇---为什么选择FreeRTOS? 1.为什么学习RTOS? 作为基于ARM7.Cortex-M3硬件开发的嵌入式工程师,我一直反对使用RTOS.不仅因为不恰当的使用RTOS ...

  7. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  8. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

  9. 微信小程序省市区选择器对接数据库

    前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...

  10. osg编译日志

    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...

随机推荐

  1. Rust修仙之道 第十三章 并行境 · 多线程、共享与消息灵道

    第十三章:并行境 · 多线程.共享与消息灵道 "术者一身不可至万处,分灵影可并行化心." 顾行云于静室冥修,心观符阵延迟,渐悟:"纵术法再快,若不能并行,终受瓶颈所限.& ...

  2. FILE LINE 调试手段.

    __FILE__,__LINE__ 输出什么文件,输出在代码里面的多少行 首先在头部使用这个 #define __DEBUG__ #ifdef __DEBUG__ #define DEBUG(form ...

  3. 无法获取cglib代理对象上的注解的解决办法

    前言 开发程序的时候使用了aop去代理对象,然后其他地方会获取到这个代理对象并获取上面的方法注解和参数注解,运行时却发现无法获取注解,最终折腾一番终于解决. 原因 使用了AOP去进行代理,由于代理的对 ...

  4. Win10专业版系统如何关闭定位服务的问题

    不少雨林木风官网的小伙伴,都很在意Win10 系统中的定位位置服务,想要关闭却又不清楚该怎么弄!接下来,雨林木风系统小编今天就来简单介绍一下Win10 定位服务的关闭方法,有需要的朋友可以稍作参考. ...

  5. 推荐 6 款基于 .NET 开源的串口调试工具,调试效率提升利器!

    前言 今天大姚给大家分享 6 款基于 .NET 开源的串口调试工具,旨在帮助 .NET 开发者们更好的应对通讯调试方面的学习和工作,提升调试效率. 优秀项目和框架精选 本文所有项目都已收录到C#/.N ...

  6. 分享一个 MySQL binlog 分析小工具

    去年写的一个小工具,用于在线获取 MySQL binlog 的大小.开始时间.结束时间和持续时长. 什么场景下会用上这个工具呢? 云服务场景,无法登录 MySQL 服务器查看 binlog 的时间戳信 ...

  7. es6划重点

    es6划重点 1.作用域变量 1.1.let和var对比 1.变量不提升 2.不能重复定义 3.暂存死区 4.闭包新写法 2.const(常量) 3.解构 1.数组解构 2.对象解构 3.混合解构 4 ...

  8. Exchange 2010 SSL证书安装文档

    在Microsoft Exchange 2010中安装和配置SSL证书是一个关键步骤,以确保邮件服务器的安全通信.以下是一个详细的教程,指导你完成整个过程. 第一步:获取SSL证书 1.购买并获取SS ...

  9. 2025年最佳网络监控工具Top8

    2025年最佳网络监控工具Top8 工具对比表 以下是各工具关键指标对比: 软件名称 起售价(年付) 永久免费版 免费试用 适用规模 支持平台 部署方式 Progress WhatsUp Gold $ ...

  10. Makefile $@ $< $^ %.o: %.cpp说明

    $@ 表示目标文件$^ 表示所有的依赖文件$< 表示第一个依赖文件 $@是目标的名字(目标就是冒号":"左边的文件名).假如冒号左边有不止一个目标,那么$@等于触发当前规则的 ...