192.168.1.1-路由器设置 | 192.168.0.1-无线路由器设置

STM32写汇编程序的两种调测环境

发布时间:2012-02-09 18:09

  第一:对于底层程序,也就是汇编程序,这类程序的调试必须借助Jtag,比如在移植操作系统的时候,如果调试器不支持单步,那真的是一件非常痛苦的事情。

  第二:对于应用类的程序,基本是用串口(UART/UARST)输出信息来调试板子。这类应用,因为底层基本都写好了,有操作系统,有Bootloader 程序啊,底层是不会出问题的。而且有现成的printf 函数,用宏定义把各个模块包起来,需要的时候调用printf 打印系统信息到串口,就能够知道系统的运行流程和轨迹,基本上都能够解决问题。如果这种情况下用Jtag 调单步,基本能把人搞晕的。所以在一般的产品开发里,都是直接用编译器生成bin 或者hex 文件,烧到板卡里,看串口信息进行调试,而我们生活中的很多产品,比如路由器www.luyouqiwang.com 和猫啊,数字设备啊,都是用串口引脚。

  软件环境:

  第一:是编译环境,用 C 语言和汇编程序变成CPU(STM32)可以识别的0101 机器码的软件。例如Hex 文件,Bin 文件,这两种文件里包含的就是CPU 可以识别的机器码(预设号的指令),指令是CPU 生产厂商定义好的,Hex 文件和Bin 文件的区别,这两个文件里都包含CPU 可以执行的机器码,只是Hex 比Bin 多一些信息:机器码的存储地址。这些存储地址实际是给烧写程序的软件使用的。如果我们烧写Hex 文件到板卡里(Flash 存储器),烧写软件就不会问我们存储地址,因为这个文件里已经包含了这类信息了,这类信息是编译器在生成Hex

  的时候加进去的,当然编译器会有对应的项要你填写。如果是烧写Bin 文件,烧写软件就会询问你要烧写到哪个地址。一般情况下,CPU 会从0 地址开始执行程序,但是有些CPU 是从其他地址开始的,所以这个起始值要视情况而定。而且有时为了调试方便,有些工程师会把Bin 烧RAM 里。

  第二:是编辑环境。STM32 的调试里,编辑环境也是Keil UV3,使用一个叫Source Insight 的做编辑器。因为编译器是Keil UV3,默认的编辑器也是Keil UV3,所以用Source Insight 打开代码进行修改时,Keil UV3 会提示你代码被外部修改,是否要重新载入,这时:在Keil UV3的菜单栏里,选择Edit >> Configuration,在跳出的对话框中,Editor 选单中,将“Automatic reload of externally modified files”选项勾上。

  第三:是反馈环境。这个不用说了。

  啰嗦几句:写汇编,写启动代码,这类枯燥的汇编程序在实际运用中很少改动,如若只是想开发应用程序,可以直接用,不深入。如果想要移植操作系统那就必须好好了解汇编程序。

  用的库:STM32 库版本为3.0

  关于“Target”选项卡,里面有一项为晶振大小,对于外部晶振不是8M 的板子,除了修改此处之外,请打开代码文件“stm32f10x.h”,找到宏HSE_Value 的定义,其默认值是8000000,表示8M 外部晶振,将其改为实际外部晶振值即可。

关于我们 - RSS地图 - 最近更新 - 友情链接 - 网站地图 - 版权声明