查了一下,bmp文件的第3~6字节记录了整个bmp文件的大小,所以用语句:<br />fileSize=*((U8 *)(downloadAddress+2))+<br /> (*((U8 *)(downloadAddress+3))<<8)+<br /> (*((U8 *)(downloadAddress+4))<<16)+<br /> (*((U8 *)(downloadAddress+5))<<24); <br />就可以得到整个文件的大小。(downloadAddress是ram中下载地址的首地址。)<br /><br />之后就按照这个文件的大小按字节为单位下载到ram中就可以了。但是实验中我发现,程序运行过程中下载到16500个字节以后就停止了,应该是死循环了。我想了一下,如果fileSize的取值很大可文件却很小的话很有可能会变成这样,这是怎么回事呢?按说应该没错阿。<br /><br />还有我是用超级终端监视的,用的里面的'发送文本文件'传送的bmp文件,是不是这样做不对阿???<br /><br />源程序:<br />int DownloadData(void)<br />{<br /> U32 i;<br /> U32 fileSize=10;<br /> U8 *downPt;<br /> U8 discard;<br /><br /> downPt=(U8 *)downloadAddress;<br /> <br /> Uart_Printf("downloadAddress=%x\n",downloadAddress);<br /><br /> rINTMSK=~BIT_GLOBAL;<br /><br /> if(!(rUTRSTAT0&0x1)) <br /> {<br /> discard=RdURXH0(); //To remove overrun error state.<br /> }<br /><br /><br /> Uart_Printf("Receive the bmp file from UART:");<br /> i=0; <br /> while(i<fileSize)<br /> {<br /> while(!(rUTRSTAT0&0x1));<br /> *(downPt+i)=RdURXH0(); <br /> <br /> if(i==5)<br /> {<br /> fileSize=*((U8 *)(downloadAddress+2))+<br /> (*((U8 *)(downloadAddress+3))<<8)+<br /> (*((U8 *)(downloadAddress+4))<<16)+<br /> (*((U8 *)(downloadAddress+5))<<24); <br /> Uart_Printf("\n%x",*((U8 *)(downloadAddress+2)));<br /> Uart_Printf("\n%x",*((U8 *)(downloadAddress+3)));<br /> Uart_Printf("\n%x",*((U8 *)(downloadAddress+4)));<br /> Uart_Printf("\n%x",*((U8 *)(downloadAddress+5)));<br /><br /> Uart_Printf("\n%x",fileSize);<br /> }<br /> i++;<br /> Delay(100);<br /> }<br /><br /> downloadProgramSize=fileSize;<br /><br /> Uart_Printf("\nDownload O.K.\n");<br /> while(1);<br /> return 1;<br />}<br /><br /><br /> |
|