OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7390|回复: 14

使用uip将一个30k左右的TXT文本文档下载到SD卡

[复制链接]

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
发表于 2014-10-9 13:49:33 | 显示全部楼层 |阅读模式
5金钱
        各位大神,我现在想将一个30k左右的文本文档通过uip协议传输,并将其放入SD卡新建TXT里面。文本文档已经通过软件解析成为字节传输,并且分为4k一个包,开始传输的命令为“len^name”;通过发送一次命令循环发送。SD卡文件系统也已经已搭建好。现在出现的问题是接收和写入不完全。各位大神们可不可以给个意见和参考?不甚感激。

最佳答案

查看完整内容[请看2#楼]

        哈哈,问题解决了。我就是利用循环发送和接收,接收的时候open的参数弄错了,(FA_OPEN_ALWAYS | FA_WRITE | FA_READ)这样就可以了。开始是(FA_CREATE_ALWAYS | FA_READ | FA_WRITE),参数定义看错了,这样就会覆盖。后面写成(FA_OPEN_ALWAYS | FA_READ | FA_WRITE)写进去的是整个包的大小,在数据接接收完后添加了很多空格。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
 楼主| 发表于 2014-10-9 13:49:34 | 显示全部楼层
        哈哈,问题解决了。我就是利用循环发送和接收,接收的时候open的参数弄错了,(FA_OPEN_ALWAYS | FA_WRITE | FA_READ)这样就可以了。开始是(FA_CREATE_ALWAYS | FA_READ | FA_WRITE),参数定义看错了,这样就会覆盖。后面写成(FA_OPEN_ALWAYS | FA_READ | FA_WRITE)写进去的是整个包的大小,在数据接接收完后添加了很多空格。
回复

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2014-10-9 16:40:24 | 显示全部楼层
4K一包可以吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-9 19:01:06 | 显示全部楼层
udp??
tcp??
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
 楼主| 发表于 2014-10-10 09:16:43 | 显示全部楼层
这两玩意挺不错的,总结的挺全面

FatFs文件注释大全.doc

130.5 KB, 下载次数: 304

FATFS代码学习.doc

165 KB, 下载次数: 239

回复

使用道具 举报

58

主题

359

帖子

0

精华

高级会员

Rank: 4

积分
987
金钱
987
注册时间
2014-9-29
在线时间
261 小时
发表于 2014-10-10 10:16:20 | 显示全部楼层
源码可否来一份
回复

使用道具 举报

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
 楼主| 发表于 2014-10-10 11:40:10 | 显示全部楼层

回复

使用道具 举报

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
 楼主| 发表于 2014-10-11 16:34:41 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,请问利用Uip发送大概4K一个包的数据到服务端的时候,数据全部存到缓冲区,但是传上去的却只有1.5K左右,这怎么回事?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-11 21:52:35 | 显示全部楼层
回复【8楼】正.点.原.子:
---------------------------------
你了解下网络IP最大一个包可以有多长??
就知道为啥了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
 楼主| 发表于 2014-10-15 14:01:55 | 显示全部楼层
 回复【9楼】 正点原子 :
---------------------------------
谢谢原子哥,我现在将那个文档分成1K多一点一个的包发送,为什么很多时候会出现丢包情况啊。这段程序该怎么修改好呢?还有这个延时需要加多久呀?感谢原子哥的悉心指导。
tcp_client_reconnect();
while (1)
{
    uip_polling();
    if(tcp_client_sta&(1<<7))
    {
        res = f_opendir(&Folder,"/config");
        res = f_open(&file,"/config/50H90.TXT", FA_OPEN_EXISTING | FA_READ); 
        memset(data,0x00,sizeof(data));
        strcpy(data,"");
        while (!f_eof(&file))
        {
            uip_polling();
            memset(onedata,0x00,sizeof(onedata));
            f_gets(onedata,sizeof(onedata),&file);
            strcat(data,onedata);
            if(strlen(data)>=1024)
            {
                memset((char*)tcp_client_databuf,0x00,sizeof((char*)tcp_client_databuf));
                sprintf((char*)tcp_client_databuf,"%08d^WriteText^|%s",strlen(data)+12,data);
                tcp_client_sta|=1<<5;
                delay_ms(230);
                memset(data,0x00,sizeof(data));
                strcpy(data,"");
             }
        }
        if(strlen(data)>0)
        {
            memset((char*)tcp_client_databuf,0x00,sizeof((char*)tcp_client_databuf));
            sprintf((char*)tcp_client_databuf,"%08d^WriteText^|%s",strlen(data)+12,data);
            tcp_client_sta|=1<<5;
            delay_ms(230);
            uip_polling();
            memset(data,0x00,sizeof(data));
            f_close(&file);
            break;
        }
    }
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-15 23:15:17 | 显示全部楼层
回复【10楼】正.点.原.子:
---------------------------------
所以要做协议,握手。
发送一次数据,等待应答,之后再发下一次数据
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
 楼主| 发表于 2014-11-12 11:46:32 | 显示全部楼层
做了个协议,终于可以了,谢谢原子哥。
回复

使用道具 举报

28

主题

218

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2013-11-19
在线时间
92 小时
发表于 2014-12-29 11:23:00 | 显示全部楼层
回复【12楼】正.点.原.子:
---------------------------------
什么协议?可以共享一下吗
回复

使用道具 举报

4

主题

125

帖子

1

精华

高级会员

Rank: 4

积分
870
金钱
870
注册时间
2014-8-7
在线时间
49 小时
 楼主| 发表于 2015-1-2 14:51:07 | 显示全部楼层
回复【13楼】1375917982gxut:
---------------------------------
协议是自己和服务器之间定的,就像原子哥说的,发送数据,等待服务器收到后返回的一个特定数据,然后继续发送下一个数据。
回复

使用道具 举报

8

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2013-5-15
在线时间
8 小时
发表于 2015-2-10 07:14:04 | 显示全部楼层
这么说webservice就不能分包发送了!浏览器不会自动确认
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 20:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表