实时嵌入式系统软件调试常见问题分析_技术文章_行业资讯_武汉华和机电技术有限公司
设为首页 | 加入收藏 | 联系我们
  • 解决方案
  • 杆塔betway体育
  • 机械安控
  • 扬尘betway体育
  • 边坡betway体育
  • 大坝betway体育
  • 高支模betway体育
  • 基坑betway体育
  • 建筑betway体育
  • 桥梁betway体育
  • 隧道betway体育
  • 成功案例
  • 服务中心
  • 个性服务
  • 技术支持
  • 资源下载
  • 关于华和
  • 华和介绍
  • 华和历程
  • 联系华和
  • 人才招聘
  • 行业资讯
    information center
    技术文章
    当前位置:首页 > 行业资讯 > 技术文章
    实时嵌入式系统软件调试常见问题分析
    作者:华和技术 点击量: 发布时间:2015-10-29
    从历史角度上来看,嵌入式应用代码的调试流程可以分为两类。第一类调试流程是回答 “我的代码现在执行到哪里?” 的问题。当开发商依靠打印语句或者LED的闪烁来指示应用程序执行到某个节点的调试方法时,往往就属于这种情形。如果开发工具支持这种调试方法,可以沿着应用应当程序应当执行的路径插入断点。第二类调试流程是帮助回答“我看到的这一数值是从哪里来的?”这一问题。在这种情况下,人们往往依靠寄存器显示窗口观察变量信息、处理器内存的内容。人们还可以尝试单步执行,并且观察所有这些数据窗口以了解某个寄存器状态何时出现错误,内存位置何时得到错误的数据,抑或指针何时出现了误用。

    当开发商写完全部代码后,如果无需了解网络基础设施,也没有操作系统的任务调度需要考虑,那么就可以利用这些调试方法使一个应用程序运行起来。然而,现在的情况并非如此。嵌入式处理器以超过600 MHz的速度运行,并且拥有可支持Ethernet和USB等协议的嵌入式外设,它们支持功能齐备的操作系统,例如uClinux,而且这些操作系统所调度的各种应用程序是由数千行代码构成。使用打印语句和利用LED来调试是不现实的,因为现在常常有如此之多的功能在执行是不可能的,或者它们会影响标准I/O口,从而造成处理器性能大幅度下降。

      也可能发生这样的情况:处理器的工作速度是如此之快,以至于LED的亮灭速度会快到人眼无法察觉。另外现代的嵌入式系统通常支持断点的设定,但是伴随这些处理器所运行的代码数量,使得这种类型的断点调试难以驾驭。中断和多线程系统在代码的任何一点上设置一个断点,可能都无法指示系统的正确状态。由于断点设置在物理内存的某个地址上,索引不必了解线程的状态。如果使用寄存器显示方法,那么局部变量窗口和内存窗口都将有助于隔离出所载入的不恰当的量值,但是,由于这些是静态化的工具,不能给出有意义的运行中的调试信息,其适用性也常常很有限。

      实时嵌入式系统软件最常见的调试问题可以大致划分为如下几类:

      1. 同步问题

      2. 内存和寄存器讹误(corruption)

      3. 与中断相关的问题

      4. 硬件配置问题

      5. 异常情况

      同步问题

      在任何系统中,只要有多串序线程或者进程都在运行,而且是异步共享数据,则系统必然存在同步问题。对于共享数据的全部操作必须是原子化的,也就是说,只有在一个线程或者进程完成对数据的操作后,其它的线程才能对数据进行操作。

      同步化方面的问题常常是很难进行调试的,因为它们取决于时序,是随着软件对数据的操作而随机出现的。幸运的是,这些问题可以通过恰当地保护任何共享数据来避免。大多数的实时操作系统可以提供同步化原语。开发商 可以使用最适当的机制来保护共享数据,而不至于影响系统的性能。如果数据在多个线程之间共享,则开发商将有如下的选择:

      a. 关闭调度器以便当前的线程永远不会被其它线程抢先。(无调度区)

      b. 使用信号两(Semaphore)或者互斥信号量(Mutex)来保护共享数据。

      c. 利用关键区域来进行保护,即屏蔽所有的中断。


      开发商必须从性能出发来选择恰当的技术选项。关闭调度器,将防止任何一种环境的切换,从而使得现在的线程能继续执行,直到调度器重新打开为止。这种方法有一个负面的影响:它将阻止任何准备好运行的高优先级的线程。这一现象被称为优先级倒置。将中断关闭是最安全的方法,对于执行时间短的情形来说是理想选择。于是,最差情况的中断延迟就是所有未发生中断的持续时间的总和。在硬实时系统中,一般来说,一个中断功能可以被关闭的时间存在上限。

      调试的一个小窍门就是,如果共享的数据被破坏,则编程者就应当首先检查出任何一种多个线程或者中断对共享数据同时进行的操作。如果线程和中断共享了数据,那么在线程代码中必须将中断关闭。如果数据在多个中断例程之间共享的话,则中断也应当被关闭,因为高优先级的中断可以抢先于低优先级的中断。

      在多线程的系统中,高优先级的线程可以抢在低优先级的线程之前执行。因此,如果数据在多个线程间共享的话,则必须采用某种恰当的机制来保护被共享的数据。

      另外一个同步化问题则与线程优先级的不恰当的分配有关。应当确保系统的初始化线程在引导时间内就启动,并在生成其它的优先级更高的线程之前,完成整个系统的初始化。例如,如果一个用于配置一个器件的低优先级现场被一个使用该设备的高优先级的线程抢先后,配置可能会完成,并可能会造成设备的故障。为了避免这种情形,开发商应当使用操作系统所支持的信号量或者其它同步化的原语。 

    关于我们

    华和技术(WONHERE)顺应市场发展趋势,作为智能硬件一站式解决方案提供者,基于低功耗嵌入式平台专注采集、控制、通讯一站式解决智能硬件研发,坚持以持续创新为客户不断创造独有价值。成功案例遍布检测betway体育仪器、环境工程与自然、工业控制与自动化、智能交通能源、北斗位置服务、国防及医疗电子等领域。致力于通过方案开发帮助客户:缩短开发周期,降低开发成本,提高投资效率。致力于通过技术服务、项目管理和集成化的采购、生产帮助客户提高供货质量和降低企业运营成本。

    华和技术(WONHERE)有十余年的嵌入式项目研发及管理经验,团队致力于平台级产品的研发和检测、betway体育、控制类系统方案的项目定制。华和技术是武汉大学研究生培养基地、湖北省仪器仪表学会理事单位,拥有嵌入式系统开发领域的多项知识产权。华和技术以打造中国低功耗嵌入式平台、物联网智能硬件开发及技术支持中心为使命。我们的产品有:ARM335x嵌入式板卡、ARM3530嵌入式板卡、ARM3730嵌入式板卡,X86嵌入式平台、Power PC嵌入式平台,以及仪器仪表、环境工程、智能装备、智能交通、行业嵌入式系统方案。产品咨询请与华和技术(WONHERE)联系。