ESP8266 TCP 调试问题 MALLOC问题

一、TCP卡死(无法下发,无法上传)

  1. 采用非阻塞socket时,发送多次数据后,发现tcp发送是成功的,读取是成功的,服务器下发却是失败的,经过排查,是因为heap过低导致的,这里会出现一种假死状态,所以为了维持tcp的正常(除非用没收到心跳包回复来做死机判断),必须限定tcp的heap足够

二、内存溢出排查

  1. 排查内存溢出时,发现是 采用 malloc ,free没有释放,排查原因,发现是malloc的buf的地址指针被改变了!
    在这里插入图片描述
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,而ESP8266是一个嵌入式WiFi模块,它们通常通过UART串口通信来协同工作。通过STM32的USART(通用异步接收发送器)控制,可以使用标准库提供的函数处理字符AT指令序列,用于配置和管理ESP8266。 首先,你需要设置STM32的USART用于发送AT命令到ESP8266,这通常涉及到初始化USART、打开串口以及设置波特率等。然后,你可以编写一段循环,不断地从USART读取ESP8266的响应,例如命令确认或者错误信息。 当AT命令成功执行后,你可以发送TCP连接请求(如`AT+CIPSTART`),并获取ESP8266分配给TCP连接的IP地址和端口号。一旦建立连接,就可以通过STM32发送和接收TCP数据了,比如使用`AT+CIPSEND`发送数据,`AT+CIPRECV`接收数据。 以下是基本步骤的伪代码示例: ```c void send_AT_command(char* command) { usart_write(command); while (usart_read != '\r' || usart_read != '\n') {} } // 初始化串口 void init_USART() { // 设置波特率,停止位,校验位等... USART_InitTypeDef USART_InitStructure; // 开启USART USART_Cmd(USARTx, ENABLE); } // 发起TCP连接 void start_TCP_connection() { char cmd[] = "AT+CIPSTART=\"TCP\",\"your_server_ip\",\"your_port\""; send_AT_command(cmd); } // 发送TCP数据 void send_TCP_data(char* data) { char cmd[] = "AT+CIPSEND=" + strlen(data); send_AT_command(cmd); usart_write(data); } // 接收TCP数据 char* receive_TCP_data(int max_length) { char* received_data = malloc(max_length); // 等待接收数据并填充received_data return received_data; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值