想往44b0的ram里写入*.bmp文件的困惑

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

楼主可以先测试一下您的下载程序,再考虑bmp文件

  
 楼主| snowtx 发表于 2008-3-17 20:29 | 显示全部楼层

请问

  
 楼主| snowtx 发表于 2008-3-17 20:30 | 显示全部楼层

下载程序应该没什么错吧,只是接受数据而已

  
armecos 发表于 2008-3-17 20:41 | 显示全部楼层

串口都用XMODEM协议啊,

&nbsp;&nbsp;&nbsp;&nbsp;很多bootloader里都有相关源码,抄过来就可以了。<br />&nbsp;&nbsp;&nbsp;&nbsp;为什么不用文件系统,比如ROMFS或者RAMFS呢?直接把bmp拷贝到内存多麻烦,存在文件系统里,文件属性里就有文件大小信息。我一般把BMP制作成ROMFS或者直接保存在CF/SD卡上,然后直接用minigui处理,minigui里有现成的BMP处理源码,加个LCD驱动就能直接使用了。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<b>《minigui处理BMP图片》</b>
 楼主| snowtx 发表于 2008-3-17 22:13 | 显示全部楼层

还是不大明白

在做一个项目,需要将bmp文件考到ram里,看着很容易,但是怎么都不能成功<br />,请帮帮忙吧<br />
hynwind 发表于 2008-3-17 22:53 | 显示全部楼层

下载可以用多种方式

下载可以用多种方式,比如网口和串口,建议先不要判断BMP的结构,直接把整个文件下载到RAM,然后再进行分析<br /><br /><br /><br /><br /><br />********************************************<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;飞凌嵌入式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;www.witech.com.cn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />*********************************************<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部