STM32F4 使用 Keil MDK 逻辑分析仪参与硬件调试的教程

2019-12-10 18:17发布

这是一篇 STM32F4 处理器使用 Keil MDK 中的逻辑分析仪参与硬件调试的实验教程,节选自 ARM Keil Application Note 230 的前半部分。
这个功能其实一直就有,但感觉能搜到的资料比较少(倒是做软件仿真的资料比较多),所以在这里分享一下。

原文前半部分还包括断点、观察点等常规调试实验,完整翻译在[这个链接里]缓慢更新,排版可能比这个帖子好一点。
原文废话特多,我翻译着都觉得累。

原文使用的是 STM32F4-Discovery 开发板,我这里都改用 NUCLEO-F401RE 实现了。Discovery 板卡在新版本的 Pack Installer 中已没有 Blinky 例程支持,可以用 CMSIS-RTOS Blinky 来做,变量定义的位置等会有变化。
这篇教程针对 MDK 5.10 及更新版本。MDK 4 有另一篇教程对应。

教程使用C:MDK做为例程目录,并以默认 MDK 安装路径为例:C:Keil_v5。
这个实验可以用评估版本(MDK-Lite)来完成,不需要购买授权。
不需要额外的调试器,只需准备 NUCLEO-F401RE 开发板、USB 线,以及在电脑上安装 MDK 5.10+ 就可以了。

6) μVision Software Pack 的下载和安装步骤

1) 启动 μVision 并打开 Pack Installer

1. 将电脑连接到外网上,下载 Software Pack 需要外网连接。

2. 点击桌面上的图标启动 μVision。

3. 点击工具栏上的按钮 LAWaveform.png (15.49 KB, 下载次数: 0) 下载附件 2015-12-18 15:47 上传

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
74条回答
TBG1
2019-12-14 04:38
K.O.Carnivist 发表于 2015-12-21 23:26
更新第21章:

21) Serial Wire Viewer(SWV)配置窗口(供参考)

e. Fold: Folded 指令的累积数量。这个结果来自那些已经从流水线上移除(flush)了无用指令,从而导致零执行周期的预测分支指令。(译者注:我架构学的烂,这句不太会翻:These results from a predicted branch instruction where usused instructions are removed (flushed) from the pipeline giving a zero cycle execution time.)

处理器为了加快处理速度,一般采用流水线(pipeline)技术。以CM0/3为例,就采用三级流水线:取指令,译码,执行。同时,由于存储器慢, 所以就必须采用CACHE技术,就是把要执行的指令,预先存储到速度和处理器一样快的SRAM中去。

但是程序中,有很多跳转指令。如果跳转指令跳出CACHE的范围,那么CACHE内所有存储指令就要作废,处理器需要从慢速内存中取指令,译码,然后执行, 非常耗费时间。这大大拖慢了程序执行速度。解决这个问题的技术,就是分支预测(branch prediction)技术, 说白了,就是遇见了跳转指令,就接着把跳转指令跳转后的指令都取进CACHE中去。

但是呢,大部分跳转指令,是条件跳转指令,意味着它有两个分支,指令预取会把这两个分支的指令都取进来,但是总有一个分支是用不到的,是要舍弃的。所以这么说:These results from a predicted branch instruction where usused instructions are removed (flushed) from the pipeline giving a zero cycle execution time

一周热门 更多>