小胖子 发表于 2010-7-8 15:00:02

针对TQ2440的跑马灯程序,有点问题

大家好,针对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会 亮。换句话说,在器件里面运行时,为啥运行一会死循环之后,总跳出循环从头执行呢?
      这实在是匪夷所思啊,希望天嵌的软件开发人员认真思考我的问题!

小胖子 发表于 2010-7-12 15:16:37

我不会关闭看门狗,还没学那么深入。请把关闭看门狗的程序发给我好么?谢谢啦!

w492901074 发表于 2011-11-12 13:06:48

宏定义加
#define WTCON      (*(volatile unsigned *)0x53000000)
主程序开头加
WTCON = 0;
:lol

呱呱 发表于 2011-12-25 17:03:37

关看门狗~~吧~~~
页: [1]
查看完整版本: 针对TQ2440的跑马灯程序,有点问题