Jone
Jone

注册于 10 months ago

回答
121
文章
0
关注者
0

严重怀疑是你的局部变量问题导致的

  1. 没开启优化的情况下函数执行完你可以在函数外使用继续操作函数内的变量
  2. 开启优化后,一旦函数结束局部变量立即被销毁,此时你再用那就有各种异常了

这种情况就相当于双网卡了吧,这有个选网口通信的例程
AT_Socket API比较有限,不一定能这样用,试试看吧

软件包对模块的支持仅仅是在“能用”的水平,稳定性需要自己慢慢打磨,有些甚至还得动动at组件才能稳定

wireshark抓包看下,应该是板子上的接收窗口满了,如果是接收窗口满导致的那就看看你的socket代码为什么没及时将接收缓存的数据取出

我用过两个版本的lwip:
一个是4.0.2上的2.1.0
另一个是4.0.3(非release版本)的2.1.2
两个版本select还都是永久阻塞使用,都正常

pbuf_alloc和pbuf_free成对存在,而且按顺序释放,正常情况不会出现内存泄漏
申请不到有俩原因:

  1. 未经pbuf_free释放造成内存泄漏
  2. 上层应用占用了pbuf,网口收到数据后继续pbuf_alloc,当pbuf量少时就出现申请不到的情况了。增加pbuf数量或者等上层应用处理完就恢复了,这种问题即使出现也很短暂

看你的描述显然是第一个问题导致的,pbuf的申请和释放有多组api,申请和释放必须用成对的同一组。给你的建议是追踪一下pbuf的走向(rtt里在eth_rx_thread_entry()线程进行释放),看看为啥没释放

已支持的设备一大堆,照葫芦画瓢啊

NB的模组低功耗可以做到3ua,mcu选低功耗的,外围器件选静态电流小的,电平匹配一定要做。软件空闲就进低功耗模式,电流下不来时仔细检查每个io的硬件和软件配置

之前我用stm32h7的发现rtt没对低功耗串口做兼容,你看下这篇文章能不能解决你的问题

网页上弄俩密码框,一个原密码,另一个新密码;使能webnet的CGI功能,利用CGI接收密码框内容做判断

把你的log串口关掉,其他会产生中断的外设都反初始化一下

既然你知道使用空闲中断为什么不自己实现一下呢,去drv_usart.c中发挥一下

反复启动是指重复调用rt_timer_start()吗?如果是这样的话是从头开始

这个软件是向下兼容的,只要你用着没问题就没必要追新,不过我个人的话是有提示就跟着更新了

rtt不能兼顾所有的芯片,需要参考已有的驱动代码添加对新串口的支持。某些串口的特性也需要用户来自行实现

发布
问题