本帖最后由 metalwjf 于 2010-6-8 21:29 编辑
大哥们好。
小弟用lpc2364画了个板子。用h-jtag调试程序可正确运行。可是一掉电重启后,发现程序没有完全烧进去。详细情况如下:
程序的功能是接收串口的程序,并根据接收的内容进行相应的处理。串口uart0设为接收中断。接收到数据后进入irq_uart0中断服务程序,然后判断接收的第一个字节,进入相应的要处理的内容的程序后,再判断第二个字节,然后执行相应处理程序,并把接收的数据回送到pc。这在h-jtag在debuginflash下实现了功能。但断电重启后,发现程序只判断了接收的第一个直接,然后根本不判断第二字节。请问这是什么原因啊?
结合程序再说明一下:
这是uart0接收到数据后的一小段处理程序:
if(Rcv_Buf[0]==0x56)
{
switch(Rcv_Buf[1])
{
case 0x30:
{
LCDDisP("SCREEN PV =0000V");
FIO2PIN0=(FIO2PIN0&0xf3)|0x00;
} break;
case 0x33:
{
LCDDisP("SCREEN PV =3500V");
FIO2PIN0=(FIO2PIN0&0xf3)|0x04;
} break;
case 0x34:
{
LCDDisP("SCREEN PV =4500V");
FIO2PIN0=(FIO2PIN0&0xf3)|0x0c;
} break;
default: LCDDisP("SCREEN PV =0000V");break;
IO1SET=LED1;
}
在h-jtag调试时,发送“V3”或"V4"均能在LCD显示"SCREEN PV =3500V“或"SCREEN PV =4500V“,且能回送正确的“V3”或"V4",P2口的输出也正确。LED亮。但是用单步操作时,无法单步进入switch(Rcv_Buf[1])语句,错误是can't set 。。这种h-jtag调试下,功能还是正确实现了的。
但断电重启后,
1、发送“V3”或"V4"能回送正确的“V3”或"V4"给pc(实现了uart0接收中断)。
2、led灯亮(证明进入了if(Rcv_Buf[0]==0x43)判断)。
3、lcd无显示,P2口无响应输出。(没有进入switch(Rcv_Buf[1])判断?)。
百思不得其解,为什么用h-jtag全速运行时功能运行正确,而掉电重启后,只能实现部分功能?
加一个问题。。
我有几个数据口要用到输入输出的功能。就先置输出,然后再接受数据。能否通过以下方法实现?
IODIR设为输出 => 输出数据=> IODIR设为输入 => 接收数据 ??
叩请大虾们不吝赐教,指点迷津。。小弟不胜感激。。 |