FreeRTOS学习之路,以STM32F103C8T6为实验MCU(序章——浅谈单片机以及FreeRTOS)

news2025/1/10 20:40:02

学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。

注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习,也可以通过Proteus仿真的方式进行学习。

后续文章会同时发表在个人博客(jason1016.club)、CSDN;

视频会发布在bilibili(UID:399951374)

作者的话:

        相信大家在学习完STM32的裸机开发后,满怀信心地去写一个庞大的项目的时,写到后期总会感觉,各个模块的任务总是会相互制约和影响,存在绝对的先后顺序关系(也称为轮询方法),即使在系统中以中断优先应对突发任务(前后台模式)也不是办法,一来是中断内的程序不能太复杂,最后只标志事件然后再主函数重新运行;二来是频繁进中断也不是办法吧。

        这里举一个例子:我给单片机设置了

  • (1) 一个每三秒需要通过MQTT协议将传感器收集到的温湿度数据上传到服务器的任务
  • (2) 此为我还设置了系统需要通过光度传感器监测光强阈值控制灯的开关
  • (3) 设置OLED屏幕实时显示时钟。
  • (4) 控制LED呼吸灯,每5s执行一次翻转操作

        那我在编写程序的时候就会遇到许多问题:

  • 上述第一个和第二个任务应该写在中断还是挂起标志位再在轮询主函数中执行呢?
  • 假设在中断中,那中断的执行事件会不会太复杂
  • 假设在任务中,当任务多起来,每次单片机需要完整执行一次轮询周期太长,会不会导致数据传输的实时性得到损失甚至导致数据丢包
  • 当我们使用delay等待函数的时候是不是会导致系统“没事干”导致CPU资源白白浪费掉了

        因此我们开始学习尝试了解以操作系统去解决上述的问题。那么我们应该移植什么操作系统呢?通过了解STM32F103适配的主流系统有μC/OS-II、eCos、FreeRTOS、都江堰操作系统等操作系统。而其中FreeRTOS以开源、免费而著名,所以我们在学习单片机就自然而然地FreeRTOS作为首选了。

        好了,跟大家卖了这么久关子,也不好再吊着大家了,接下来我就是直入主题了!!!

什么是操作系统?

        这里相信很多教程都讲过了,但是这里我想和大家聊聊我的看法!

        首先我们要先知道操作系统的主体是谁,操作系统是为谁服务的?操作系统的服务受众群体从始至终都只有一个,那就是单片机。

        对于单片机是什么,我这里分享一个我个人很喜欢的理解模式,(以STM32F103为例)我们把单片机比作一个人,那他的内核就是他的小脑瓜;晶振就是他的心跳;外设就是他的五感,SRAM和FLASH就是他的记忆系统,总线协议就是他的血管,那这样是不是就可以将单片机转化成一个活生生的人了呢。

        既然都把他比作一个人了,那我们不妨把单片机的各个运行模式转化为一个人思维方式进阶。首先裸机开发模式,就是这个孩童的阶段,这个时候单片机还不懂怎么合理分配自己的时间:只知道到了早上要先刷牙,然后洗脸,最后再吃早饭,但是针对突发情况,比如今天天牙膏没了那咋办?单片机就不会处理了,就傻傻地站在洗漱池前等刷牙,等牙膏来了(轮询模式);

然后就是前后台系统模式了,等你年纪再大点,步入了幼年时期,可以听得懂父母的话,在上述处理事情的模式上,又学会了听爸爸妈妈的话,当父母喊你去做什么事情的时候,你总会乐呵呵地抛下手里的所有事情去听爸爸妈妈喊你知道你一会要去做什么(中断),然后再先把爸爸妈妈安排的工作插入上述的轮询进程任务中,到时间了再处理得当(主程序执行事件)。这样要是妈妈说她马上要出门了,喊你帮忙拿车钥匙,你还傻傻地先刷牙洗脸吃早餐再给妈妈送过去,估计妈妈得气死。

