天嵌 ARM开发社区

 找回密码
 注册
查看: 2493|回复: 7

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

[复制链接]
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[4]={0xe,0xd,0xb,0x7};  这一行代码放在while循环里面就没错  在循环外就有错误 我也搞不懂这是什么原因。
回复

使用道具 举报

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

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-19 03:53 , Processed in 2.053929 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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