FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

这篇具有很好参考价值的文章主要介绍了FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、为什么要学习FreeRTOS

二、前言------从0到1认识FreeRTOS

1、逻辑系统与多任务系统

1.1、裸机系统:裸机系统通常分成轮询系统和前后台系统

1.2、多任务系统

2、数据结构-列表与列表项

三、任务

3.1基本属性

3.1.1任务栈

3.1.2任务控制块

3.1.3任务成员

3.2状态

四、机制

4.1任务优先级

4.1.1高优先级抢占低优先级

4.1.2时间片

4.2任务调度器

4.3临界段的保护

4.4空闲任务与阻塞延时

五、API函数


写这篇文章的目的有两个。1、方便初学者快速的入门;2、对自己这一阶段的学习进行一个阶段性的小结。

因为笔者也不过是个短时间的初学者,难免会有疏漏和差错,仅供参考。同时也欢迎大佬批评指教。不吝赐教 。

FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

 

一、为什么要学习FreeRTOS

        当我们进入嵌入式这个领域的时候, 往往首先接触的都是单片机编程, 单片机编程又

首选 51 单片机来入门。 这里面说的单片机编程通常都是指裸机编程,即不加入任何 RTOS

(Real Time Operating System 实时操作系统) 的程序。在裸机系统中,所有的程序基本都是自己写的, 所有的操作都是在一个无限的大循环里面实现。现实生活中的很多中小型的电子产品用的都是裸机系统, 而且也能够满足需求。

        但是为什么还要学习 RTOS 编程,偏偏还要整个操作系统进来。一是项目需要,随着产品要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得

更加复杂,如果想降低编程的难度, 我们可以考虑引入 RTOS 实现多任务管理, 这是使用

RTOS 的最大优势。二是学习的需要,必须学习更高级的东西,实现更好的职业规划,为

将来走向人生巅峰迎娶白富美做准备,而不是一味的在裸机编程上面死磕。作为一个合格

的嵌入式软件工程师,学习是永远不能停歇的事,时刻都得为将来准备。书到用时方恨少,

我希望机会来临时你不要有这种感觉。

二、前言------从0到1认识FreeRTOS

1、逻辑系统与多任务系统

1.1、裸机系统:裸机系统通常分成轮询系统和前后台系统

1.1.1轮训系统

        轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。如果只是实现 LED 翻转,串口输出,液晶显示等。

        这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。当一个按键事件发生时,程序刚好运行到一个函数,要命的是这个函数要执行的时间还很久,久到按键释放之后都还没有执行完毕,那么按键时间就会丢失。可以看见轮训系统只适合顺序执行的功能代码。

1.1.2前后台系统

        相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台, main 函数里面的无限循环我们称为后台。

        在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回到后台程序里面处理。虽然事件的响应和处理是分开了,但是事件的处理还是在后台里面顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大的提高程序的实时响应能力。在大多数的中小型项目中,前后台系统运用的好,堪称有操作系统的效果。

1.2、多任务系统

        相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。在多任务系统中, 任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的任务的优先级足够高,就会立马得到响应。相比前后台系统,多任务系统的实时性又被提高了。

        相比前后台系统中后台顺序执行的程序主体,在多任务系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为任务。每个任务都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。加入了操作系统,我们的编程反而变得简单了。整个系统随之带来的额外开销就是操作系统占据的那一丁点的 FLASH 和 RAM。现如今,单片机的 FLASH 和 RAM 是越来越大,完全足以抵挡 RTOS 那点开销。

        无论是裸机系统中的轮询系统、前后台系统和多任务系统,我们不能一锤子的敲定孰优孰劣,它们是不同时代的产物,在各自的领域都还有相当大的应用价值,只有合适才是最好。

2、数据结构-列表与列表项

        在 FreeRTOS 中存在着大量的基础数据结构列表和列表项的操作,要想读懂 FreeRTOS的源码或者从 0 到 1 开始实现 FreeRTOS,就必须弄懂列表和列表项的操作。在FreeRTOS中的列表就等同于C语言中的链表。

        链表作为 C 语言中一种基础的数据结构,在平时写程序的时候用的并不多,但在操作系统里面使用的非常多。链表就好比一个圆形的晾衣架, 具体见图, 晾衣架上面有很多钩子,钩子首尾相连。链表也是,链表由节点组成,节点与节点之间首尾相连。晾衣架的钩子本身不能代表很多东西,但是钩子本身却可以挂很多东西。同样,链表也类似,链表的节点本身不能存储太多东西,或者说链表的节点本来就不是用来存储大量数据的,但是节点跟晾衣架的钩子一样,可以挂很多数据。

 FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

链表又分为单向链表和双向链表

单向链表

FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

双向链表

FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

对于链表的操作无非就是增删改查,这里不过多讲解。

链表与数组的对比