最后就到了多任务系统了,单片机度过稚嫩的幼年时期,到了青年时期有了属于自己的一套做人方式和行为准则,当然青年时期属于叛逆时期,不同单片机的发展差异就在于他解除了什么学习了什么(而这里我把这件事称为移植了什么系统),而我们就单独将学会了FreeRTOS的单片机小朋友提出来举例了,这位小朋友他就学会了:

  • 把要做的事情都分成一个个任务,然后重要的事情先做(任务调度器按任务优先级调度)。
  • 在别的任务等待的时候可以做别的事情,比如你在煲热水,等水沸腾的时候就可以做别的事情啦。(任务调度器任务切换)
  • 合理运用自己的记忆力(heap_4内存分配)
  • ......

 相信聊到这里,大家大概了就了解了单片机和操作系统的关系了,操作系统就是单片机的思考和处理事情的方式,可能网上很多都有介绍Linux操作系统、FreeRTOS操作系统,但是相信大家看完这么多介绍都是似懂非懂的。在我看来,操作系统的定义应该泛定义到单片机的执行事件的一个模式,无论是裸机还是前后端,多任务都是一个完整的操作系统(这里是作者个人臆想的,要是错了欢迎指正)。

学习之路安排

        这条学习之路会以STMF103C8T6为MCU,在上面移植FreeRTOS操作系统,并且逐层解析FreeRTOS实时操作系统。最终希望都可以掌握FreeRTOS实时操作系统,并且可以以此为基础做出来很多实战项目。

寄望与自勉

很喜欢那句话,种一颗树最好的时间是10年前,其次就是今天!愿今日的你成就明日的你。就像我个人博客主页写的那句话一样:

你终将成为你想成为的人
愿你在通往成功的路上
不再孤身一人

本文为作者独立编写,本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文解读 | 透过窥镜: 透明容器内物体的神经三维重建

原创 | 文 BFT机器人 随着虚拟现实和虚拟世界技术的发展,博物馆藏品的数字化是一个越来越受关注的新兴话题。世界上许多著名的博物馆都在为网上展览建立自己的数字馆藏。 在这些藏品中,有一种特殊而重要的藏品昆虫、人体组织、水生生物和其他易碎的标本需…

ZooKeeper(一):基础介绍

文章目录 什么是 ZooKeeper?ZooKeeper 发展历史ZooKeeper 应用场景ZooKeeper 服务的使用ZooKeeper 数据模型data tree 接口znode 分类 总结 什么是 ZooKeeper? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计…

docker-compose安装nacos 2.2.1及配置

目录 官网 创建存储目录 创建数据库 application.properties配置(重要) docker-compose.yml 启动 登录 下面是安装nacos 2.2.1版本的方法,有一些变化 官网 GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configu…

SCTracker 跟踪论文阅读笔记

SCTracker 跟踪论文阅读笔记 SCTracker: Multi-object tracking with shape and confidence constraints 论文链接 (未开源状态) 论文主要更新点围绕shape constraint and confidence两点来展开: 首先论证在跟踪匹配的过程中D-box(检测框)与T-box(预测框)需要有一定…

今日的CSS小案例

个人名片: 😊作者简介:一名大一在校生,web前端开发专业 🤡 个人主页:几何小超 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习目…

第一篇、基于Arduino uno,获取dht11温湿度传感器的温度信息和湿度信息——结果导向

0、结果 说明:先来看看串口调试助手显示的结果,如果是你想要的,可以接着往下看。 1、外观 说明:虽然dht11温湿度模块形态各异,但是代码都是适用的,因为它们的模块都是一样的。 2、连线 说明:…

微博开发--微博官方API使用方法【从注册到实战】

第一步:微博开发者身份认证 访问微博开放平台,登录自己微博账号,登录之后首先需要完善开发者的基本信息。【使用个人】 填写完成之后【审核通过】如下: 第二步:创建自己的应用 【备注:如果只是为了测试…

逻辑回归及逻辑回归的评估指标

一、逻辑回归介绍 逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。 1.逻辑回归的应用场景 …

【腾讯云FinOps Crane 集训营】快速搭建一个 Kubernetes+Crane 环境,以及如何基于 Crane 优化你的集群和应用初体验

