嵌入式5个RTOS程序设计建议

2023-05-16

已剪辑自: https://mp.weixin.qq.com/s/cCgQ5nfGiQckyqkXKxWtLQ

今天聊一下RTOS应用程序设计的五个实践技巧。

我在编写RTOS应用程序的过程中,经常会遇到这些困难,包括正确确定系统中有多少任务如何设置优先级协调任务行为避免常见陷阱,有时只是为了让应用程序正常工作!

如今,近三分之二的嵌入式系统使用 RTOS,而且随着系统的时序要求变得越来越复杂,这个数字只会随着时间的推移而增加。在今天的文章中,我们将研究设计基于 RTOS 的应用程序的五个最佳实践技巧。

一、任务分解

首先我们可以遵循的第一个最佳实践技巧就是使他们的 RTOS 应用程序开发成功,是使用任务分解来获得应用程序中正确数量的任务

有许多技术可用于分解任务,但我喜欢使用的一种对嵌入式开发人员很有效的方法是使用由外向内(outside-in)的方法。在这种方法中,开发人员遵循七个简单的步骤:

  1. 识别并列出主要的系统组件;
  2. 绘制高级框图;
  3. 标记系统输入;
  4. 标记输出;
  5. 确定一级任务;
  6. 确定并发级别和依赖项;
  7. 确定第二层任务(应用程序任务);

