历史上的今天
返回首页

历史上的今天

今天是:2025年05月08日(星期四)

正在发生

2021年05月08日 | 嵌入式软件跟踪信息嵌套缓存机制和解析机制的设计

2021-05-08 来源:eefocus

嵌入式系统是当今计算机软件领域的热点,实时性是嵌入式系统的基本要求。随着嵌入式技术的不断发展,在嵌入式应用的不断增长以及嵌入式系统复杂性不断提高的情况下,调试阶段在整个系统开发过程中所占的比重越来越大。调试环境和调试技术直接影响软件开发的效率和质量,高效的调试系统可以大大减少嵌入式系统开发的时间,减轻系统开发工作量。


跟踪调试系统主要有JTAG在线调试和运行时跟踪调试两种方式。JTAG在线调试在调试实时系统时有很大的局限性,如通过断点查询完参数后系统无法再按照正常时序运行,以及无法检测到系统顺序化执行的变迁状态。运行时跟踪调试采用软件插桩技术,通过在程序中嵌入跟踪点,开发人员可以在程序运行过程中通过跟踪点实时观察输出的信息,如各模块之间进行交互的信息以及程序运行的顺序等。


本项目设计的实时跟踪系统基于运行时跟踪调试手段,采用ARM11系列处理器作为硬件开发平台,运行于Nucleus实时操作系统上。Nucl eus实时操作系统为抢先式多任务操作系统,在程序执行过程中,低优先级任务会被高优先级任务抢占,可能出现跟踪任务冲突而导致跟踪信息相互覆盖、乱序等问题。特别是在跟踪信息量较大时,一旦超过传输峰值就会造成跟踪信息的丢失。该实时跟踪系统采用特殊缓存机制和解析机制,能够解决跟踪信息丢失的问题,实现跟踪信息的完整、有序传输。


1 原始跟踪方案


实时跟踪系统由跟踪信息缓存单元、传输控制单元和PC端解析单元组成,如图1所示。其中,跟踪信息缓存单元负责对跟踪信息的组装和跟踪缓存的管理,传输控制单元负责将跟踪信息从跟踪缓存搬移到PC端,PC端解析单元负责对跟踪信息进行解析。





跟踪缓存管理机制是指如何管理该跟踪缓存的读写权限,如何记录读写索引的变化。在有跟踪备份缓存的跟踪方案中,跟踪缓存管理机制还负责对备份缓存的管理。在跟踪系统中,所有跟踪信息在跟踪点输出时被封装成为固定帧格式(消息头+消息内容),写入到跟踪信息缓存单元中同一个长度为X字节的环形队列。


由于Nucleus多任务操作系统下实时跟踪系统中跟踪源主要分为低级中断、高级中断/定时器和任务等,因此在对跟踪源中的跟踪点进行跟踪的过程中,不同优先级的跟踪点可能出现对全局跟踪信息缓存的竞争。跟踪冲突场景如图2所示。跟踪信息缓存单元中仅设置了一个写指针访问跟踪信息缓存,保证了跟踪信息的有序性,但不同优先级跟踪源进行切换时会产生冲突,需要对写指针现场进行保护。





由于阻塞高优先级任务会造成系统流程异常,在产生冲突时,为了保证跟踪信息完整性,同时又不能阻塞高优先级任务,只能丢弃高优先级任务中的跟踪请求。当操作系统任务频繁切换时,会出现较多跟踪信息丢弃的现象。跟踪信息丢弃现象的特征是跟踪信息整条丢失、连续丢失(主动抢占任务中的所有跟踪),且跟踪信息丢弃与跟踪信息传输损耗无关。因此,跟踪系统中的缓存机制有待优化。


2 跟踪优化方案一


2.1 物理缓存管理机制


物理缓存管理机制采用含跟踪头、跟踪信息内容和跟踪尾的跟踪信息帧格式,在跟踪源数据相互被打断的过程中不考虑跟踪信息的完整性,按照打断的优先级顺序将跟踪信息写入跟踪缓存。跟踪信息写入场景如图3所示。任务1跟踪信息写入跟踪信息缓存过程中,被高级中断/定时器打断。高级中断/定时器将其跟踪信息头写入当前写指针处,直至整条跟踪信息写入完成。任务1获得执行权,其未写完的跟踪信息紧接着高级中断/定时器跟踪信息尾部写入,直至整条跟踪信息写入完成。