在C语言中,链表和数组确实很像。但是二者又完全不同FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

        链表是通过节点把离散的数据链接成一个表,通过对节点的插入和删除操作从而实现对数据的存取。而数组是通过开辟一段连续的内存来存储数据,这是数组和链表最大的区别。 数组的每个成员对应链表的节点,成员和节点的数据类型可以是标准的 C 类型或者是用户自定义的结构体。数组有起始地址和结束地址,而链表是一个圈,没有头和尾之分,但是为了方便节点的插入和删除操作会人为的规定一个根节点。文章来源地址https://www.toymoban.com/news/detail-510982.html

剩下的部分在我的专栏里,大家有需要的话可以进FreeRTOS那个专栏继续进行学习

到了这里,关于FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Centos7下的DNS服务器部署(每一步图文结合超详细,适用于初学者)

    关于DNS服务,网上都有很多很详细很专业的讲解,但是对于大部分初学者可能看的比较懵懂,用白话来说就是起初人们因为对大量用于访问服务器的IP地址难以记住,所以就逐渐出现了域名的形式(诸如:www.baidu.com 之类的),但是计算机本身只能识别出像192.168.10.112之类的

    2024年02月07日
    浏览(66)
  • MySQL数据库基础初学者必备知识

    目录 1.数据库的基本操作 1.1显示所有数据库 1.2创建数据库 1.3删除数据库 2.数据库的类型 2.1数值类型 2.2字符串类型 2.3日期类型 3.表的简单操作 3.1创建一个表 3.2显示表的结构 3.3显示数据库中的所有表 3.4删除指定表 4.实战练习 数据库的基本操作为:显示数据库,创建数据库

    2023年04月11日
    浏览(68)
  • SEO 分步教程:初学者掌握的 8 个简单基础知识

    如果您刚刚开始使用搜索引擎优化 (SEO),那么分步 SEO 教程是有序的。在这一点上,你可能已经听说过一些基本术语,如研究和页面优化。但是,您如何应用迄今为止收集的所有知识呢? 如果您刚刚开始使用搜索引擎优化 (SEO),那么分步 SEO 教程是有序的。在这一

    2024年01月17日
    浏览(60)
  • python 涉及opencv mediapipe知识,眨眼计数 供初学者参考

    基本思路  我们知道正面侦测到人脸时,任意一只眼睛水平方向上的两个特征点构成水平距离,上下两个特征点构成垂直距离 当头像靠近或者远离摄像头时,垂直距离与水平距离的比值基本恒定  根据这一思路 当闭眼时 垂直距离变小 比值固定小于某一个值 当睁眼时 比值大

    2024年01月23日
    浏览(51)
  • 51单片机的入门知识(献给初学者最易懂的文章)

    目录 单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器

    2023年04月08日
    浏览(44)
  • 【深度学习】深度强化学习初学者指南

            GAN(Generative Adversarial Networks)是一种深度学习模型,它由两个神经网络组成:一个生成网络和一个判别网络。生成网络学习如何生成类似于给定数据集的新数据,而判别网络则学习如何区分生成网络生成的数据和原始数据。这两个网络相互竞争,使得生成器越来

    2024年02月13日
    浏览(40)
  • 初学者怎么学习c++(合集)

      学习c++方法1 找一本好的书本教材,辅助看教学视频。好的教材,可以让你更快更好的进入C/C++的世界。在校学生的话,你们的教材通常都是不错的。如果是自学,推荐使用谭浩强出的C/C++经典入门教材。看视频是学习比较直观的方式。建议先看课本,不懂的地方,更看视频

    2024年02月16日
    浏览(62)
  • 【深度学习】神经网络初学者指南

            这是一篇对神经网络的泛泛而谈的文章,我的意见是,先知道框架,而后知道每一个细节,这是学习人工智能的基本路线。本文就神经网络而言,谈到一些基础概念,适应于初学者建立概念。         神经网络是一组算法,以人脑为松散建模,旨在识别模式。

    2024年02月16日
    浏览(40)
  • 【学习资源】C#初学者学习资源推荐

    大家好,这是笔者自己自行整理的C#学习资源推荐,包含 网站、书籍和社区 ,方便自己学习的同时分享出来,希望可以帮到大家谢谢。 首先笔者最推荐的当然是我们微软 官方的学习文档 :官方C#文档, 众所周知官方的文档永远是最全面的,最权威的,更新最及时的。而其它

    2024年02月05日
    浏览(94)
  • 2023 年如何学习 SQL:初学者终极指南

    什么是 SQL,它的用途是什么? SQL 在 2023 年仍然适用吗? 你应该学习 SQL 吗? 学习 SQL 的不同方法 SQL 入门 SQL初学者可能害怕问的问题 学习 SQL 的先决条件是什么,我需要有任何编码经验吗? SQL 有哪些实际应用,哪些行业依赖于此技能? 学习SQL需要多长时间,我应该投入多

    2024年02月03日
    浏览(102)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包