提前说明一下,本人刚开始学习嵌入式编程,使用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,程序就出错无法继续调试了。我不清楚的就在这里。
如果有什么不明白,我会再补充。
建议在使用AXD Debugger调试时查看反汇编文件单步执行看看问题出在哪里
这点代码不好说。 我觉得可能是系统在不停复位或者程序跑飞引起的。
void Main() 前有很多事情要做的,那个startup.s是初始化(boot),可能那里有问题吧。而且AXD的设置可能也会有问题。
先谢谢了,不过我在程序进入Main之前已经把看门狗关了,应该不会不停复位吧。还有,debuge的时候,会出现反汇编的界面,但我不明白里边的内容是什么,一直是 “2b3048c4 [0x00000000] dcd 0x00000000”这些类似的东西,这又代表着什么含义?请指教。程序运行的箭头进到这里就出不去了。
AXD要有设置的,要告诉它memory的属性,(宽度,地址)等等。不是不要管就可以的,或者要用simulation。
感觉是飞了...可能是出现了某种异常,而你没有提供相应的异常处理程序......
停下后看一下CPSR,看是不是某种异常模式.....但如果你没有提供异常处理程序,有可能从一种异常掉入另一种异常......
跑飞了,不停的复位了。这和关门狗没关系,你的main()函数是有最后一条指令,但是CPU怎么知道你那条指令就是最后一条了?CPU执行完那条指令之后PC还要继续往下跳,PC指着一条没有指令的程序空间CPU会做什么?在main()函数的最后加个while(1);让PC指针稳定在那里,应该就没问题了。