再上一篇:20.4 测试示例程序
上一篇:20.5 使用调试器
主页
下一篇:20.8 使用中断实现的秒表示例程序
再下一篇:附录A
文章列表

20.6 指令模拟器

《Cortex-M3 权威指南》,嵌入式处理器开发教程。

uVison IDE还附带了一个软件模拟器,它可以用来验证算法的各项性能指标,也是学习CM3的 好帮手。若欲使用模拟器,只需在刚才的“Debug”选项里点中Simulator:


事实上,调试器还对片上外设包装了非常丰满和直观的可视化操作接口,模拟器也可以模拟它 们。比如,欲查看NVIC的内部状态,可以通过如下菜单命令启动:

执行上图中的菜单命令后,将弹出如下对话框:

可以在它上面单击不同的异常来查看相关状态,上图中就查看了SVC异常的状态。
在使用模拟器时,如果被模拟的器件比较新,则有可能器件中某些地址范围模拟器没有来得及 更新。这样在使用模拟器时,就会被判定成访问落空的地址范围,因此产生fault。比如,本例中, 为了保证UART寄存器的地址范围被支持,可以使用如下的菜单命令检查:

执行后,弹出如下对话框:


本例中UART寄存器的地址范围是0x4000_C000-0x4000_DFFF。译者使用的RVMDK版本较新, 已经加入了本地址范围。但是原著作者使用的RVMDK版本还没有加入,需要手工添加,语法如上图 被框住的部分所示。RVMDK的调试器会自动合并“碎片”,对于译者使用的RVMDK,它会发现手工添 加的内容与原有的重合,故而不会有任何影响。

------译者添加------

uVision IDE的调试功能非常强大,很多没有想到的功能它都有,简列如下:

 观察窗口,函数调用栈窗口,监视窗口等
 计算到目前为止已经经历的周期数
 计算每条指令被执行的频率(性能分析非常有用)
 逻辑分析仪
 源程序中的各种符号窗口(文件名,变量名等)
 存储器映射窗口 限于篇幅,本书不能详细地讲述RVMDK的方方面面。但好消息是市面上新出了一本
专门讲解RVMDK的书,书名为《ARM开发工具RealView MDK使用入门》,作者:李宁。 北京航空航天大学出版社出版。
在上例中,向量表在Startup.s中已预先定义,这是由开发工具提供的向量表模板,它只包含
了必备的MSP初始值、复位向量、NMI向量以及硬fault向量。但是我们往往还要响应其它中断,因 此要添加其它的向量,或者需要把预先提供的向量也改成自己的。在这些场合下,就要更改 Startup.s的代码,把向量表中对应的位置写成我们提供的服务例程名。
但问题又来了,ISR不是在Startup.s中实现,而是在其它文件实现的。那么怎么让startup.s 汇编出的代码startup.o在连接时知晓ISR的地址呢?这时,就要使用IMPORT指示字。IMPORT后面 跟随函数名或变量名,作用相当于C中的extern关键字,指出这些全局符号是在其它源文件中定义 的。下一小节作为本书的谢幕,就提供了一个例子演示了IMPORT的使用。