到底该不该用RTOS——rtos的优点
我现在要不要学习RTOS? 学习RTOS有什么好处? 我的项目要不要跑RTOS?
······等等一些关于RTOS的问题,其实归根结底还是你对RTOS了解的不够,项目开发的经验还不足等。
针对这部分朋友,今天分享几点相关内容:
嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现系统功能。当软件设计变得庞大且复杂时,设计师应该考虑使用实时操作系统。
下面给大家分享使用RTOS的8个理由:
1.硬实时响应
基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度。有严格时序限制的任务可以优先执行,提高应用程序对时间关键事件的响应。
2.系统性能最大化
针对大型的、复杂的嵌入式应用,使用一个事件驱动的RTOS,来替代基于轮询的超循环结构,可以生成一个更有效的设计,更小的存储占用,应用可以获得更多的处理器时间。
3.降低复杂度
RTOS允许应用划分为一个个小的自主运行的任务。任务执行自己的上下文中,不依赖其它任务或调度器。
4.高峰负载管理
RTOS提供了为管理系统高峰活动提供了一个有效的方法。更高的优先级分配给执行峰值负载活动的任务,确保他们在临界时间内访问处理器,在此期间,较低优先级的任务被延迟。
5.紧密集成的中间件
RTOS的模块化设计使得它可以很容易的增加中间件。中间件组件以任务和驱动的方式增加。他们使用RTOS提供的资源与其它任务通信。基于相应的事件被RTOS调度。
6.更大的开发团队
每个任务可以被认为是一个项目。通过RTOS提供的资源(队列、信号量等)来定义输入输出。将系统定义为一个个的任务,可以更容易的部署更多开发人员到一个项目。
7.易于调试和验证
系统划分为功能明确的任务,不依赖其它任务。在整个系统集成之前,可以很容易的调试和验证每个任务。
8.代码重用
RTOS系统中的模块化设计,鼓励将软件功能创建为独立的、验证过的任务。其独立性使得在其它设计中重用这些模块变得很简单。
当然,以上理由针对的大众需求,如你项目有特殊需求另当别论。
================================================================================================
之前,我就是收到一个项目中,就不要我使用rtos,但是发现其实这个是可以使用rtos来完成的。
其实有的项目可以用两种方式分别实现,但是rtos有任务切换,可能会带来不确定因素,但是我个人认为,rtos只要会用,一般是没有问题的,因为主流的rtos基本上已经比较稳定的。
裸机系统将是不用考虑任务切换,全局变量随便用,不存在可重入等问题,一个while大循环+定时器就基本解决了。但是函数之间耦合强,阅读性就不那么强。
到底该不该用RTOS——rtos的优点的更多相关文章
- Multi-tasking RTOS for microprocessors with limited memory by saving only a single return address per task during context switching
A real-time operating system (RTOS) for use with minimal-memory controllers has a kernel for managin ...
- Linux IP 路由实现
以下代码取自 kernel . [数据结构] 该结构被基于路由表的classifier使用,用于跟踪与一个标签(tag)相关联的路由流量的统计信息,该统计信息中包含字节数和报文数两类信息. 这个结构包 ...
- UCOSIII(一)
一,前后台系统和RTOS 1,前后台系统 早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念.通常把程序分为两部分:前台系统和后台系统. ...
- ESP8266 SDK开发: 外设篇-串口
串口分布 串口切换说明 1.默认所有的数据都使用串口0输出 官方提供了函数可以选择printf利用哪一个串口输出 配置printf使用串口1打印输出,波特率115200 (注:这样配置对于调试程序很有 ...
- FreeRTOS相关转载-(朱工的专栏)
FreeRTOS系列第1篇---为什么选择FreeRTOS? 1.为什么学习RTOS? 作为基于ARM7.Cortex-M3硬件开发的嵌入式工程师,我一直反对使用RTOS.不仅因为不恰当的使用RTOS ...
- Serverless 架构:用服务代替服务器
Serverless 架构:用服务代替服务器 转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需 加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:&q ...
- (转载)函数:mysqli_query和mysql_query有何区别?
(转载)http://wzan315.blog.163.com/blog/static/37192636201241732045299/ Mysqli.dll是一个允许以对象的方式或者过程操作数据库的 ...
- pyhon学习Day18--继承
[知识点] 面向对象的三大特性:继承.多态.封装 [继承] (1)继承:class Person(Animal): ——括号里的:父类,基类,超类 括号外的:子类,派生类 class Animal ...
- 编写Java程序_找星座朋友应用软件
一.About the Project 项目介绍 自古以来,人对于恒星的排列和形状很感兴趣,并很自然地把一些位置相近的星联系起来,组成星座.占星术亦称"占星学"."星占学 ...
随机推荐
- [转帖]Linux chattr 命令详解
Linux chattr 命令详解 https://www.cnblogs.com/ftl1012/p/chattr.html 常见命令参数 1 2 3 4 5 6 7 8 9 10 11 12 A: ...
- Akka-CQRS(11)- akka-http for http-web-service: Marshalling-数据序列化
前面几篇讨论了关于gRPC方式的前后端连接集成方式.gRPC也是一个开放的标准,但讲到普及性就远远不及基于http/1.1协议的web-service了.特别是gRPC的前端编程还是有一定的门槛,所以 ...
- Java学习:数组工具类Arrays
数组工具类Arrays java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现数组常见的操作. public static String toString(数组) ...
- Java学习:数组的使用和注意事项
数组 数组的概念:是一种容器,可以同时存放多个数据值 数组的特点: 数组是一种引用数据类型 数组当中的多个数据,类型必须统一 数组的长度在程序运行期间不可以改变 数组的初始化:在内存当中创建一个数组, ...
- Codility MinMaxDivision
最近发现了一个刷题网站:https://app.codility.com/programmers/lessons 这个网站做题目时候的界面让我惊艳到了 首先这是题目界面: 然后点击start, 出来的 ...
- 基于 DNS 动态发现方式部署 Etcd 集群
使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...
- Test Title
test testing... testing in day02... testing in day07...
- tf.random_shuffle()函数解析
tf.random_shuffle(value, seed=None, name=None) 函数就是随机地将张量沿第一维度打乱 value:将被打乱的张量. seed:一个 Python 整数.用于 ...
- Java自学-异常处理 自定义异常
Java 自定义异常 示例 1 : 创建自定义异常 一个英雄攻击另一个英雄的时候,如果发现另一个英雄已经挂了,就会抛出EnemyHeroIsDeadException 创建一个类EnemyHeroIs ...
- 【MySQL】mysql中的锁机制
一.分类 MySQL的锁机制不同的存储引擎支持不同的锁机制,分为表级锁.行级锁.页面锁.MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):BDB存储引擎采用的 ...