在为恒温器等物联网传感器节点执行此过程时,最终可能会得到如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EnOkz4es-1667833048664)(https://mmbiz.qpic.cn/mmbiz_png/zcVcDoKYUnZ19HFqLDI3D7ibibuUcjqQwW0iaDVyiaQFjdDgSOem4AVdg6Jkq4WwClK8ua9sur4Rvfvv9T4JWSWdcg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)]

在这种情况下,系统通常有六个任务,其中一个任务监督应用程序代码。(根据系统复杂性,可以进一步分解此任务)。

二、选择正确的调度算法来分配优先级

我观察到很多使用 RTOS 的开发人员从不花时间决定他们将如何安排他们的任务。他们通常假设 RTOS 会为他们做这件事,并且他们的任务会根据提供他们选择的任务优先级成功运行。

事实是,开发人员可以通过多种不同的方式来安排任务。

首先,开发人员可以使用任务响应时间来调度任务。在这些系统中,响应时间最短的任务应该被分配最高优先级。

其次,开发人员可以使用一个任务执行时间来调度任务。在这些系统中,执行时间最短的任务应该被分配最高优先级。

最后,开发人员可以使用任务周期来安排任务。在这些系统中,周期最短的任务优先级最高。

只有在您选择了调度方法之后,您才能正确设置您的任务优先级。(我看到很多开发人员只是猜测)。

三、使用RMS验证任务是否可调度

大多数使用 RTOS 的嵌入式系统中使用的调度算法是基于周期的调度,也称为速率单调调度(Rate Monotonic Scheduling)。

多年来,人们对如何使用 RMS 正确安排任务进行了大量研究。通常,RMS 附带了开发人员需要牢记的几个假设。

首先,RMS 假设任务是周期性的并且它们也是独立的。这意味着,如果您有一个非周期性任务,在分析中我们会假设为它提供一些周期性时间。

接下来,RMS 假设 RTOS 使用抢占式调度。它还假设所有任务都相等并且最坏情况的执行时间是恒定的。

我经常发现 RMS 非常适合对我开发的 RTOS 应用程序架构是否有意义或者我是否在错误的方向进行完整性检查。

例如,我可以假设具有以下任务的系统的行为方式并确定它是否可以成功调度其任务:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9EjNzScn-1667833048665)(https://mmbiz.qpic.cn/mmbiz_png/zcVcDoKYUnZ19HFqLDI3D7ibibuUcjqQwWKe4xGLtFbicTryMzHK49evdTuVIAqm1vvhZetdEaibqLIibPnS5BW16UA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)]对于使用 RMS 的系统,对于具有无限数量任务的系统,所有这些任务的 CPU 使用率必须低于 69.3%。对于上述系统,我们可以看到总利用率为 52%,这意味着它们应该是可调度的。

四、使用同步和数据流图

在使用由外向内(outside-in)的方法确定我在应用程序中需要的所有任务后,我通常会创建一个同步和数据流图。此图的目的是:

  • 映射系统中所有数据的来源
  • 映射数据如何从其源转移到系统中的任务
  • 映射如何存储和访问该数据
  • 映射如何使用该数据来生成系统输出

早些时候,我以连接互联网的恒温器为例。下面是我们可能为该应用程序制作的数据流和同步图。

图片如您所见,此图不仅可以帮助我们了解数据如何在系统中移动,还可以帮助我们了解应用程序中所需的 RTOS 组件,例如:

如果没有这样的图表,开发团队必然会遇到开发和维护问题。

五、预先定义任务和消息界面接口

一旦创建了数据流图,就很容易开始对应用程序进行编码。

这无疑会在一段时间内顺利进行,但我发现如果开发人员不花时间预先仔细定义任务和消息接口,它可能会导致返工。

虽然数据流图通常显示数据如何通过应用程序传播,但它并不一定要求定义数据结构。

目标是预先检查每个消息队列,然后为这些消息构建结构。这很重要,因为它将定义消息的外观,而且还将有助于任何底层模块的接口的外观。例如,管理一系列阀门的任务可能需要包含以下内容的消息:

  • 阀门 ID
  • 阀门状态
  • 阀门所需的时间

再说一次,它可能会期待:

归根结底,做事的方式总是不止一种,一种不一定比另一种更好。但是,在为支持任务执行的其他模块构建接口时,了解正在传递的消息将有所帮助。

结论

实时操作系统比以往任何时候都更多地用于开发实时应用程序。

我们在今天的文章中探讨了几个技巧,这些技巧不仅可以帮助读者创建更清晰、更灵活的 RTOS 应用程序,还可以帮助他们传达应用程序的设计意图。这些技巧应该可以帮助读者快速开始他们的应用程序开发.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式5个RTOS程序设计建议 的相关文章

随机推荐

  • 陈吉宁经典演讲:平庸与卓越的差别

    来 源 xff1a 清华大学研究生教育 xff08 ID tsinghua grad edu xff09 亲爱的同学们 xff1a 今天 xff0c 共有1318名同学获得博士 硕士学位 首先 xff0c 我代表学校 xff0c 向同学们奋
  • 谈谈汽车软件中间件(Autosar为例)

    文章目录 操作系统 xff0c 中间件 xff0c 应用软件 各司其职分工不同什么是汽车软件中间件 xff1f 汽车软件中间件有什么好处 xff1f 中间件的明星方案 AUTOSARAUTOSAR Adaptive拯救AUTOSAR技术细节
  • 深入浅出讲解低功耗蓝牙(BLE)协议栈

    已剪辑自 https www cnblogs com bluestorm p 12031957 html 详解BLE 空中包格式 兼BLE Link layer协议解析 https www cnblogs com iini p 897780
  • 常见通信协议

    文章目录 1 通信 与 通讯 傻傻分得清2 通讯协议2 1 HTTP HTTPS2 2 WebService REST2 3 CoAP 协议2 4 MQTT 协议 低带宽 2 5 DDS 协议 高可靠性 实时 2 6 AMQP 协议 互操作
  • 渲染业务领域全景图

    最近图形学应用领域愈发广泛 xff0c 根据我的理解 xff0c 制作了一张渲染相关业务全景图 xff0c 希望对大家的职业规划有一定帮助
  • 谈一谈AI对人工的取代

    文章目录 AI绘画现在达到了什么水平 xff1f 易用性怎么样 xff1f 缘起 xff1a 2015年 用文字画画 2021年 Dalle 与 开源社区的程序员们 openAI与它并不open的Dalle AI开源社区 Dream by
  • 推荐几个代码自动生成器

    文章目录 老的代码生成器的地址 xff1a https www cnblogs com skyme archive 2011 12 22 2297592 html https link zhihu com target 61 https 3
  • 开始做公众号的一些方法技巧总结

    文章目录 封面正文预览公众号文章排版公众号运营全攻略 xff08 理论篇 xff09 公众号运营全攻略 xff08 工具技巧篇 xff09 封面 因为公众号的封面是分两个尺寸的 在头条的封面会长一些 xff0c 比例为 xff08 2 35
  • 程序员需要建立的对技术、业务、行业、管理、投资的认知

    文章目录 作为 IT 行业的过来人 xff0c 你有什么话想对后辈说的 xff1f 谈谈程序员转型的事儿 xff08 1 程序员应该重视技术吗 xff09 到底什么是IT技术 xff1f 怎么找到自己的学习方向 xff1f 献给新手程序员最
  • 虚拟化技术在机载软件中的应用

    虚拟化技术在航空计算领域的应用 基于软件虚拟化技术的新一代航空机载软件设计
  • 如何判断一段程序是否是裸机程序?

    在嵌入式MCU领域 xff0c 一般将不移植操作系统直接烧录运行的程序称为裸机程序 一般来说 xff0c 非易失性存储 xff0c 时钟 xff0c 图形显示 xff0c 网络通讯 xff0c 用户I O设备 都需要硬件依赖 基于硬件基础
  • 单片机STM32有什么推荐的裸机编程架构

    作者 xff1a DBinary 链接 xff1a https www zhihu com question 438340661 answer 2735154401 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xf
  • 一文讲清微服务架构、分布式架构、微服务、SOA

    文章目录 四种软件架构 xff1a 单体架构 分布式架构 微服务架构 Serverless架构一 单体架构二 分布式应用三 微服务架构四 Serverless架构 微服务是什么 xff1f 一 单体软件二 面向服务架构三 微服务 SOA架构
  • 敏捷开发,持续集成/交付/部署, DevOps总结

    文章目录 敏捷开发入门教程一 迭代开发二 增量开发三 敏捷开发的好处3 1 早期交付3 2 降低风险 四 如何进行每一次迭代五 敏捷开发的价值观六 十二条原则七 参考链接 持续集成 交付 部署一 概念二 持续交付三 持续部署四 流程4 1
  • IC集成电路 测试与验证的区别?

    在数字IC中 xff0c 验证与测试完全是两个概念 验证是在pre silicon 阶段 xff0c 也就是流片之前 xff0c 随着设计一起进行的 验证的主要目的是保证芯片逻辑功能的正确性和功能的完备性 验证的一般流程如下 xff1a 测
  • EGL综述

    参考 xff1a https www khronos org registry EGL specs eglspec 1 5 pdf 什么是EGL EGL是支持多平台 多操作系统的 xff0c 比如安卓 Unix Windows等 为了扩展性
  • pcie的rc模式和ep模式有什么区别?

    pcie的rc模式和ep模式有什么区别 xff1f RC PCI Express root complex 在RC模式时 xff0c 使用PCIE类型1配置头 xff1b EP endpoint device 工作方式 在EP模式时 xff
  • Android程序员一年没上班该如何找工作

    前言 Android程序员老王在21年7月份向公司提出了离职 离职后老王觉得在上家工作那么久 xff0c 就想趁着这个机会好好放松一下 由于让自己休息了两个月在加上他自己存了一点积蓄 xff0c 导致后面半年时间都没有找工作面试 到了22年
  • 为什么C语言执行效率高,运行快?

    已剪辑自 https mp weixin qq com s JUucTzACS IFO3iTO77DhQ 简述 都说C语言编写的程序执行效率比较高 xff0c 那么到底高在哪里 xff0c 我们一块来学习学习 C语言由来 C语言源自于BCP
  • 嵌入式5个RTOS程序设计建议

    已剪辑自 https mp weixin qq com s cCgQ5nfGiQckyqkXKxWtLQ 今天聊一下RTOS应用程序设计的五个实践技巧 我在编写RTOS应用程序的过程中 xff0c 经常会遇到这些困难 xff0c 包括正确确