打印

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

[复制链接]
1829|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snowtx|  楼主 | 2008-3-16 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查了一下,bmp文件的第3~6字节记录了整个bmp文件的大小,所以用语句:
fileSize=*((U8 *)(downloadAddress+2))+
    (*((U8 *)(downloadAddress+3))<<8)+
    (*((U8 *)(downloadAddress+4))<<16)+
    (*((U8 *)(downloadAddress+5))<<24); 
就可以得到整个文件的大小。(downloadAddress是ram中下载地址的首地址。)

之后就按照这个文件的大小按字节为单位下载到ram中就可以了。但是实验中我发现,程序运行过程中下载到16500个字节以后就停止了,应该是死循环了。我想了一下,如果fileSize的取值很大可文件却很小的话很有可能会变成这样,这是怎么回事呢?按说应该没错阿。

还有我是用超级终端监视的,用的里面的'发送文本文件'传送的bmp文件,是不是这样做不对阿???

源程序:
int DownloadData(void)
{
    U32 i;
    U32 fileSize=10;
    U8 *downPt;
    U8  discard;

    downPt=(U8 *)downloadAddress;
   
    Uart_Printf("downloadAddress=%x\n",downloadAddress);

    rINTMSK=~BIT_GLOBAL;

    if(!(rUTRSTAT0&0x1))   
    {
     discard=RdURXH0(); //To remove overrun error state.
    }


    Uart_Printf("Receive the bmp file from UART:");
    i=0;    
    while(i<fileSize)
    {
    while(!(rUTRSTAT0&0x1));
    *(downPt+i)=RdURXH0();      
        
         if(i==5)
         {
          fileSize=*((U8 *)(downloadAddress+2))+
        (*((U8 *)(downloadAddress+3))<<8)+
        (*((U8 *)(downloadAddress+4))<<16)+
        (*((U8 *)(downloadAddress+5))<<24); 
          Uart_Printf("\n%x",*((U8 *)(downloadAddress+2)));
          Uart_Printf("\n%x",*((U8 *)(downloadAddress+3)));
          Uart_Printf("\n%x",*((U8 *)(downloadAddress+4)));
          Uart_Printf("\n%x",*((U8 *)(downloadAddress+5)));

          Uart_Printf("\n%x",fileSize);
         }
    i++;
         Delay(100);
    }

    downloadProgramSize=fileSize;

    Uart_Printf("\nDownload O.K.\n");
    while(1);
    return 1;
}


相关帖子

沙发
阿南| | 2008-3-17 18:59 | 只看该作者

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

使用特权

评论回复
板凳
snowtx|  楼主 | 2008-3-17 20:29 | 只看该作者

请问

使用特权

评论回复
地板
snowtx|  楼主 | 2008-3-17 20:30 | 只看该作者

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

使用特权

评论回复
5
armecos| | 2008-3-17 20:41 | 只看该作者

串口都用XMODEM协议啊,

    很多bootloader里都有相关源码,抄过来就可以了。
    为什么不用文件系统,比如ROMFS或者RAMFS呢?直接把bmp拷贝到内存多麻烦,存在文件系统里,文件属性里就有文件大小信息。我一般把BMP制作成ROMFS或者直接保存在CF/SD卡上,然后直接用minigui处理,minigui里有现成的BMP处理源码,加个LCD驱动就能直接使用了。
    
    《minigui处理BMP图片》

使用特权

评论回复
6
snowtx|  楼主 | 2008-3-17 22:13 | 只看该作者

还是不大明白

在做一个项目,需要将bmp文件考到ram里,看着很容易,但是怎么都不能成功
,请帮帮忙吧

使用特权

评论回复
7
hynwind| | 2008-3-17 22:53 | 只看该作者

下载可以用多种方式

下载可以用多种方式,比如网口和串口,建议先不要判断BMP的结构,直接把整个文件下载到RAM,然后再进行分析





********************************************
*             飞凌嵌入式                    *
*         www.witech.com.cn                 *
*********************************************

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

66

帖子

0

粉丝