工具类–掌握半主机

半主机是ARM处理器支持的调试功能,它允许嵌入式目标通过调试接口访问主机PC上的I / O功能。 I / O功能最常与printf一起使用,以在调试环境中将文本数据传输到虚拟终端,但也可以用于文件访问和键盘输入。

半主机功能通常是通过与标准C库连接的特殊库来实现的。在许多情况下,默认情况下该库包含在开发环境中。例如,在Renesas Synergy(TM)平台e2 Studio中,–默认情况下,specs = rdimon.specs选项包括在内,其中包括使用半主机的挂钩。开发人员所需要做的就是包括标准库,并且模块中的所有printf语句都通过半主机功能进行重定向。

在最低级别上,通过触发SWI指令(软件中断)或已被SVC指令(监控调用)代替的方式在ARM内核中实现半主机。在某些部分上,也可以使用BKPT指令。执行指令后,处理器将停止执行应用程序,并等待调试器访问处理器并检索需要传输到主机的内容。

在表面进行半主机托管似乎是个好主意。并非所有嵌入式目标都具有连接键盘,屏幕或文件系统的I / O功能。半主机提供了在主机环境中具有此功能并使用调试器传输数据的能力。但是,半主机存在几个主要问题,这使我几乎不惜一切代价避免了这种能力。

首先,半主机很慢。 CPU停止运行,调试器必须访问内核,转移到主机,然后恢复操作,这一事实导致执行延迟,可能需要数十毫秒!这比大多数系统的滴答声持续时间更长,并且可能严重破坏软件的实时性能。例如,下面是我用来测量打印时间的屏幕截图“Hello World!\r\n”超过半主机。如您所见,它花费了60毫秒!

其次,启用半主机后,处理器将暂停并等待调试器。如果调试器未连接到系统,则处理器将无限期停止!这意味着半主机只能在调试期间使用,开发人员必须将其半主机功能编译出来用于生产。否则,他们的设备可能会在等待调试器检索信息并恢复操作时挂断最终用户。这种阻止行为令人失望,但开发人员需要忍受这一事实。

最后,半主机不是确定性的。执行时间可能相差很大,并有可能使开发人员疯狂,因为他们试图跟踪软件中真正由半主机引起的奇怪行为。在实时应用程序中,确定性至关重要,应该不惜一切代价避免任何可能影响确定性的事情。

半主机是一个非常整洁的功能,在很多情况下对开发人员肯定有帮助。但是,在大多数情况下,’我们发现这不仅仅是资产,更是一个问题。都一样’对于我们来说,开发人员了解我们可用的工具和功能非常重要。我仍然建议您花一个小时左右的时间来探索工具链中存在的半主机功能,并了解它们如何影响时序以及您开发系统的能力。

4 thoughts 上 “Tools –掌握半主机”

  1. 这就是为什么您应该熟悉Arm的原因’ITM,DWT和ETM调试功能(在许多使用Arm的SoC实现中都可用)及其具有从跟踪端口发送信息的能力。您只需通过一条指令写入寄存器即可发送186至32位信息。一个限制是地址具有特权。但是,许多嵌入式应用程序始终在特权模式下运行。 IAR的以下文章将更详细地介绍。也可以从其他供应商工具访问这些功能。通过学习Arm处理器体系结构的软件设计课程,您还将意识到这一点。

  2. 我们对printf的运行速度也有同样的担忧,因此决定开发自己的半主机系统。正如David所说,在运行于72MHz的STM32F103微控制器中,有可能通过SWO(DWT)发送一个HelloWorld事件,并且该过程仅需要150ns的微控制器执行时间(写整数所需的时间)。当然,通过UART(SWO)发送它需要花费更多时间,但DWT幸运地具有FIFO。
    Segger的JLink模拟器也有一个名为SystemView的免费工具。

  3. 我只是喜欢Segger RTT,而不是我的小资产J-Link Edu。我们花了16.75美元才能打印以下字符串“Hello World Segger RTT \ n”我的STM32F030F4 MCU的时钟频率为48 MHz。

  4. 我的另一个选择’如果以后使用ITM,将会在以后发布’在零件上可用。一个简单的文本语句,例如“LED On!” or “LED Off!”使用J-Link板载(OB)大约需要5微秒。

    感谢您的评论!

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.