rt-thead、SPI flash、FAL分区、AT框架
CPU通过ESP8266 AT指令使用AT框架连接http服务器,下载文件过程中发生内存不足的错误打印

1、造成这个报警原因:(1)spi flash单数据线,写入速率较慢。(2)对比以前通过NB IOT升级没问题的原因,也可能是WIFI的速率太快,系统缓存不过来
2、查看http_ota_fw_download函数源码,OTA先获取文件大小,再擦除相就的大小flash的空间,而且提示信息也是先有擦除消息打印,再有内存不足打印
3、将flash擦除移到HTTP通讯的前面,先擦除再通讯,问题解决

static int http_ota_fw_download(const char* uri)
{int ret = 0, resp_status;int file_size = 0, length, total_length = 0;rt_uint8_t *buffer_read = RT_NULL;struct webclient_session* session = RT_NULL;const struct fal_partition * dl_part = RT_NULL;/* Get download partition information and erase download partition data */if ((dl_part = fal_partition_find("fm_area")) == RT_NULL){LOG_E("Firmware download failed! Partition (%s) find error!", "fm_area");ret = -RT_ERROR;goto __exit;}LOG_I("Start erase flash (%s) partition!", dl_part->name);if (fal_partition_erase(dl_part, 0, dl_part->len) < 0){LOG_E("Firmware download failed! Partition (%s) erase error!", dl_part->name);ret = -RT_ERROR;goto __exit;}LOG_I("Erase flash (%s) partition success!", dl_part->name);/* create webclient session and set header response size */session = webclient_session_create(GET_HEADER_BUFSZ);if (!session){LOG_E("open uri failed.");ret = -RT_ERROR;goto __exit;}/* send GET request by default header */if ((resp_status = webclient_get(session, uri)) != 200){LOG_E("webclient GET request failed, response(%d) error.", resp_status);ret = -RT_ERROR;goto __exit;}file_size = webclient_content_length_get(session);rt_kprintf("http file_size:%d\n",file_size);if (file_size == 0){LOG_E("Request file size is 0!");ret = -RT_ERROR;goto __exit;}else if (file_size < 0){LOG_E("webclient GET request type is chunked.");ret = -RT_ERROR;goto __exit;}buffer_read = web_malloc(HTTP_OTA_BUFF_LEN);if (buffer_read == RT_NULL){LOG_E("No memory for http ota!");ret = -RT_ERROR;goto __exit;}memset(buffer_read, 0x00, HTTP_OTA_BUFF_LEN);LOG_I("OTA file size is (%d)", file_size);do{length = webclient_read(session, buffer_read, file_size - total_length > HTTP_OTA_BUFF_LEN ?HTTP_OTA_BUFF_LEN : file_size - total_length);   if (length > 0){/* Write the data to the corresponding partition address */if (fal_partition_write(dl_part, total_length, buffer_read, length) < 0){LOG_E("Firmware download failed! Partition (%s) write data error!", dl_part->name);ret = -RT_ERROR;goto __exit;}total_length += length;print_progress(total_length, file_size);}else{LOG_E("Exit: server return err (%d)!", length);ret = -RT_ERROR;goto __exit;}} while(total_length != file_size);ret = RT_EOK;if (total_length == file_size){if (session != RT_NULL){webclient_close(session);session = RT_NULL;}if (buffer_read != RT_NULL){web_free(buffer_read);buffer_read = RT_NULL;}LOG_I("Download firmware to flash success.");LOG_I("System now will restart...");rt_thread_delay(rt_tick_from_millisecond(5));/* Reset the device, Start new firmware */extern void rt_hw_cpu_reset(void);rt_hw_cpu_reset();}__exit:if (session != RT_NULL)webclient_close(session);if (buffer_read != RT_NULL)web_free(buffer_read);return ret;
}

