微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 为嵌入式应用构建黑盒子

为嵌入式应用构建黑盒子

时间:08-31 来源:互联网 点击:
处理器开始执行适当的中断代码。举例而言,您会屏蔽处理网络连接的中断。尽管处理器停止了,但它仍会为通过网络连接的数据提供缓冲。

这又是一个调试变得更为复杂的实例。某些中断与定时器类似,执行后会自我重设,这样它们就能再次触发。就中断监控马达而言,这是我们所希望的行动。马达由于运动而处于可能面临风险的位置;不过,中断再次触发就可将马达带回其目的地从而避免风险。

不过,就调度程序中断而言,重设意味着调度程序将继续尝试处理队列中的下一个任务。如果已经计划安排了一系列运动--您打开照相机盖时,程序会设置一系列运动并伸出镜头--调度将持续进行,保证每个任务依次进行。此外,您除了关心完成当前任务之外,还希望清空整个任务队列。更现实地说,您可能希望根据任务将以上两项工作都完成。如果仅将一系列运动的一部分放在队列上,那么最后放置的任务实际上会使设备面临风险(如照相机快门打开)。

您如何处理上述问题取决于任务的粒度。如果您有高级别任务,如"打开镜头",那么上述任务结束后可能不致使设备面临风险。不过,如果您的任务粒度更强,那么在描述所有执行高级别任务所需的初始步骤并完成目前的低级别任务情况下,您的系统可能就会面临风险。

关键在于不要让设备面临风险,而是要继续执行任务,直到设备脱离风险为止(图)。在本例中,您的调度程序必须清楚它可在应用停止时继续执行。由于时间关键性中断掩码是系统寄存器,因此您可在应用内对其进行存取,这就使您能够根据其状态有条件地进行操作,并使您有机会随时启用或禁用各种时间关键性中断。当确定如何进行下一个任务时,管理器必须检查以确保处理器是停止的,并确定系统目前是否面临风险。如果是的话,调度程序应执行下一个任务。如果否的话,调度程序可以选择停止。如果队列为空而系统面临风险,那么调度程序必须生成一个任务,保证让系统脱离风险。此外,如要取消其生成的额外任务,那么调度程序必须将系统恢复到面临风险的状态。

请注意,如果特殊中断(如将系统带回断电等已知安全状态的中断)依赖于应用代码的话,那么它们可能需要额外的修改。举例而言,我们照相机的打开/关闭按钮要求应用完成对当前已缓冲影像的处理。如果应用停止,那么处理就不能完成。中断实际上需要将处理器带出停止状态,从而让系统脱离面临风险的状态。

尽管时间关键性中断增加了系统设计的复杂性,但其也简化了某些类型的调试。假设您对应用很有信心,但需要调试与硬件相关的问题。一般说来,控制实际操作所需的代码量较小,至少与影像处理所需的代码相比如此。一个 50MHz 的处理器每秒可执行五千万个循环。举例来说,如果机械操作用两秒时间,那么您必须在 1 亿个周期的线迹缓冲中找到您需要的代码。不过,您也可以停止处理器,用屏蔽的时间关键性中断来操作硬件。这时,您的线迹缓冲就没有应用代码了,这就使查找程序错误简单得多。当然,这种方法不会暴露硬件和应用互动造成的错误。

自我启发

另一类调试外设是自跟踪处理器的外设。许多数据都可不经处理器处理。上述外设可过滤、压缩或评估数据,这样您就可通过有限的带宽总线(如 JTAG)发送更多的信息。

自跟踪外设的一个实例是不连续跟踪。它不是跟踪每个指令的指令指针值,而是仅在 IP 由分支等改变时跟踪。迭代数量可用环路计算,这就可更深入地了解执行路径。跟踪总的运动使您能够致力于线迹上的其他类型信息。

不连续跟踪可快速显示您的程序开始在代码外执行的点。您还可用线迹作为描述器,这就给出通路和支路之比,可用作条件或整体程序执行。

黑盒子

调试外设的演进自然使您获得"黑盒子"设计。利用完整的线迹和修改功能,我们可以创建线迹缓冲,帮助您了解系统在执行任何一点上的状态。如果您在停止系统时全面了解了系统的整个状态,那么您可利用线迹来正确重建以前的状态。这一功能正好像您可在调试环境中无数次点击"取消按钮"一样。

换言之,目前的处理器有着内置的黑盒子。主要限制在于跟踪存储。新型硬件工具提供了较大乃至无限的缓冲(如果附加硬盘的话)以在芯片外存储线迹缓冲,从而解决了这一问题。如果芯片外总线带宽足以发送您重建处理器任何时间状态所需的所有信息,那么您就拥有了黑盒子。

不妨设想这样的情况,客户系统总是不断崩溃,而且好像没办法重建崩溃。您可给系统添加跟踪存储工具,启用黑盒子。系统崩溃时,会告诉存储工具停止记录(如果系统不能自动做到这一点,您可通过按键进行)。随后客户给您打电话,您收取存储工具。这样您就得到了所需要的东西:故障的记录实例。您现在就可以致力于找到不断发生的问题并解决问题了,而不必再为重建问题而花费数周时间。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top