2.2 传输控制机制


实时跟踪系统通过串口进行PC端和ARM子系统之间的通信,传输控制单元描述了PC端和ARM子系统之间的通信流程,它采用DMA总线控制器进行跟踪信息搬移。DMA是一种不经过ARM处理器的CPU而直接从内存中存取数据的数据交换模式。在DMA模式下,CPU只需向DMA总线控制器下达指令,使其处理数据的传送,接收数据传送完毕的反馈信息,从而大大减轻了CPU资源占有率。传输控制单元采取DMA同步中断发送跟踪信息,每次以等长字节传输,将跟踪信息搬移至串口发送寄存器中,再通过配置串口发送寄存器,将跟踪信息发送至PC端解析显示单元。


2.3 递归调用解析机制


根据图4中的跟踪缓存场景,为保证跟踪信息的完整连续性,解析单元采用递归调用的方式解析当前码流。





首先在PC端跟踪信息解析单元开辟一个环形队列(即循环缓存)用于存放串口输出的跟踪信息,通过一个读指针访问该循环缓存并进行递归调用解析。同时在PC端开辟一个大小为N×L的跟踪缓存空间(即N个长度为L的连续缓存空间)用于存放解析出的完整跟踪信息,每一块长度为L的缓存存放一条完整的跟踪信息。申请一个指针数组,用于保存每一个完整内存的起始地址,即记录N×L缓存中每次写指针的变化情况。跟踪信息递归解析函数流程如图5所示。





最后将解析完成的跟踪信息码流转换成为可见字符,在PC机上显示输出。


3 跟踪优化方案二


3.1 备份缓存管理机制


备份缓存管理机制采用含跟踪头和跟踪信息的跟踪信息帧格式,将跟踪信息写入一个大小为N的全局跟踪信息缓存中。为避免在任务切换频繁时当前任务被高优先级任务打断造成数据丢失,申请一个嵌套深度为M的备份缓存来存放高优先级任务跟踪信息。其中,备份缓存区域每块子缓存的长度均为m,设置跟踪忙碌标识位,初始值为0。跟踪源通过调用跟踪系统提供的跟踪接口函数,将跟踪忙碌标识置1,并将当前跟踪源跟踪信息填入全局跟踪信息缓存。完成当前跟踪信息写入操作后,将跟踪忙碌标识置0。若当前跟踪源在进行写入操作,即跟踪忙碌标识为1时,高优先级任务调用跟踪接口,则将高级任务的跟踪信息写入备份缓存中,当前跟踪源继续进行未完成的写操作。每次写完当前跟踪信息,检查备份缓存中是否有数——若有,则将备份缓存中的跟踪信息拷回至全局跟踪信息缓存中(跟踪缓存场景如图6所示),即在当前任务跟踪信息写入跟踪信息缓存时,若高级任务到来,则将高级任务跟踪信息进行封装并写入备份缓存。当前跟踪结束写入操作输出成功后,检查备份缓存中是否存在跟踪信息——若有,则将备份缓存中的跟踪信息回拷至全局跟踪信息缓存中,从而保证全局跟踪信息缓存中跟踪信息的连续性。





3.2 传输控制机制


同跟踪优化方案一中传输控制机制。


3.3 普通查询解析机制


根据跟踪缓存管理机制二,由于全局跟踪信息缓存中跟踪信息呈完整连续分布,解码方式采用遍历查询方式。


首先,在PC端跟踪信息接收单元开辟一个环形队列(即解析前循环缓存),用于存放从串口接收的跟踪信息。


然后在PC端解析显示单元开辟一个解析后循环缓存,用于存放解析后的完整跟踪信息。使用读指针遍历解析前循环缓存,查询到以跟踪头标识X开头的字符串,将其后的完整跟踪信息写入解析后循环缓存中,直至下一次遇到跟踪头标识X,记录解析前循环缓存读索引并保存当前解析后循环缓存写索引。循环以上操作,将解析前循环缓存中的跟踪信息依次解析,并放入解析后循环缓存中。


最后将解析后循环缓存中解析完成的完整跟踪信息码流转换成为可见字符,在PC机上显示输出。


4 性能分析比较


4.1 跟踪优化方案一


