kira545699636 发表于 2011-3-23 10:58:44

求教在裸奔点灯的程序中全局变量和局部变量的区别

我最近自己写了个点灯的程序,很简单,下载到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里运行速度不一样,请问到底是什么问题导致,运行速度不一样会不会也是其中问题之一?求高手指教。

kira545699636 发表于 2011-3-23 13:42:07

没人回答吗?求高手来指点下啊。。。别让帖子沉了~

shufexiu 发表于 2011-3-23 16:04:48

这种怪现象我还真没法理解了

kira545699636 发表于 2011-3-23 16:49:38

3# shufexiu


这个地方我感觉不能跳过去不管,这个很重要,以后也许还会出现这个问题。你也可以试试看。

shufexiu 发表于 2011-3-23 17:37:21

:)

zhou 发表于 2011-12-6 19:15:43

你的裸机程序能下到nandflash中执行吗?假设你在初始化文件里面没有添加将程序引导到sdram里面执行。

zhuanxu 发表于 2011-11-26 19:07:00

能把整个工程发我看看?局部变量少的话一般都是使用寄存器实现的,而全局变量的话要在存储器中

悠然哥 发表于 2011-11-27 01:48:25

我也碰到类似的问题我在写流水灯程序的时候 我用数组做的 U32 nLED={0xe,0xd,0xb,0x7};这一行代码放在while循环里面就没错在循环外就有错误 我也搞不懂这是什么原因。
页: [1]
查看完整版本: 求教在裸奔点灯的程序中全局变量和局部变量的区别