文章目录 一、活动介绍二、环境搭建三、安装本地的 Kind 集群和 Crane 组件四、界面截图五、主要功能六、整体架构七、Crane的优势八、总结参考文献 一、活动介绍 Crane 是由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目,遵循 FinOps 标准,…

用java带你了解网络IO模型

目录 1.BIO1.1 简述1.2 代码示例1.3优点和缺点1.4 思考 2. NoBlockingIO2.1 简述2.2 代码示例2.3 优点和缺点2.4 思考 3. NIO(NewIO)3.1 简述3.2 代码示例3.3 优点和缺点3.3 思考 4. 扩展select/poll、epoll4.1 简述4.2 select/poll4.3 epoll4.4 扩展话题…

Linux之vim编辑器的使用

目录 一、vim是什么? 试验1: 二.命令模式继承用法: vim命令模式的快捷键: 光标移动: vim文本复制相关操作: vim文本编辑操作: 三.末行模式命令用法 部分快捷键: 四.vim编辑器的配置原理 一、vim是什么? vi…

Hive SQL语句的正确执行顺序

关于 sql 语句的执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后顺序,有说 select 先执行,有说 group by 先执行,到底它俩谁先执行呢&#x…

智能结构诊断器:建筑结构健康的守护者

近年来,接二连三的自建房坍塌,超高层建筑震动,让建筑的健康和安全性成为了人们关注的焦点。为了确保建筑物的长期稳定性和安全性,迫切需要高效且准确的方法来监测结构的健康状况。智能结构诊断器的出现,让建筑结构监测…

大数据如何助力营销(5)活动复盘

在市场竞争日益激烈的今天,营销活动已经成为吸引用户、提升品牌影响力、增加销售转化的重要手段。然而,一场营销活动在举办后,往往难以评估活动的效果,而大数据技术将从方方面面、科学有效地复盘活动,并为下一次举办活…

chatgpt赋能Python-python_kbhit

Python kbhit - 帮助您掌握实时按键输入 如果您需要使用实时按键输入来控制您的Python程序,那么你需要知道的是Python kbhit。kbhit是一种允许用户实时按键输入并立即响应的技术。本文将介绍Python kbhit的用途和用法,并探讨实时输入如何帮助您掌控程序…

AI绘图学习心得分享-Midjourney绘画AI,让你少走一些弯路

本教程收集于:AIGC从入门到精通教程 AI绘图学习心得分享-Midjourney绘画AI,让你少走一些弯路 本篇没有什么长篇大论,全部都是实用心得总结。接下来,我们将分享关于Midjourney绘画AI的实用心得总结,包括构图指令结构、常用指令、操作技巧、常用风格词汇和构图词汇。 如果…

手机号码在网时长 API 实现广告投放和精准营销案例分析

引言 手机在网时长是指用户在移动网络上的在线时间,包括用户接入网络的时间和断开网络的时间。手机在网时长 API 是一种提供手机在网时长数据的编程接口,为开发者和服务提供商提供了获取和利用这些数据的能力。 本文旨在深入探讨手机在网时长 API 的技…

计算机视觉——day95 PANet:基于样本原型对齐的Few-Shot图像语义分割

PANet:基于样本原型对齐的Few-Shot图像语义分割 1. Introduction2. Related workFew-shot segmentation 3. Method3.1. Problem setting3.2. Method overview3.3. Prototype learning(原型学习)3.4. 非参数度量学习3.5. 原型对准正则化(PAR) 4. Experime…

MySQL高级 之 explain执行计划详解

使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。 explain执行计划包含的信息 其中最重要的字段为:id、type、key、rows、Extra 各字段详解 id select查询的序…

前端安全和防护:如何保护网站和用户信息的安全

第一章:引言 在当今数字化时代,随着互联网的飞速发展,网站已成为人们获取信息和进行交流的主要渠道。然而,随之而来的是对网站安全的日益关注。作为前端开发者和网站管理员,我们有责任确保用户的信息和网站的安全。本…