1. food.position.x=(4*(TL0%4)-1);这个表达式在TL0%4为0的情况下会使得food.position.x=-1,表达成十六进制会得到0xff(这里的food.position.x是 int型)。
而我的程序段里有这么两句“P2 = table[food.position.x];和 u8 table[] = {0x7f,0xbf,0xdf,0xef};”把hex文件焼写进去以后,我发现那个数码管dp点有时亮有时不亮,这个BUG困扰我好久,于是我追踪food.position.x,得到它竟然出现了意料之外的值0xff,很明显 table[food.position.x]越界了,keil能做到if(q=p)给出警告,但这个越界让keil毫无办法
2. 在keil里定义a b变量名时,在调试窗口里添加a或者b观察将观察不到想要的变量值,取而代之的是累加器a和累加器b的值。所以最好避免定义a b这种变量名。
3. 关于在command对话框中修改变量名一个小小的发现:当调试程序进入某个变量作用域时才可以用a=0xfa之类的命令改变变量的值,否则会报错。(这个帖子http://www.c51.cn/1727/16268.html里有关于在keil里修改变量值的具体做法)
4. 如若有宏定义:#define AB xx,你想在watch窗口查看这个AB的值你会发现无法查看的,为什么呢,你把光标移到AB上单击,根本没任何提示,而其他变量会有如D:0xff之类的提示,这就说明那个宏定义的量根本不占内存(宏定义是预编译的),在watch对话框中怎么可以查看一个没有内存的量呢(君若想查看,请试编一个编译器)。
5. debug tool中的这个黄色箭头干什么呢?
当你的程序很大的时候,有时候你不晓得程序到底运行到哪里了,这时候你只要点击它,立刻可以找到pc指针所在处。
[ 本帖最后由 zzbeagle 于 2012-4-2 01:38 编辑 ]
|