嵌入式技术论坛
直播中

而无返还

9年用户 1320经验值
擅长:光电显示
私信 关注
[问答]

webclient是怎么做到让服务器等待fal擦写好之后再发数据的?

硬件环境:

STM32F429 + ETH Phy + SPI FLASH

软件环境:

rtt 4.0.3 + lwip + webclient + dfs + elm + ota_download

问题疑惑点,我看了ota_download中的http_ota_fw_download函数,这个flash擦除和写都非常慢,http已经连接好了,不可能等到擦除完再给发数据,这个过程,webclient是怎么做到让服务器等待fal擦写好之后再发数据的?

另一个问题疑惑点,我搭建一个文件服务器,用webclient中的webclient_get_file从文件服务器上下载文件正常。再做一个php文件上传的页面,测试也是正常使用,文件可以通过html表单上传到服务器器。于是我便用webclient中的webclient_post_file函数上传文件,函数返回值也是正常的0.但是服务器上看不到文件,找找了很久没找到原因,调试都是正常的运行过去了,很奇怪
我下面放出来php代码和html测试的代码

  《?php

  if ($_FILES[“file”][“error”] 》 0)

  {

  echo “错误:: ” 。 $_FILES[“file”][“error”] 。 “《br》”;

  }

  else

  {

  echo “上传文件名: ” 。 $_FILES[“file”][“name”] 。 “《br》”;

  echo “文件类型: ” 。 $_FILES[“file”][“type”] 。 “《br》”;

  echo “文件大小: ” 。 ($_FILES[“file”][“size”] / 1024) 。 “ kB《br》”;

  echo “文件临时存储的位置: ” 。 $_FILES[“file”][“tmp_name”] 。 “《br》”;

  // 判断当期目录下的 upload 目录是否存在该文件

  // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777

  if (file_exists(“upload/” 。 $_FILES[“file”][“name”]))

  {

  echo $_FILES[“file”][“name”] 。 “ 文件已经存在。 ”;

  }

  else

  {

  // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下

  move_uploaded_file($_FILES[“file”][“tmp_name”], “upload/” 。
$_FILES[“file”][“name”]);

  echo “文件存储在: ” 。 “upload/” 。 $_FILES[“file”][“name”];

  }

  }

  ?》

  《html》

  《head》

  《meta charset=“utf-8”》

  《title》文件上传《/title》

  《/head》

  《body》

  《form action=“upload.php” method=“post” enctype=“multipart/form-data”》

  《fieldset》

  《legend》文件上传《/legend》

  《label for=“file”》文件名:《/label》

  《input type=“file” name=“file” id=“file”》

  《input type=“submit” name=“submit” value=“提交”》

  《/fieldset》

  《/form》

  《/body》

  《/html》

回帖(1)

其实znvm

2023-2-7 11:08:08
ota_download实现时是每4KB请求,根据请求回来大小,然后对FLASH进行擦写。这个过程很慢,HTTP服务器更会认为设备掉线了,整个下载过程就退出了。
我在NB与4G网络测试过该代码,如果使用NB这样低速网络,这个还可以应用。但在4G下载速度实现在快了,内部AT组件会报buff错误。分析就是因为写的太慢,靠成爆掉。
建议更改程序,采用分区下载方式实现,在高速网络上实测下载速度与写FLASH可以相适应。兼容性更好。
http 1.1都支持分区请求。
服务器端我是帮不上了,但测试时可以使用网上http服务器工具。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分