嵌入式开发:RTOS调试——处理计时问题

news2025/8/3 2:21:32

  毫无疑问,当你开始在嵌入式开发中使用实时操作系统(RTOS)时,会有一个学习曲线。你将在更高的抽象层次上工作,使用或多或少的并行任务,而不仅仅是子例程,并且你需要考虑你的任务应该如何彼此共享数据和处理器时间。你需要为这些任务分配运行时优先级,而最佳解决方案并不明显。

  最后但同样重要的是,你需要学习如何使用RTOS本身,比如配置和用于控制任务和任务间通信的API函数。

  一旦你掌握了所有这些,并且你正在编写你的代码,是时候进入下一个学习曲线了——你现在也必须学习如何调试你的代码。

  调试RTOS系统(通常使用抢占式多任务处理)与调试单线程“超级循环”系统(所有代码都是你自己编写的)不同,这有几个原因,最重要的两个原因是:

  l 随着多个任务相互作用并争夺共享资源,软件行为可能会受到软件定时和RTOS调度行为的影响,而这在源代码中是不可见的。

  l 你不再直接控制程序流——任务开关可能在任何地方、任何时间触发。

  这些问题真的没有办法解决,你必须处理这些问题,因为你必须信任操作系统来安排任务和管理计时器。某些任务切换可能是可预测的,因此是已知的,但通常你不知道它们将在程序流中的何处发生。在嵌入式开发中,随着系统中任务/线程的数量增加,组合的数量也会增加——可能会有大量可能的执行场景,具有不同的时间和执行顺序,其中大多数都会正常工作。

  

 

  下面列出了一些典型的症状,如果你有RTOS相关的计时错误,你可能会看到这些症状。请注意,这些问题中的许多通常具有一定程度的随机性;这个问题有时会出现,但并不总是出现。

  与RTOS相关的计时错误的一些典型症状

  l 任务单独工作很好,但作为一个完整的系统就不行了

  l 缓慢的性能

  l 系统锁定,或者有时停止响应

  l 系统看起来很脆弱——微小的改变会导致奇怪的错误

  l 输出时序的随机变化

  l 有时损坏的数据,或错误的输出

  l 随机崩溃/硬故障

  依赖于时间的错误可能很难再现或发现,尤其是因为大多数调试工具对多任务问题几乎没有支持。在嵌入式开发中,大多数工具仍然专注于静态暂停系统,而不是动态软件行为。相比之下,许多系统都有实时要求,无法停止调试。

  除了寻找症状之外,你当然应该使用你拥有的任何工具及其提供的工具来检查RTOS和应用程序是否存在错误和不当行为。例如,IDE可能支持在调试期间(有时通过插件)轻松检查RTOS对象,甚至可以分析任务的堆栈使用情况。RTOS可以让你在较高的水平上测量CPU使用率,从而确定每个任务平均需要多少CPU时间。一些调试器可以在系统执行时实时显示变量(“实时观察”),尽管这可能不适合快速变化的变量。

  在嵌入式开发中,如果你想了解应用程序和RTOS内部实际发生的事情的可靠时间线,你需要一个能够感知RTOS的跟踪,在事情发生时记录下来,还需要一个工具来帮助你理解跟踪信息。

  站长帮手网(www.linkhelper.cn)

  文章格式化编辑

  繁简体相互转换

  文字挑错功能(1000个错别字词库)

  可定制段前是否空格

  只需鼠标点击

  全傻瓜式操作

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

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

相关文章

一个系统五个场景,vivo的IoT能否以“慢”取胜?

近年来物联网声浪喧嚣尘上,但其实从移动互联网到IoT只有一步之遥。原因在于手机可以很好的完成“控制中枢”的作用,以手机为核心在IoT领域“开枝散叶”是目前行业的主流选择,这也是小米、华为等手机巨头在IoT领域如鱼得水、产品众多的重要原因…

企业如何防备密码攻击

在身份安全周,了解密码在网络安全中的重要性很有必要,如果您不小心,密码很容易被泄露。ManageEngine ADSelfService Plus如何帮助强化密码并增强企业组织安全性的呢? 现在是 2022 年——密码在今天仍然适用吗? 技术…

Docker(九)—— Docker 网络

我们之前通过端口映射实现过外部主机对容器的访问, 那如果想要实现两个容器之间的通信怎么办?用已有的经验,是像图中蓝色的线那样走吗? 一、Docker0网络 我们运行一个容器,进入容器内部后发现容器也有自己的IP地址。 而…

磁盘占用高问题如何排查?三步教你搞定

作者简介:杨嘉力,OceanBase开源内核高级工程师。 通常情况下,数据库对磁盘的占用量会随着业务的接入时间和业务数据量大增而不断上升,导致磁盘空间不足,进而发生数据无法写入、数据库无法重启等问题。这时我们就需要排…

CENTOS上的网络安全工具(十三)搬到Docker上(1)?

鉴于在集群上构建安全工具的情况越来越频繁,并且现在一些安全工具也提供了Docker形式的部署,再停留在虚拟机yum的部署方式似乎已经不太合时宜了。所以在再一次碰到一个安全工具需要使用docker安装的时候,我们毅然(被逼&#xff09…

[附源码]SSM计算机毕业设计中小企业人事管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]Python计算机毕业设计安庆师范大学校园互助平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

