完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
`我写了一个在内存卡中读取数据并发送的程序,程序编译没有任何错误,但是一下载到STM32中串口就发送系统错误的信息。
>>>>>>>>>>>>>>>>>>>>>>>SYSTEM ERROR<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>SYSTEM ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<(类似于这样的) 下面是我写的程序,请大神帮忙看一下是哪里错误了。非常纠结啊,哪怕是一点我没有考虑到的方面的提示也会让我受益不尽的。谢谢了。程序如下:(没有发送数据,只是读取数据也会这样)(结构体在.h文件中,我就不发了) Send_Buf *Buf; ///BYTE Data[1000]; FATFS Datafs; //空白卷文件 FIL Datafsrc; //空白文件 FRESULT Datares; //返回字节数? long GetDatalen(char *filename) // { unsigned int mybw; long datalen=0; int i; char jres,tres,bres; unsigned char j; unsigned char Buffer[1000]; char tmp_name[30]; char *jpg="JPG";char *txt="TXT";char *bmp="BMP"; jres=memcmp(Buf->fileExtension,jpg,3); tres=memcmp(Buf->fileExtension,txt,3); bres=memcmp(Buf->fileExtension,bmp,3); sprintf((char*)tmp_name,"0:%s",filename); // BYTE *Datadress; //Datadress=Data; //sprintf((char*)tmp_name,Buf->FileName,filename); f_mount(1,&Datafs); Datares=f_open( &Datafsrc ,tmp_name,FA_OPEN_EXIStiNG||FA_READ); if(jres==0) { while(1) { Datares=f_read(&Datafsrc,Buffer,1000,&mybw); for(i=0;i<1000;i++) { if(i>=1 && i<=1000) { datalen++; if(Buffer[i-1]==0XFF && Buffer[i]==0XD9) break; } } } }else if(bres==0||tres==0) { while(1) { for(;;) { datalen++; Datares=f_read(&Datafsrc,&j,1,&mybw); if(Datares||mybw==0) break; } } } f_close(&Datafsrc); return datalen; } //为了支持多文件兼容,这里设定统一的标准, //文件名为小写字母和数字的合体 //扩展名为大写格式,中间为点 //其中输入为文件名称(包括文件名,扩展名在内) //对文件数据进行整理 //主要是不知道怎么在结构体中设置不定长度的数组 void SendDataReady(char* filename) { //char *name long filelen; char i=0; unsigned int j; //char ExtensionBuf[3]; //sscanf((const char*)filename, "%[1-9a-z]", Buf->FileName); //对文件名进行赋值 // sscanf((const char*)filename, "%[A-Z]",Buf->fileExtension); //对扩展名进行赋值 sscanf(filename, "%[^.]", Buf->FileName); //对文件名进行赋值 (成功) sscanf(filename, "%*[^.].%s",Buf->fileExtension); //对扩展名进行赋值 (成功) //文件名截取 LCD_Str_O_P(300, 10, "char ready", 0); Buf->FileNameLen[0]=5; Buf->FileNameLen[1]=5; //数组赋值采用地址 filelen=GetDatalen(filename); //得到文件的长度 i=(char)(filelen/1000); j=(int)(filelen/1000); Buf->Segment=i; Buf->DataLen[0]=j;Buf->DataLen[1]=j; if(i==1){ Buf->Segment_label[0]=0x00; Buf->Segment_label[1]=0x00; } else if(i>1){ Buf->Segment_label[0]=0xff; Buf->Segment_label[1]=0xff; } LCD_Str_O_P(300, 10, "structready", 0); //Buf->Segment_label[0]=i; //Buf->Segment_label[1]=i; } ///Buffer段从零开始 void SendData(char* filename) { int i=0,j; unsigned char Buffer[1024]; // unsigned char buffer[1000]; LCD_Str_CH_P unsigned int mybw; char tmp_name[20]; sprintf((char*)tmp_name,"0:%s",filename); SendDataReady(filename); // LCD_Str_O_P(300, 10, "num", 0); // LCD_Str_CH_P(260,10,"计算出字节数",0); Buffer[0]=(unsigned char)Buf->fileExtension[0]; //这样的字符转换 Buffer[1]=(unsigned char)Buf->fileExtension[1]; Buffer[2]=(unsigned char)Buf->fileExtension[2]; Buffer[3]=Buf->Segment_label[0]; Buffer[4]=Buf->Segment_label[1]; Buffer[7]=Buf->FileNameLen[0]; Buffer[8]=Buf->FileNameLen[1]; Buffer[9]=(unsigned char)Buf->FileName[0]; Buffer[10]=(unsigned char)Buf->FileName[1]; Buffer[11]=(unsigned char)Buf->FileName[2]; Buffer[12]=(unsigned char)Buf->FileName[3]; Buffer[13]=(unsigned char)Buf->FileName[4]; // LCD_Str_CH_P(240,10,"缓冲区赋值成功",0); // LCD_Str_O_P(300, 10, "Buffer ready", 0); f_mount(1,&Datafs); Datares=f_open(&Datafsrc,tmp_name,FA_READ); if(Datares==FR_OK) { //LCD_Str_CH_P(260,10,"成功打开文件",0); LCD_Str_O_P(300, 10, "openfile", 0); for(;;) { //这里分段是从i=0开始 if(i { j=1000; Buffer[14]=j&0x00ff; Buffer[15]=(j>>8)&0x00ff; Buffer[16]=Buffer[14]; Buffer[17]=Buffer[17]; Datares=f_read(&Datafsrc,&Buffer[18],1000,&mybw); // USART1_printf(USART1,"%s",Buffer);//发送mms Buffer[5]=i; Buffer[5]=i; //到这里,Buffer的头部分已经准备好了 } if(i==Buf->Segment) //如果分段满 5, 0,1,2,3,4,5 实际有六段,5段为满1000的,最后一段为不满1000的 { //这时候DataLen[0]=5,假如Buffer=5800,那么,满1000的有5段,不满1000的为最后一段 Buffer[14]=Buf->DataLen[1]&0x00ff; Buffer[15]=(Buf->DataLen[1]>>8)&0x00ff; Buffer[16]=Buffer[14]; Buffer[17]=Buffer[17]; Datares=f_read(&Datafsrc,&Buffer[18],Buf->DataLen[0],&mybw); // USART1_printf(USART1,"%s",Buffer); break; // for() } i++; } } f_close(&Datafsrc); } ` |
|
相关推荐
1个回答
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
649 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2232 浏览 1 评论
768 浏览 0 评论
1525 浏览 1 评论
2271 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:58 , Processed in 0.520377 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号