rt-thread http_ota通过WIFI下载固件文件的内存不足解决相关推荐

  1. win10 oracle11g 乱码,win10系统下载中文文件出现乱码的解决方法

    将windows7系统升级到windows10正式版后,发现即使自己将系统显示语言改为中文,在用浏览器下载某些中文文件时候,下载的文件名及文件内容仍会出现乱码的情况.这是怎么回事呢?其实,该问题是用户 ...

  2. php 下载后文件打不开,解决php下载excel无法打开的问题

    本节内容: php下载excel后无法打开的解决方法和注意事项. php下载excel文件,无法打开的原因分析: 1.在下载的过程中不要 输出任何非文件信息,比如 echo log信息. 否则下载后的 ...

  3. Google drive谷歌网盘下载副本文件无法调用IDM解决方法

    最近通过加入星标并复制产生副本文件来解决谷歌限制文件大小时,遇到了Google drive谷歌网盘下载副本文件无法调用IDM来进行下载,只能够使用浏览器直接下载. 但是直接下载原文件没有出现问题,可以 ...

  4. java下载的文件不完整_JAVA 解决FTP下载文件不完整问题

    在使用java的ftp下载服务器上的文件获取文件的byte[],然后对byte进行加密传输时, 注意是要获取byte[],而不是下载文件到本地: 发现下载的byte[]大小总是小于文件实际大小,并且下 ...

  5. 百度云管家下载大文件速度慢的解决办法

    win7下百度云管家下载百度网盘上的大文件,速度基本在100K以内.网上搜索解决办法有2类: 1,一种是迅雷法.采用替换URL中的home为wap,取得下载链接,然后用迅雷下载.但实际上迅雷下载速度也 ...

  6. 下载vue-element-admin文件,最直接解决报错的方法

    我知道更换版本很麻烦,我之前也尝试过很多除了修改版本之外的方法,结果是改改这个修修那个,花了三天的时间还是屈服了,一劳永逸更换旧的版本,欢迎大家经历过各种报错后再回来看这篇文章,点一下收藏,不然就找不 ...

  7. 迅雷下载的文件是PHP怎么解决,DZX1.5迅雷下载时下载下来的是PHP文件的解决方法...

    在对方有足够的金币的情况下,在登陆了的情况下,下载为什么会显示PHP文件,为什么右键另存为就正常?现在谁都安装迅雷的了,如果你硬要用右键另存为才 能下载的话,估计论坛的会员都跑光了,人家都觉得下载不了 ...

  8. retrievefile java_java - FTPClient.retrieveFile返回false,但仍然下载了文件 - 堆栈内存溢出...

    我正在尝试使用此代码从FTP服务器检索文件. private class FtpTask extends AsyncTask { protected Long doInBackground(Void. ...

  9. vue使用XSLX,用CDN引入后下载的excel文件无法打开的解决办法

    目的:优化首屏加载速度 使用npm打包的体积: 引用cdn打包后的体积: 使用npm安装在项目里的xlsx插件,下载的文件是没问题的,但发现了引入CDN后下载的文件无法打开: 解决办法:查看node_ ...

最新文章

  1. 格式化json日期'/Date(-62135596800000)/'
  2. Uva 11997 多路归并
  3. 为MyEclipse加入自己定义凝视
  4. javascript实现的一个带下拉框功能的文本框
  5. 我们做了一个医疗版MNIST数据集,发现常见AutoML算法没那么好用
  6. Sharepoint 2013 发布功能(Publishing features)
  7. 【完整流程】用VSCode替换Vivado默认编辑器
  8. Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null
  9. c语言程序中的if-else语句,C语言if else语句
  10. 《大数据》专题征文:国产环境下的大数据处理系统
  11. javascript基础修炼——前端路由的基本原理
  12. Hexo添加Follow me on CSDN效果
  13. 文字处理技术:搞明白了表格是如何参与文字方向的
  14. CloudCompare:汉化
  15. NV16 转 NV12
  16. PDF文件转MOBI怎么转?在线操作轻松完成
  17. 中国互联网络发展状况统计报告计算机,中国互联网络发展状况统计报告-计算机网络信息中心.DOC...
  18. pycharm条件判断
  19. whois域名查询工具在线使用
  20. 《大数据大创新:阿里巴巴云上数据中台之道》:解密阿里数据中台建设

热门文章

  1. 小米物联网世界第一_世界最大物联网?小米牵手宜家布局AloT,却因它栽了大跟头?...
  2. python三方库ping_Python pingping包_程序模块 - PyPI - Python中文网
  3. x58和x79服务器性能,革了X58的命!新旗舰X79究竟改变了啥?
  4. 微软VS苹果 桌面操作系统的终极一战
  5. 如何从椭圆度 matlab,如何利用matlab画出如图潮流椭圆
  6. 看了期《咏乐汇》:赵雅芝
  7. MyBatisPlus主键生成策略
  8. js删除字符串最后一个字符方法总汇
  9. mysql 脚本超时 导入_BigDump -解决PHPmyadmin导入超大 MySQL 数据库备份文件脚本超时...
  10. 【Unity从零开始制作空洞骑士】①制作人物的移动跳跃转向以及初始的动画制作