程序运行在初始化函数内跳不出来,急,向高手请教!

Polaris   2009-7-21 22:43 楼主
    提前说明一下,本人刚开始学习嵌入式编程,使用ADS1.2开发环境,编写一个简单的程序以实现S3C2410X的触摸屏功能,实验板是北京博创的。
    程序想实现的功能是:通过对触摸屏进行触摸,获取触摸点的坐标,并显示在超级终端上。
    程序一开始进行了必要的初始化。因为要用到串口的输出,我进行了相应的串口初始化,也就在这个初始化函数当中出现了无法跳出的问题,恳请高手帮忙,不胜感激!
  
有问题的部分如下:
....
void UartInit()
{
     int i;
     //if (pclk==0)
     //pclk=PCLK;  //将APB总线使用的PCLK的值赋给pclk
     rUFCON0=0x0;//UART0 FIFO控制寄存器,FIFO禁止
     rUMCON0=0x0;//UART0 MODEM控制寄存器,AFC禁止
     rULCON0=0x3;//线控制寄存器设置:8位数据收发,1位停止位,无奇偶校验,正常模式
     rUCON0=0x245;//控制寄存器,接收和发送模式为中断方式或查询方式,允许接收错误状态时中断,波特率选择PCLK
     
     
     
     rLOCKTIME = 0xFFFFFF;      
     rCLKDIVN  = 0x3;          //设定FCLK、HCLK、PCLK的比率为4:2:1
     rMPLLCON = 0xa1031;          //输出202.8MHz  MDIV:0xa1   PDIV: 3  SDIV: 1   
     rUBRDIV0 = 0x1a;               //FCLK为200MHz,所以PCLK为50MHz,(int)(50000000/(115200*16))-1=int(27.1)-1=26
      
     //rUBRDIV0=((int)(pclk/16./baud+0.5)-1);//波特率因子寄存器的设置
     rGPHCON |= 0xa0;                //GPH2、3定义为TXD0,RXD0
     rGPHUP  = 0x0c;                //GPH2、3禁止上拉
     for(i=0;i<10;i++);       //延时作用       
}
....

void Main()
{
     ....
     UartInit();
     ....
}

    每一次我使用AXD Debugger进行调试,当我点击运行时,程序开始运行,但等不到结果的显示。当我等不下去而点击暂停时,程序就会停在红色的那一行(每次都这样),当我单步运行的时候,程序也可以继续往下走,但for循环之后,又回到了这个函数部分的开始一行。继续点F8,程序就出错无法继续调试了。我不清楚的就在这里。
    如果有什么不明白,我会再补充。

回复评论 (8)

建议在使用AXD Debugger调试时查看反汇编文件单步执行看看问题出在哪里
点赞  2009-7-22 14:32
这点代码不好说。 我觉得可能是系统在不停复位或者程序跑飞引起的。  
点赞  2009-7-22 17:42
void Main() 前有很多事情要做的,那个startup.s是初始化(boot),可能那里有问题吧。而且AXD的设置可能也会有问题。
点赞  2009-7-22 19:50
先谢谢了,不过我在程序进入Main之前已经把看门狗关了,应该不会不停复位吧。还有,debuge的时候,会出现反汇编的界面,但我不明白里边的内容是什么,一直是 “2b3048c4 [0x00000000] dcd 0x00000000”这些类似的东西,这又代表着什么含义?请指教。程序运行的箭头进到这里就出不去了。
点赞  2009-7-22 20:01
AXD要有设置的,要告诉它memory的属性,(宽度,地址)等等。不是不要管就可以的,或者要用simulation。
点赞  2009-7-23 13:30
感觉是飞了...可能是出现了某种异常,而你没有提供相应的异常处理程序......
点赞  2009-7-23 14:00
停下后看一下CPSR,看是不是某种异常模式.....但如果你没有提供异常处理程序,有可能从一种异常掉入另一种异常......
点赞  2009-7-23 14:02
跑飞了,不停的复位了。这和关门狗没关系,你的main()函数是有最后一条指令,但是CPU怎么知道你那条指令就是最后一条了?CPU执行完那条指令之后PC还要继续往下跳,PC指着一条没有指令的程序空间CPU会做什么?在main()函数的最后加个while(1);让PC指针稳定在那里,应该就没问题了。
点赞  2009-7-24 15:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复