将跟踪信息按物理连续存储方式存储数据,即跟踪源在单条跟踪信息组装过程中,通过全局写指针控制跟踪信息写入。所有跟踪点均跟踪当前优先级秩序,对跟踪信息缓存区进行写操作,保证仅有一个跟踪信息缓存,且跟踪源相互抢占时根据优先级高低对跟踪缓存进行写操作。该机制跟踪缓存中的跟踪信息呈现嵌套、打断的不完整码流。


跟踪信息发送机制采取跟踪接口函数中触发传输装置搬移数据。在传输控制单元,通过配置DMA总线,将全局跟踪信息缓存中的跟踪信息搬移至串口寄存器中。PC端接收装置从串口寄存器中取出数据,放入PC端解析单元缓存空间,通过跟踪信息递归解析机制,将不完整的跟踪信息解析为完整连续的跟踪信息。其中每个跟踪信息缓存区尾部都设置一个保护数据区,保护区长度为单条信息最大长度L。


该方案解决了跟踪信息丢失问题,在PC端解析显示单元对不连续码流进行解码。由于该机制在嵌入式跟踪缓存单元中采取物理连续存储数据方式,降低了跟踪软件对ARM系统资源的消耗,保证了在高速运行情况下跟踪系统对ARM处理器CPU的消耗尽可能低。从而避免在高速运行的系统中,由于跟踪系统占用大量CPU导致系统运行速率低。该方案适用于对ARM子系统运行速率要求较高的终端系统。


4.2 跟踪优化方案二


在嵌入式跟踪信息缓存单元申请一个全局跟踪信息环缓存空间,同时申请一组备份缓存。写指针冲突时,高级任务的跟踪信息被写入备份缓存中,当前跟踪源继续将其跟踪信息写入全局跟踪信息缓存。每次写完当前条跟踪信息,检查备份缓存中是否有数——若有,则将其拷回至全局缓存中。该机制根据任务优先级高低来管理写指针,解决了写指针冲突导致跟踪信息不连续的问题。


在传输控制单元,通过配置DMA总线,设置发送目的地址及长度,将全局跟踪信息缓存中的跟踪信息搬移至串口寄存器中。PC端接收装置从串口寄存器中取出数据,放入PC端解析显示单元跟踪信息缓存区域,通过跟踪信息普通查询解析机制,将以X开头并以X结尾的完整跟踪信息解析出来。其中每个跟踪信息缓存区尾部都设置一个保护数据区,保护区长度为单条信息最大长度L。


该方案通过备份缓存机制解决了数据丢失问题,保证了跟踪信息输出的连续性和完整性。但由于备份缓存向全局跟踪缓存进行跟踪信息回拷过程,要大量占用ARM处理器CPU资源,导致该方案在对嵌入式系统运行速率要求高的环境中运行效率较低。


结语


针对现有的跟踪软件运行速率低、跟踪信息乱序、丢失严重等情况,提出了两种解决方案。一种是在ARM端采取物理连续存储方式进行编码,在PC端通过递归调用算法对嵌套跟踪信息进行重新组装,最后将解析后完整的码流转化为可见字符串输出。此方案适用于对ARM子系统运行速率要求较高,且PC端可用资源充足的软件跟踪系统。另一种方案是在ARM端将高级任务跟踪信息写入备份缓存,再通过数据回拷方式将备份缓存中的跟踪信息写入全局跟踪信息缓存区域。该方案在PC端解码时只需查询跟踪头标识进行解码,并将解析后连续的码流转化为可见字符串输出,适用于对嵌入式系统运行速率要求不高且PC端资源有限的软件跟踪系统。


以上两种方案均能保证输出跟踪信息的连续完整性,解决了Nucleus实时操作系统下低优先级任务会被高优先级任务抢占,从而可能出现的跟踪任务冲突而导致的跟踪信息相互覆盖、乱序等问题,为软件开发人员分析定位问题提供了更可靠的嵌入式软件实时跟踪系统,提高了其分析解决问题的效率。


推荐阅读

史海拾趣

ddm hopt + schuler GmbH & Co KG公司的发展小趣事

随着全球对环境保护意识的增强,ddm hopt + schuler公司开始关注绿色制造和可持续发展。公司投入大量资源进行绿色生产技术的研发,成功开发出一系列节能、环保的电子生产设备。这些设备在保障生产效率和产品质量的同时,显著降低了能源消耗和废弃物排放。这一举措不仅提升了公司的品牌形象,也赢得了客户和市场的广泛赞誉。

