求教在裸奔点灯的程序中全局变量和局部变量的区别
我最近自己写了个点灯的程序,很简单,下载到NAND FLASH里执行,第一次成功了。。我也没在意。直到有一天有个人问我初始化的汇编如何写,我又写了代码,并自己测试却发现如何也不能在NAND FLASH里实现我要的跑马灯效果了,但是却能在SDRAM里运行。我一直是认为是我初始化.s文件写的有问题才导致不能在NAND FLASH里运行,我仔细检查了程序,并对照以前的程序核查,发现初始化文件并没有错。这个问题我就一下纠结了好几天,因为能在SDRAM里执行,我就确定我的main.c文件肯定没问题,我就一直在检查2440.s文件,知道今天忽然的修改了main.c文件里一个全局变量为局部变量就能在NAND.C里运行了。程序如下:#include <stdio.h>
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
void delay()
{
int i;
for(i=90000;i>=0;i--);
}
int main()
{
GPBCON=0x15400;
while(1)
{
GPBDAT=0x61f;
delay();
GPBDAT=0x7ff;
delay();
GPBDAT=0x73f;
delay();
GPBDAT=0x76f;
delay();
}
return 0;
}
大家注意我红字部分,就是改成这个局部变量就能运行了,原来我对i的定义是在void delay()外面,也就是定义的全局变量,在这里请教高手,到底是为什么导致这个问题。。。
补充下,我还发现,在NAND FLASH里和在SDRAM里运行速度不一样,请问到底是什么问题导致,运行速度不一样会不会也是其中问题之一?求高手指教。 没人回答吗?求高手来指点下啊。。。别让帖子沉了~ 这种怪现象我还真没法理解了 3# shufexiu
这个地方我感觉不能跳过去不管,这个很重要,以后也许还会出现这个问题。你也可以试试看。 :) 你的裸机程序能下到nandflash中执行吗?假设你在初始化文件里面没有添加将程序引导到sdram里面执行。 能把整个工程发我看看?局部变量少的话一般都是使用寄存器实现的,而全局变量的话要在存储器中 我也碰到类似的问题我在写流水灯程序的时候 我用数组做的 U32 nLED={0xe,0xd,0xb,0x7};这一行代码放在while循环里面就没错在循环外就有错误 我也搞不懂这是什么原因。
页:
[1]