C语言学习记录(十二)之字符串和字符串函数

文章目录一、字符串和字符串I/O1.1 定义字符串1.1.1 字符串字面量(字符串常量)1.1.2 字符串数组和初始化1.1.3 数组和指针1.1.4 数组和指针的区别二、字符串输入2.1 分配空间2.2 gets()函数 (不建议使用)2.3 gets()的替代品2.3.1 fgets()函数(和fputs())2.3.2 gets_s()函数2.3.…

【推荐算法毕业设计源码】个性化学习推荐网站的设计及实现丨可定制

登录该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍: 二、文档学习资料: 三、模块截图: 四、开发技术与运行环境: 五、代码展示: 六、数据库表截图&#x…

UE4 GIS Cesium for Unreal插件的使用 教程

效果:(成都郫都区某区域的运行场景) 步骤: 1.到虚幻商城搜索 cesiuml,点击Cesium for Unreal 打开后可以看到目前支持的版本有4.26-4.27和5.0 将其安装到引擎 大概0.2G 2.下载完成后,打开4.26版本的虚幻编…

Study Git - Shell command with Git

前言 这一部分内容主要记录git使用时的重要命令&#xff0c;文章参考&#xff1a; MIT Missing classGit Pro Basic git help \<command>: get help for a git commandgit init: creates a new git repo, with data stored in the .git directorygit status: tells yo…

pytest学习和使用9-fixture中conftest.py如何使用?

9-fixture中conftest.py如何使用&#xff1f;1 引入2 conftest.py简介3 conftest.py特点4 实例4.1 conftest.py4.2 test_conftest1.py4.3 test_conftest2.py5 conftest.py优先级1 引入 之前学习使用fixture前置实现用例的登陆&#xff0c;当时在一个脚本中实现的&#xff1b;那…

基于PHP+MySQL学生创新作品展示系统的设计与实现

MySQL学生创新作品展示系统的基本功能包括用户注册登录,发布作品,查看作品和对评论评论以及在线留言等信息。 PHP本科学生创新作品展示系统是一个服务类型的网站,系统通过PHp&#xff1a;MySQL进行开发,分为前台和后台两部分,前台部分主要是让大学生查看和发布创新作品使用的。…

N3-PEG-MAL,Azdio-PEG-Maleimide,一种点击化学PEG试剂

击化学PEG试剂叠氮-聚乙二醇-马来酰亚胺&#xff0c;该化学试剂其英文名为Azdio-PEG-Maleimide&#xff0c;&#xff08;N3-PEG-MAL&#xff09;。所属分类为&#xff1a;Azide PEG Maleimide PEG。 化学试剂叠氮-PEG-马来酰亚胺的分子量均可定制&#xff0c;有&#xff1a;N3…

音视频开发面试题集锦

下面是 2022.06 月音视频面试题集锦内容的节选&#xff1a; 一、如何根据 NALU 裸流数据来判断其是 H.264 编码还是 H.265 编码&#xff1f; 1&#xff09;通常我们不是根据 NALU 裸流数据中的信息来选择解码器&#xff0c;而是根据媒体封装层的信息来确定解码器。 媒体封装层…

理解TCP协议三次握手、四次挥手、流量控制、拥塞控制 、重传机制

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 计算机网络 &#x1f308; 每日一语&#xff1a;真正的勇气是&…

Mac 常用软件汇总

开发工具 1、Android Studio Android开发工程师对这个玩意是又爱又狠&#xff0c;爱它的灵活自由&#xff0c;恨他的放纵不羁。 2、Sourcetree git 图形化操作工具。 3、IntelliJ IDEA 开发Java项目神器。 4、Serial 串口调试工具。可以打印一些日志信息。 5、Navicat …

Python与pycharm-----windows安装与运行

目录 1.python下载 2.Python安装 3、安装并配置pycharm 1.python下载 上python官网下载。很多计算机自带python&#xff0c;如果不自带的话&#xff0c;需要官网下载。 选好版本&#xff0c;最好为3.7版本的。 2.Python安装 需要记下安装路径&#xff0c;免得后续找不到&am…

【算法系列】非线性最小二乘求解-梯度下降法

系列文章目录 【算法系列】卡尔曼滤波算法 【算法系列】非线性最小二乘求解-直接求解法 【算法系列】非线性最小二乘求解-梯度下降法 【算法系列】非线性最小二乘-高斯牛顿法 文章目录 系列文章 文章目录 前言 一、梯度下降法&#xff08;GD&#xff09; 二、最速下…

深度优先与宽度优先搜索(python)

算法原理 1、宽度优先搜索&#xff1a; 宽度优先搜索算法(Breadth First Search&#xff0c;BSF)&#xff0c;思想是&#xff1a; 从图中某顶点v出发&#xff0c;首先访问顶点v在访问了v之后依次从左往右访问v的各个未曾访问过的邻接点&#xff1b;然后分别从这些邻接点出发依…