大家好,针对TQ2440开发板不带裸机程序,我写了一个跑马灯程序,但是有一些问题,希望和大家讨论一下。
代码如下:
init.s文件代码:
AREA |DATA|,CODE,READONLY
ENTRY
ldr r13, =0x1000
IMPORT ledMain
b ledMain
END
LED.c文件代码:
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
/*-------------------------------------------------------------
函数名称: ledMain
功能描述: 入口程序
初始化后,进入跑马灯死循环
传 参: 无
返 回 值: int 0
-------------------------------------------------------------*/
int ledMain()
{
void Delay(unsigned int);
unsigned char ledtab=0xde;
int i;
GPBCON = 0xd57fc; // GPB5,GPB6,GPB7,GPB8设置为输出
GPBDAT = ((1<<5)|(1<<6)|(1<<7)|(1<<8)); //使LED全灭
GPBDAT&=0xffe; //关闭蜂鸣器
GPBUP = 0xf00;
GPBDAT=0xefe; //LED4亮
Delay(5);
while(1)
{
GPBDAT=0xfde; //LED1亮
Delay(1);
GPBDAT=0xfbe; //LED2亮
Delay(1);
GPBDAT=0xf7e; //LED3亮
Delay(1);
}
return(0);
}
void Delay(unsigned int x )
{
unsigned int i,j,k;
for(i=0;i<=x;i++)
for(j=0;j<=0xff;j++)
for(k=0;k<=0xff;k++);
}
问题是这样的:循环外部,我让led4亮;循环内部,我让led1-led3循环点亮。但是死循环只维持一会,程序就从头执行了,也就是说led4会 亮。换句话说,在器件里面运行时,为啥运行一会死循环之后,总跳出循环从头执行呢?
这实在是匪夷所思啊,希望天嵌的软件开发人员认真思考我的问题! |