uC/Probe 是一个PC端程序,Micrium公司设计用来给嵌入式系统做可视的应急援救。uC/Probe可以轻松的监控并控制目标单片机,通过一个“仪表盘”(由视觉对象组成比如表盘,折线图,滑块等),被映射到应用程序变量上。
uC/Probe仪表盘(www.micrium.com)
uC/Probe 可通过多种物理连接与目标单片机通信,比如JTAG调试器、UART、以太网或者Wi-Fi。无论物理连接是什么,协议都一样;uC/Probe只是发送命令到目标,来读写单片机内存位置。
构造一个“仪表盘”屏幕很简单,第一步是要下载目标程序的符号表(比如ELF文件)到uC/Probe“符号浏览器”上,如此的话uC/Probe就获知了每个目标变量的物理内存地址。接下来所需的可视对象可从“工具箱”中被拖拽出来,在仪表盘屏幕上确定位置和大小。可视对象可以进一步配置属性,比如颜色,范围,缩放等等。最后每个在仪表盘上的可视对象被映射到一个特定的目标程序变量,通过把变量从符号浏览器中拖动并将其置于可视对象上。
给仪表盘可视化对象指定一个应用程序变量 (www.micrium.com)
一旦可视对象被定义并指定符号地址,仪表盘就可通过点击“Run(运行)”来启动。现在uC/Probe循环发送命令到目标来访问被映射的符号(比如读/写单片机内存)并相应的推动仪表盘上可视对象显示。
两用调试器
作为一个援救调试器,uC/Probe超越基于文本显示工具链的典型单片机的限制。例如,用uC/Probe你可以将变量值图形化随着目标程序运行的时间推移。这比沉闷的一步步通过断点和观察变量或者是这破译在屏幕上飞奔的PRINTF数字流容易的多。
除了调试,多亏的以太网连接选项,uC/Probe可以在物联网应用中有双重用途,通过在网上提供简易途径监控和控制一个嵌入式应用。
唯一的警告是使用以太网选项要求: 目标单片机执行一个以太网驱动和UDP服务器来与uC/Probe通信。实际情况是以太网选项是一个用于很多内存和MIPS的大型单片机才是可行的,当同样运行目标应用时支持一个网络堆栈。然而,利用WIZnet以太网智能芯片的优势,uC/Probe使小单片机(比如8-16位)用于物联网应用成为可能。WIZnet内置“硬件协议栈”卸载网络负担并极大程度上减少了应用程序的干扰。让我们演示一下这个概念,通过展示用uC/Probe通过Arduino在网络上的工作是多么简单。
将硬件方式联网
Arduino已经得到了基于WIZnet硬件和软件的很棒的支持。硬件选择包括来自WIZnet的和许多其他供应商的扩展以太网插板(开源设计),WIZnet Wiz820io模块(集成了WIZnet芯片和RJ45 Magjack)和组合Arduino+以太网SBC,例如Seeed Studio 的Seeeduino Ethernet.
Wiznet W5200 以太网插板和Wiz820io模块 (www.shopwiznet.com), Seeed Studio的 Seeeduino Ethernet (www.seeedstudio.com)
更棒的是,大量的久经时间考验的软件,贡献来自Arduino社区,尤其包括一个来自WIZnet以太网芯片的UDP驱动器。
所有这些都需要一些代码加到你的Arduino应用程序上 ,来处理uC/Probe的对话。这不是大问题因为这只关乎读写内存位置。
虚拟化
使用符号表来将视觉对象映射到你的应用程序变量上,这对于调试很有意义。每次程序修改(新的更改) 都改变了内存地址被指定到变量上的时候,它不需要重载uC/Probe符号浏览器。
对于物联网的应用,一个便捷的选择是采用了一个“虚拟”地址计划。从技术上讲,它意味着在一个uC/Probe视觉对象与Arduino应用变量的映像 被应用在运行本身时决定而不是在编译时的编译器决定。
虚拟方法简化了应用程序&仪表盘的开发,由于uC/Probe符号浏览器最初只需要加载一次,并不随着每次程序(符号地址)的变化。应用程序也获得了动态分配的能力,像变量(单片机内存地址)被映射到仪表盘的视觉对象。虚拟的映像计划也可用其他的编程语言(比如BASIC,Forth),并不生成一个用户可访问的或者适当格式的符号表文件。
服务于人
让我们看一下uC/Probe在以太网上与Arduino一起工作是多么统一。
首先打开在Arduino IDE上打开‘uCProbe_Server_Arduino’程序,更改网络参数(MAC地址,IP地址和端口号)来匹配你的局域网设置。
设置演示MAC地址,IP地址和端口号
编译程序并下载到你的Arduino上,然后打开一个终端窗口来坚持程序运行。当程序开始显示一条‘Waiting for uCProbe packet…’信息时,并循环继续显示滑块变量值时。你可以通过ping 你指定的IP地址来核实以太网的连接。
接下来前往 www.micrium.com 去下载并安装uC/Probe的评估版本,运行它然后File->Open ‘Arduino_uCProbe_Demo.wspx’.这个.wspx(工作区)文件定义了一个带有可视对象变量的仪表盘,包括一个表盘和滑块,以及有图形,按钮,数字字段等等。
你可以点击对象去检查并修改他们的内容。同时,点击‘Symbol Browser’去看下‘ArduinoMap.out’虚拟地址的符号表。在这个演示中是个Arduino应用变量(每个类型byte,word或者long)可被映射到仪表盘变量VAR01_type 到VAR10_type之间(type = 08u, 16u or 32s)。
虚拟地址变量被定义在 ArduinoMap.out 符号文件中
为了完成设置点击uC/Probe“Settings”图标并键入你指定给Arduino的TCP/IP网络参数(IP地址和端口号)
设置‘Remote Host’和‘Remote Port’来匹配你的Arduino设置
现在点击uC/Probe ‘Run’图标,关闭评估版本警告,仪表盘开始监控Arduino应用变量。扭动不用的仪表盘按钮盒滑块(都映射到单个变量)Arduino会在终端上显示活动。也要注意面板灯和交通灯图像是怎样激活并基于他们所相关的变量值来改变颜色的。
演示应用仪表盘工作中
盖子的下面
让我们仔细看一下Arduino应用时怎样连接uC/Probe的。在这个例子中,应用归结为…
演示应用
在Arduino应用中,一个“虚拟地址”表在uC/Probe ArduinoMap.out符号文件中映射应用变量(滑块或者表盘)到变量,反过来在仪表盘屏幕上链接可视化对象。
映射应用变量到在ArduinoMap.out 符号表中被定义的uC/Probe变量。
虚拟到物理的映射被定位。在虚拟地址表(va[0])中第一个条目与ArduinoMap.out (比如VAR01_08u, VAR01_16u o或者VAR01_32s)中第一个变量(组)一致。记得uC/Probe和应用链接是通过Arduino内存参考。在应用虚拟地址表中的条目定义了内存地址当ArduinoMap.out变量类型,指定到一个仪表盘可视化对象定义被转换的字节数(分别是1,2或者4)。
玩起来
你可以用这个演示作为你自己的uC/Probe连接Arduino应用的模板。这有些裁代码用于你自己要求的 办法。
为了看清楚幕后工作室怎样的,你可以取消代码注释并在Arduino和uC/Probe之间显示UDP 传输 。
uC/Probe 请求和应答包交换
你可以看到uC/Probe请求读0×0004字节从地址0×00000044开始,是应用“表盘”变量的虚拟地址。Arduino应答0x000002A7,是679的十进制。
注意使包显示显著的减少了服务器的吞吐量。一旦你做实验,为了加快速度你可以注释掉包显示代码。这也减少了代码大小,仅有8,248字节,还有32KB变量的四分十一多一点。
继续阅读: http://blog.iwiznet.cn/?p=5598
更多信息与我们交流:
WIZnet邮箱:[email protected]