![基于Proteus的Arduino可视化设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/214/32375214/b_32375214.jpg)
1.6 Visual Designer仿真与调试技巧
在开发嵌入式系统时,可能希望在程序运行或结束时对其进行测试,如果程序出错,则还需要调试程序,以查找和修复错误。使用Visual Designer实现这个过程非常简单。下文总结了使用Visual Designer仿真(“仿真”也可称为“模拟”)、调试和测量所需的基本技能。
1.6.1 系统级仿真
当在流程图程序中添加外围设备并控制它们时,即正在构建嵌入式系统,简而言之,会有微控制器板和一些代表外围设备的硬件部件。运行系统仿真是Proteus的真正威力,对于微控制器及其外围设备的仿真,完全可以在Proteus软件套件内建立工程,实现测试、交互、调试的仿真。
1.开始仿真
按动画控制面板上的播放按钮或F12快捷键,程序将开始编译,同时状态栏上显示仿真进度,如图1-73所示。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_38_1.jpg?sign=1739689540-uW67xsDFjtxRSypb9ijGpH3JdggDbN9J-0-a019e59e64b46e03fd0f18150255a77b)
图1-73 当开始仿真时,仿真进度显示在状态栏上
2.结束仿真
如图1-74所示,可通过动画控制面板停止仿真。
3.暂停仿真
要暂停运行的仿真,请按键盘上的Pause键或单击动画控制面板上的暂停按钮,如图1-75所示。仿真将在断点处自动暂停。有关断点的相关知识将在下面的调试技能主题中讨论,并在各种教程主题中演示。每当暂停仿真时,Visual Designer将切换到完整调试布局,并且流程图和各种调试窗口将可用于检查和交互,如图1-76所示。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_38_2.jpg?sign=1739689540-GL3ZjQjvQNSw67sL8locJMXvRXZfKx2U-0-9f172aef2376728170e8aa564ef4675b)
图1-74 通过动画控制面板停止仿真
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_38_3.jpg?sign=1739689540-RxjvVEj8oSKeokRduVDdZHJOHAqfs7HM-0-f0f38a2a4d0eb0f145074ab2aa9ec782)
图1-75 暂停仿真
在自由运行仿真期间看不到流程图,因为程序执行得很快,实际上显示它的当前位置是不可能的。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_39_1.jpg?sign=1739689540-5KnchuSsOZczsO2dpq8YsNMAieJJmqme-0-678c3614ea1011b82c847022eea5d8e2)
图1-76 准备暂停仿真,进行Visual Designer调试
4.交互式仿真
当仿真运行时,将在其调试布局中看到Visual Designer,所有交互式元素在应用程序的右侧对齐。大多数情况下,这将是一个混合的指示器,通过单击执行器为指示器提供触发信号。以下是我们调整红外接近传感器的示例(如图1-77所示):开始仿真,将鼠标指针移到传感器的调整箭头上,根据需要单击向上或向下。
可以轻松地切换到原理图选项卡,并在屏幕上交互。虚拟终端稍有不同,可以在仿真运行时直接单击并输入。这意味着终端可以作为程序的命令接口,它有很多用途。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_40_1.jpg?sign=1739689540-xCTxgAq61hURIE28DyjjU5cN9Wz8kHmP-0-e97f02abc4e9cc1493f75a1fe63f812c)
图1-77 单击红外传感器调节控制仿真物理测试的行为
1.6.2 调试技巧
1.设置软件断点
在仿真前或仿真暂停时右击流程图块,然后从上下文菜单中选择切换断点命令,如图1-78所示。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_40_2.jpg?sign=1739689540-0JZtte74tX6vvaShVz7x9n33ARvw91dX-0-876e93c72567635e7616e454b56209bb)
图1-78 设置软件断点
2.单步调试流程图
当仿真暂停时,可使用窗口顶部的调试按钮(如图1-79所示)或按F10和F11快捷键单步浏览流程图。
要观察程序流程图,通过单击暂停按钮,然后选择调试菜单中的动画单步命令来尝试仿真运行通常是有帮助的。这个过程足够慢,可以看到程序通过决策块执行的路径,并且通常这是一个发现问题的快速的方法。
3.步进到流程图上的块
要步进到流程图上的特定块,如图1-80所示,首先暂停仿真,然后右击块,并从上下文菜单中选择要执行的步骤。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_40_3.jpg?sign=1739689540-foGOhv3nBGjbUrqROqaq1ebKuMzg1oCm-0-39d9d2f455d684c9ccba61f5e943cc54)
图1-79 调试按钮
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_40_4.jpg?sign=1739689540-hTtAOVzyVY5pwyEONLtSX755p1kO4Cw0-0-80d749d363992ab8b83f849c77874cc4)
图1-80 步进到流程图上的块
4.设置时间断点
还可以在一段时间后暂停仿真,而不是在特定流程块上。可以通过从调试菜单中选择使用定时断点运行仿真命令来执行此操作。
5.设置硬件断点
还可以在硬件条件而不是软件条件上设置断点,操作步骤如下。
(1)仿真停止,切换到原理图选项卡,如图1-81所示。
(2)将电压探针放到感兴趣的线上,如图1-82所示。具有相同名称的端子被认为通过不可见线连接(网络标号)。这是一个简单的方法来保持开发板与外围设备独立,没有电线在整个屏幕交叉。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_41_1.jpg?sign=1739689540-cTsGtOPgy6J0r7PHfLMFO3N36NJokoMy-0-f2f91f75fba50965a6649fd1a3ee924e)
图1-81 仿真停止,切换到原理图选项卡
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_41_2.jpg?sign=1739689540-iNG4IWnpKkqXrzK4bFPHEaFtA1EY90PD-0-18bb664a52a42b1f9f8d3ba49b27dd3a)
图1-82 放置电压探针
(3)编辑探头并配置实时断点,运行仿真。
6.添加变量到观察窗口
观察窗口是在自由仿真期间可用的唯一调试窗口。可以将程序变量添加到观察窗口,以便在程序执行时监视该值。
(1)暂停仿真后,从调试菜单中打开观察窗口,如图1-83所示。在默认情况下,窗口将停靠在变量窗口旁边。
(2)切换到变量观察窗口,右击感兴趣的变量,在弹出的快捷菜单中选择添加到观察窗口命令,如图1-84所示。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_41_3.jpg?sign=1739689540-tJQl6Ulgv7J7IABmmKuCLOszYIgaidXY-0-48dafaac92f443ca803b9399d777392c)
图1-83 打开观察窗口
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_41_4.jpg?sign=1739689540-5NU5s3XPWq2VJQ6exZnVm7HpPNN9SylH-0-595b2cbc09f581367cd9cd67fa9a0ec6)
图1-84 添加变量到观察窗口
(3)切换回观察窗口并运行仿真,如图1-85所示。
变量在观察窗口中按地址标识。如果在仿真运行期间更改程序,编译器将有可能为变量分配一个不同的地址,并且在后续仿真运行中不会监视该变量。这可能非常混乱,最好在编程更改后调试时删除和重新添加变量。
7.将其他项目添加到观察窗口
观察窗口只是内存上的监视器,可以添加AVR寄存器或其他程序位置。添加寄存器到观察窗口的步骤如下。
(1)在仿真暂停时,确保从调试菜单中打开观察窗口,如图1-85所示。
(2)右击观察窗口,在弹出的快捷菜单中选择按名称添加项目命令,如图1-86所示。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_42_1.jpg?sign=1739689540-r8o3o8NVM1Di4cordywiaMYdwHth7867-0-4e168161c39e91fefb1ab26940d29ceb)
图1-85 打开观察窗口
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_42_2.jpg?sign=1739689540-v4OH15wYzUfk4Qo5n6fAAUoacmw3HtJA-0-7d6a82c576d5e4971ba37d747ac1fdd5)
图1-86 按名称为观察窗口添加项目
(3)选择要查看的寄存器并将其添加,如图1-87所示。
按地址添加内存位置的过程与此非常相似。
8.设置观察点
观察点(条件断点)是在观察窗口中的项目满足预设条件时设置的断点,经常被用作调试工具。例如,设置观察点是每次定时器溢出时暂停仿真的完美方法。设置观察点的步骤如下。
(1)将一个变量或一个寄存器添加到观察窗口。
(2)右击观察窗口中的项目,然后从上下文菜单中选择观察点条件命令。
(3)在弹出的Watchpoint Condition对话框中根据需要进行设置,如图1-88所示。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_42_3.jpg?sign=1739689540-C1miu1p9vzdM2CM6ri6UyboN3aTV55WK-0-075b7fe7d5676679a6e53c6a3711b4ba)
图1-87 选择要查看的寄存器并将其添加
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_42_4.jpg?sign=1739689540-bka0T2dO7To2w6eO9dgq44839mypKaic-0-4813ba6c70d525a2d22a0d502ae7f55b)
图1-88 设置观察点条件
(4)运行仿真。
在Watchpoint Condition对话框中有一个选项,用于指定观察点是否为全局中断条件,其只是用于确定当任何项表达式为真时,或仅当所有观察点都为真时,仿真是否暂停。
9.打开调试窗口
除源代码、变量和观察窗口外,还有一些调试窗口。Proteus中的调试工具集的功能是非常强大的。通常,可以在屏蔽外围设备模型及处理器型号上打开调试窗口,过程如下。
(1)暂停仿真。
(2)从调试菜单中启动所需的调试窗口,如图1-89所示。
![](https://epubservercos.yuewen.com/175C7F/17493186306222806/epubprivate/OEBPS/Images/38164_43_1.jpg?sign=1739689540-r5sSiErYQNYWta7mFITOvQFZdI8JqAdw-0-5fba07554eb66c357de4c2bcb28b263f)
图1-89 从调试菜单中启动所需的调试窗口
如果屏幕的窗口过多,则可以关闭调试窗口,并在需要时从调试菜单中重新打开它们。此外,除了观察窗口,它们将在自由运行仿真期间消失。