完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现象:使用RTT的SAL_AT组件,利用sim800c, 在阿里物联网平台进行OTA下载过程中,占用内存超大(700K的文件下载,动态内存使用最高超过600K)。下载完毕后内存全部释放。 查找问题: 看了下RTT实现机理是AT组件检查到+RECEIVE标志后,通过URC表调用回调函数,回调函数再执行at_socket.c中的at_recv_notice_cb()回调函数,使用at_recvpkt_put()将接收到的数据写入list链表上,然后使用workqueue唤醒等待接收数据的线程使用at_recvpkt_get()数据读取, 该函数读完后使用at_recvpkt_node_delete()删除链表节点并且释放内存。 在这个过程中内存申请就在urc_recv_func()函数,没接收到一个“+RECEIVE”b标志就会申请内存,因为没有释放,造成动态内存使用超高。 请教: 只要内存足够大,整个下载过程非常完整,但是过程中动态内存申请巨大。同样的应用程序,使用netdev组件转换成以太网,则没有这么大的内存消耗。 所以请教下这个占用内存超大的原理。以下是运行日志: [172703] I/ali-ota: receive 4096 bytes, total recieve: 0 bytes ext-sram 1048576 63012 985564 ext-sram 1048576 77200 971376 ext-sram 1048576 84220 964356 ext-sram 1048576 126600 921976 可以看见,从固件开始下载后,动态内存的使用往上飙升,直至下载完毕后,所有内存释放得干干净净。 |
|
相关推荐
7个回答
|
|
调用 recv 函数接收完一段数据之后,链表中的这段数据数据应该就会被释放,sim800c 这段数据长度应该为 1.5 K 左右,内存占用这么大是一直没有调用 recv 接收数据??
|
|
|
|
PS 看下 at client 线程优先级是否比 OTA 接收固件的线程优先级高,感觉像是 client 一直在收,可是收完了没人去取
|
|
|
|
|
|
|
|
是这样的,关于at_recvpkt_get()和at_recvpkt_put()代码我是看了的. 但仿佛是SIM800的接收超级快, at_recvfrom()来不及接收. 造成at_socket_sim800c.c中的urc_recv_func()一直在申请内存, 造成动态内存超级大.
最开始我使用的内部内SRAM, 经常报警urc_recv_func()内部的内存申请失败. 然后使用外部SRAM后得以解决. 而后又出现resp buffer爆满, 我又增加了AT接口使用的uart驱动fifo的尺寸为8K, 问题也得以解决, 整个下载过程成功. 但是整个下载过程中,动态内存申请消耗太大, 几乎接近于下载文件的大小. 给人的感觉是at_recvpkt_get()未释放内存, 但是这部分代码看上去是没有问题的. |
|
|
|
加大 固件接收的频率及包尺寸试试呢
|
|
|
|
加大固件的接收频率怎么做?我已经将OTA的线程优先级提到最高, 包的尺寸加大可能会加剧at_client线程的内存块申请数量, 毕竟sim800c一次性传输数据最大也就1.5K左右.
我想连接下RTT的DFS实现poll/select的方式, 按照unix/linux的机制,系统使用的fd数量就这么几个, 轮询效率也应该不会低到哪里去的. 我看wqueue_wake()实现机理是查询socket号,然后直接唤醒持有socket号的线程. 如果一个线程里面有两个或者两个以上socket, 会不会造成延时?? |
|
|
|
增加更多的日志再分析下呢,比如:每次 at client 线程收到一个报文,OTA 线程收到一个报文。看下时序关系
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
798 浏览 0 评论
4836 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2622 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2958 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31763 浏览 11 评论
73078 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 15:01 , Processed in 0.913589 second(s), Total 55, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号