FutureWafer公司的发展小趣事

进入21世纪后,ddm hopt + schuler公司紧跟数字化浪潮,积极推动数字化转型和智能制造。公司引入先进的物联网、大数据和人工智能技术,对生产线进行智能化改造和升级。通过实时数据监控和分析,公司能够更准确地预测市场需求、优化生产计划、提高生产效率。同时,智能制造也为企业带来了更高的灵活性和更低的成本。

Hitachi Metals公司的发展小趣事

面对数字化浪潮的冲击,Hitachi Metals积极拥抱变革,致力于数字化转型。公司推出了全球级别的物联网平台Lumada,该平台能够为客户提供从企业扩建、价值核查到设备和系统管理的全方位解决方案。Lumada平台的成功应用不仅提升了日立金属自身的运营效率和管理水平,还为客户带来了显著的价值增长。通过Lumada平台,日立金属与全球范围内的合作伙伴建立了更加紧密的联系,共同推动电子行业的数字化转型进程。

蜂鸟无线公司的发展小趣事
采用集成电路的PWM调速电路可以简化电路设计,减少元器件数量,降低制造成本。
敦泰(FOCALTECH)公司的发展小趣事
电冰箱不制冷可能由多种电路问题引起,如电源线路故障(如插头未插紧、插座无电等)、压缩机启动电路故障(如启动器损坏、压缩机线圈断路等)、温控电路故障(如温控器失灵、温度传感器损坏等)或制冷系统电路故障(如制冷剂泄漏、毛细管堵塞等)。建议首先检查电源是否正常,然后逐步排查压缩机、温控器和制冷系统电路。
Entegris公司的发展小趣事

在晶圆盒传输业务上,Entegris与台湾的家登精密之间发生了一场长达数年的专利侵权诉讼。Entegris最终获得了胜诉,家登被要求赔偿超过3,000万美元。这一胜利不仅保护了Entegris的知识产权,也进一步巩固了其在半导体材料市场的地位。

问答坊 | AI 解惑

usb 主机在什么情况下会不停的给设备发送复位信号呢?请高手些指教哈!

我现在的设备端不停的收到复位信号,接着是超时,不知道是在什么情况下主机才会发复位信号?…

查看全部问答>

这样的报表用怎么做?

数量    厂家     数量     型号      数量                           n ...…

查看全部问答>

wince 应用程序安装请教

魅族安装应用程序是这么做的。 四、发布应用程序 …

查看全部问答>

求购《Tornado/VxWorks入门与提高》

求购,《Tornado/VxWorks入门与提高》,哪里能买到呢? 网上的书店找了好多都是缺货,那位仁兄帮帮忙 谢谢 mryanzh@126.com…

查看全部问答>

EVC怎么控制菜单的checked属性?(基于对话框)

我用evc做了一个基于对话框的工程,我用代码来加上Menu,但我怎么控制菜单的checked属性呢? 我就是想实现选择一个菜单后有个小勾,就想windows里面的查看方式一样,比如列表,缩略图,小图标什么的,选择后有小勾的效果。 谁知道啊?…

查看全部问答>

STM32无法更新程序

本人购买了一块STM32F103ZET6评估板,配有KEIL3和ULINK下载器。后因需要防止程序被读出,想尝试下读保护功能,于是在程序中添加了使能读保护的代码。板子复位后正常运行,查询读保护状态位已置位,但无法更新程序。查阅资料得知使能读保护后 ...…

查看全部问答>

如何利用FPGA做高阶FIR滤波器设计

小弟最近在做毕业设计,用到了高阶FIR滤波器,一头雾水,查找了一些资料后,了解了一种方法:利用分布式串并结合的算法可以实现。里面有用到FPGA的查找表和流水线,我对FPGA不怎么熟悉,不知道怎么调用这两个东西,或是自己设计?怎么设计?哪位大 ...…

查看全部问答>

EEWORLD大学堂----电源设计小贴士39:同步整流带来的不仅仅是高效率

电源设计小贴士39:同步整流带来的不仅仅是高效率:https://training.eeworld.com.cn/course/479 电源设计小贴士39:同步整流带来的不仅仅是高效率 …

查看全部问答>

刚开始学verilog 问个问题啊

quartus II 中 写verilog的时候,敲enter键有时会出现箭头,怎么设置才能消除箭头??求解…

查看全部问答>