标题:
各开发平台编程技巧
[打印本页]
作者:
heise
时间:
2014-8-18 00:41
标题:
各开发平台编程技巧
本文说的某些技巧是基于某个编译与调试环境的,其中的有些规则是相同的,有些是有差别的;
【keil环境,M3硬件平台】
1: 全局变量的定义: int Array[100];
static intArray[100];这两种定义方法有何区别?
【为什么单步调试时,有时候无法查看
staticint Array[100]数组,有时候可以,但是
intArray[100]却不会有这种现象?
】
大家都知道用在函数体外定义的变量或数组,不论是否添加static,他们的属性都是全局的,在RAM中,他们都对应的物理地址;只不过在C文件中不同的地方定义,它的作用是不一样的;
如果在已是全局变量或全局数组前加上static,情况会如何?加上static表明该符号只能在文件内使用,即不能使用符号导出;在其他的文件中不能看见该符号,没有加static的全局变量,其他文件可以通过符号导出应用该符号。
那么keil环境中,调试的时候,又会有什么不一样?在keil环境中调试时,暂停CPU的运行,这时指令会暂停在某个文件的某一行,这时如果要查看另外一个文件中的全局变量,如果变量的定义是static intArray[100],那么此时就不能在watch/memery窗口中查看,要想查看,必须让CPU暂停在static intArray[100]所在的文件中,这样才能查看到该变量或数组,原因就是该符号是本地的,但如果定义是intArray[100],就不会出现上面的情况。
2:头文件的相对路径设置 #include “.\..\uCGUI\LCDDriver\ili932x.h”
某个头文件中要包含ili932x.h,而ili932x.h在本头文件所在目录的上层目录,可以用上面的设置。
.\ 表示本文件所在的当前目录下, ..\表示进入本文件上一层目录中,
3.在keil4中,在函数体内部定义的局部变量,很多时候都是使用CPU的寄存器,如果不够就使用它的系统栈,这样的话,在调试的时候查看变量是看不到正确的结果的,但是程序中使用这些变量没问题;
如我在函数中定义一个私有的结构体,接下来读取SD卡对他的各个成员赋值;在调试时,暂停CPU来看各个变量,这时看到的全是0.以为是程序出了问题,其实是软件的使用没有使用正确,这时调试时是看不到这些私有数据的,他们都是栈中,调试器不能在栈中定位到他们;这时我将他们定义为被系统分配的地址的全局变量,在查看各个成员,就没有问题。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1