新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2016-1-23
- 在线时间
- 8 小时
|

楼主 |
发表于 2017-4-10 11:02:33
|
显示全部楼层
本帖最后由 zzzzhhhy 于 2017-4-10 11:09 编辑
我按照你的方法试了一下,果然发现了一个问题,程序在调用tcp_server_recv函数在接收数据时并不能一口气在TCP_SERVER_RX_BUFSIZE的范围内全部接收上位机发送过来的数据,就算我把TCP_SERVER_RX_BUFSIZE定为10000,它一次性只能接收1460 bytes的数据,超出这个大小的数据程序会反复调用tcp_server_recv函数来接收。比如,我的小程序大小为4960 bytes,那么一共调用了4次tcp_server_recv函数。所以我又把tcp_server_demo的函数改了一下,如图1,2,3所示。
C:\Users\macbookpro\Desktop\图1.PNG
C:\Users\macbookpro\Desktop\图2.PNG
C:\Users\macbookpro\Desktop\图3.PNG
图1,2为对tcp_server_test函数的修改,图3为对tcp_server_recv函数的修改。增加了rece_cnt这个变量来统计tcp_server_recv函数调用了多少次,也利用这个变量和app_size来计算新接收到的程序写入flash的地址。如前所述,data_len其实最大只能为1460,而由图3也可知,app_size并不和data_len同步变化,而是等于上一次调用tcp_server_recv函数时data_len的值。这样从串口接收的结果就如图4所示。
C:\Users\macbookpro\Desktop\图4.PNG
我也从串口将接收到的数据全部送回来检查了一下,没有一个个对,但开头几十个和结尾几十个数据都是对的,但即使这样我的小程序依旧不能执行,现在也还没检查出原因。
PS:我的小程序用串口IAP验证过,是可以正确执行的。
|
|