微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC 单片机 C 语言编程简介(3)

PIC 单片机 C 语言编程简介(3)

时间:11-22 来源:互联网 点击:

%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/11.jpg" src="file:///F:/data/%C3%83%C2%8F%C3%83%C2%82%C3%83%C2%94%C3%83%C2%98/PIC%C3%82%C2%B5%C3%82%C2%A5%C3%83%C2%86%C3%82%C2%AC%C3%82%C2%BB%C3%83%C2%BAC%C3%83%C2%93%C3%83%C2%AF%C3%83%C2%91%C3%83%C2%94%C3%82%C2%B1%C3%83%C2%A0%3Cwbr%3E%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/11.jpg" />%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/11.jpg" src="file:///F:/data/%C3%83%C2%8F%C3%83%C2%82%C3%83%C2%94%C3%83%C2%98/PIC%C3%82%C2%B5%C3%82%C2%A5%C3%83%C2%86%C3%82%C2%AC%C3%82%C2%BB%C3%83%C2%BAC%C3%83%C2%93%C3%83%C2%AF%C3%83%C2%91%C3%83%C2%94%C3%82%C2%B1%C3%83%C2%A0%3Cwbr%3E%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/11.jpg" /> %C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/12.jpg" src="file:///F:/data/%C3%83%C2%8F%C3%83%C2%82%C3%83%C2%94%C3%83%C2%98/PIC%C3%82%C2%B5%C3%82%C2%A5%C3%83%C2%86%C3%82%C2%AC%C3%82%C2%BB%C3%83%C2%BAC%C3%83%C2%93%C3%83%C2%AF%C3%83%C2%91%C3%83%C2%94%C3%82%C2%B1%C3%83%C2%A0%3Cwbr%3E%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/12.jpg" />

(A)常用选项 (B) 高级选项

图 11-5 C 编译器选项设定

不会因为使用优化从而使生成的程序出现错误。碰到的一些问题也基本都是用户编写的原程

序有漏洞所导致,例如一些变量应该是 volatile 型但编程员没有明确定义,在优化前程序可

以正常运行,一旦使用优化,程序运行就出现异常。显然,把出现的这些问题归罪到编译器

是毫无道理的。

使用优化后可能对原程序级的调试带来一些不便之处。因 PICC 可能会重组编译后的代

码,例如多处重复的代码可能会改成同一个子程序调用以节约程序空间,这样在调试过程中

跟踪原程序时可能会出现程序乱跳的现象,这基本是正常的。若为了强调更直观的代码调试

过程,你可以将优化级别降低甚至关闭所有优化功能,这样调试时程序的运行就可以按部就

班了。

C 编译器的高级选项设定基本都是针对诊断信息输出的,和生成的代码无关。用得相对

较多的选项有:

&O1540; Generate assembly list file:编译器生成 C 原程序的汇编列表文件(*.lst)。在此文件

中列出了每一行 C 原代码对应的汇编指令,但这些都是优化前的代码。简单的一

C 语句被翻译成汇编指令后可能有好几条。有时汇编列表文件可以作为解决问

题的辅助手段。如果你怀疑编译器生成的代码有错误,不妨先产生对应的汇编列表

文件,看看在优化前一条 C 语句被编译后的汇编码到底是什么。

&O1540; Compile to assembly only:这一选项的作用是把&n, bsp; C 原程序编译成汇编指令文件

(*.as),此时将不生成目标文件,也不进行最后的连接定位。这一选项在 C 和汇

编混合编程时特别有用。通过解读 C 程序对应的汇编指令,可以掌握 C 程序中存

取变量的具体方法,然后用在自己编写的汇编指令中。我们将在稍后专门做介绍。

11.8.5 连接器选项设定(PICC Linker)

连接器 PICC Linker 的选项基本不用作太多的改变,在图 11-6 的对话框中显示了可设定的各类

项目。其中有两项有用的信息输出可以考虑加以利用:

&O1540; Generate map file:生成连接定位映射文件。在此映射文件中详细列出了所有程

序用到的变量的具体物理地址;所有函数的入口地址;函数相互之间调用的层次关系和深度等。这

些信息对于程序的调试将非常有用。此文件将以扩展名“*.map”的形式存放在同一个项目路径

下,需要时可以用任何文本编辑器打开观察。

%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/13.jpg" src="file:///F:/data/%C3%83%C2%8F%C3%83%C2%82%C3%83%C2%94%C3%83%C2%98/PIC%C3%82%C2%B5%C3%82%C2%A5%C3%83%C2%86%C3%82%C2%AC%C3%82%C2%BB%C3%83%C2%BAC%C3%83%C2%93%C3%83%C2%AF%C3%83%C2%91%C3%83%C2%94%C3%82%C2%B1%C3%83%C2%A0%3Cwbr%3E%C3%82%C2%B3%C3%83%C2%8C%C3%82%C2%BD%C3%83%C2%8C%C3%82%C2%B3%C3%83%C2%8C.files/13.jpg" />

图 11-6 PICC 连接器选项设定

&O1540; Display memory-segment usage:显示详细的内存分配和使用情况报告。用户可以

了解到程序空间和数据存储器空间资源分配的细节。下面列举了在一个项目编译后实际的内存使用

信息,为方便理解笔者用“//”添加了一些注释:

Psect Usage Map: //程序段定位表

Psect | Contents | Memory Range

----------|------------------------------|--------------------

powerup | Power on reset code | $0000 - $0003

intentry | Interrupt service routine | $0004 - $000C

intcode | Interrupt service routine | $000D - $002C

intret | Interrupt service routine | $002D - $0035

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top