找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2645|回复: 0
打印 上一主题 下一主题
收起左侧

各开发平台编程技巧

[复制链接]
跳转到指定楼层
楼主
ID:60266 发表于 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.以为是程序出了问题,其实是软件的使用没有使用正确,这时调试时是看不到这些私有数据的,他们都是栈中,调试器不能在栈中定位到他们;这时我将他们定义为被系统分配的地址的全局变量,在查看各个成员,就没有问题。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表