RT-Thread论坛
直播中

硕达科讯

9年用户 966经验值
私信 关注
[问答]

串口OTA在线升级及内存不足的原因?

所有功能正常的程序,为了在加快OTA下载的速度,将原来的串口接收数组的长度1024变为3072时反而接收不到数据了,后来查看了一下内存具体如下:
free
total : 45708
used : 34944
maximum : 35540
程序编译结果:
              Used Size(B)           Used Size(KB)
Flash:         237788 B              232.21 KB
RAM:            19748 B               19.29 KB
项目MCU的型号是STM32F103ZET6,ROM大小512,RAM大小64KB,所以目前没查到是什么原因造成的。之前是用3072测试OK的,后来因为功能增加所以增加了一些变量,及逻辑代码。然后就不行了,只能降低串口的bufferSize大小,不然串口数据json解析出错。然后改为1024以后json数据解析正常,所有功能正常。
有哪位大佬遇到类似状况???
这个串口是我单独开的一个串口,用的串口2的DMA接收,通过乒乓模式切换读取DMA里面的数据,然后写入flash指定的区域中,这个功能是没有问题也是跑通了的,只是后来因为增加了一些变量逻辑以后出现了这个问题,然后说是内存的问题,目前粗定位来看就是把这个bufferSize改小1024以后功能又恢复正常了,如果改回3072以后就不正常。
本项目主要实现如下功能:
    1,12个温区的PID温度控制
    2,modbus主机与8个电机驱动器的控制交互
    3,modbus从机与触摸屏的交互
    4,自定义OTA的升级,包括flash的分区管理
    5,4通道AD采样检测,电压,应力
    6,json数据解析及打包上传
    7,其他数字信号的处理
    8,片外flash数据读写
    9,PWM,RTC等


回帖(1)

张桂芳

2025-9-17 16:58:55
  这样提供不了什么建议的,可能有问题的地方太多了。
是用json传输ota包,还是串口1通过json解析可以ota了,然后通过串口2接收ota的包?
举报

更多回帖

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