“从0开始的FreeRTOS”系列教程第一讲
大家好,这次给大家带来了Freertos的教程,这次打算一口气做完一整个系列的教程,大概更新频率会是月更
这个系列的教程的主要目的是带大家了解实时系统(real time operating system)的基本概念,熟悉freertos的api使用方法,具备基本的使用rtos进行工程开发的能力
系列计划分几期录完,内容分别为
- 任务管理
- 队列管理
- 软件定时器管理
- 中断管理
- 资源管理
- 事件组
- 任务通知
本教程的开发环境:
- 硬件环境
stm32f103ZET6 - 软件版本
Keil MDK 5.23
CubeMX 4.17 - 软件库环境
HAL库版本1.13.0
FreeRTOS版本9.0
我们这节课主要解决两个问题:
- 什么是RTOS?
- 为什么要用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”系列教程第一讲相关推荐
- 会说话的狗狗本电脑版_一看就会用!Fotor 电脑版 图片后期处理详解系列教程 第一节...
Fotor 电脑版 图片后期处理详解系列教程 第一节 这节课我们先来了解一下 Fotor 电脑版的界面功能,为了能用 Fotor 电脑版修图处理打基础. 如图示,启动 Fotor 以后出面界面,有编辑 ...
- Electron系列教程——第一篇:入门
Electron系列教程--第一篇:入门 一.楔子 想要学习Electron,跟着官网或者中文网,仔细阅读,并实践,其实是够了,不必要重复.那为什么还要写这个系列呢?大概有两方面原因,其一:我使用el ...
- Vuex白话教程第一讲:Vuex到底是个什么鬼?
Vuex白话教程第一讲:Vuex到底是个什么鬼? Vuex白话教程第二讲:Vuex旗下的State和Getter Vuex白话教程第三讲:Vuex旗下的Mutation Vuex白话教程第四讲:Vue ...
- 股票选股公式编写教程第一讲:公式编写的基础函数
股票选股公式编写教程 第一讲:公式编写的基础函数 打开技术指标公式,我们最常见的,它的组成不外乎两种情况,一是 K线,二是均线.其他诸如柱状线,彩带,分段线等等,都是在 K线或均线基础上的延伸或变形. ...
- LATEX教程第一讲—— LATEX入门
LATEX教程第一讲--LATEX入门 1.1 什么是LATEX? 1.2 怎么下载? 1.3 Latex初入门 1.3.1 基本框架 1. 一篇Latex的开始--\documentclass[** ...
- 【直播回顾及资料下载】小程序云应用入门实操系列课程第一讲...
直播详情:小程序云应用入门实操系列课程第一讲:https://yq.aliyun.com/articles/698244 直播时间:2019年4月16日 20:30 直播专家: 白宦成 - Linux ...
- 韦东山freeRTOS系列教程之【第十章】软件定时器(software timer)
文章目录 系列教程总目录 概述 10.1 软件定时器的特性 10.2 软件定时器的上下文 10.2.1 守护任务 10.2.2 守护任务的调度 10.2.3 回调函数 10.3 软件定时器的函数 10 ...
- 手把手教你搭建一个【文件共享平台】系列教程第一话——你想知道的,这里都有
文章目录 Beginning what why how Effect Picture Source Code Ending Beginning 写在最前头(多图慎入).这篇系列教程将手把手(很详细)地 ...
- [FreeRTOS系列教程]学习FreeRTOS前的准备工作-----初学者必看
转自:http://bbs.armfly.com/read.php?tid=1552 转载说明:本文仅为转载,下面有几位同学询问对应的教程,教程请参考下面的链接,是以帖子的形式分章节说明. http: ...
- Vuex 白话教程第一讲:Vuex 到底是个什么鬼?
转载出处:简书作者 大宏说 作者链接:大宏说 先说两句 官方已经有教程了,为什么还要写这个教程呢?说实话,还真不是我闲着蛋疼,官方的教程真的是太官方了,对于刚入门 Vuex 的童鞋来说,想必看官方的教 ...
最新文章
- laravel--表单验证
- fifo算法_缓存算法FIFO、LFU、LRU
- [html] HTML5如何播放ts视频流?
- 60-100-020-使用-MySQL 的Show Profile命令
- HDU(2255),KM算法,最大权匹配
- Android开源库--ActiveAndroid(active record模式的ORM数据库框架)
- 0x7c97cd12 指令引用的 0x00000014内存。该内存不能为written
- 启动conda环境_Python入门环境搭建anaconda
- 云心html mac,萤石云视频Mac版
- R语言探索性因子分析练习
- Docker中级篇,看这篇就对了
- 关于程序员的调查报告
- 小米平板刷机shell怎么退_黑龙江省宁安市小米平板1的刷机经历刷入DotOS并退回MIUI-最懂产品的运维...
- 深度学习为什么会出现validation accuracy大于train accuracy的现象?
- 小视频如何伪原创 抖音合并视频md5
- JFinal极速开发微信公众号
- css选中父元素下的第一个子元素
- php下载安装方法,phpstudy 2016免费版-php开发环境下载 v2016.11.03 附带安装教程 - 安下载...
- 画saliency intensity map图,pytorch版本
- 局域网内配置可访问mysql数据库