乐鑫技术交流
直播中

李艳

7年用户 1459经验值
私信 关注
[问答]

esp-01未执行回调函数是怎么回事?

我有 2 个 esp-01 模块。其中一个运行STAtiONAP模式,并充当运行在STATION模式的另一个esp模块的tcp服务器。数据传输工作正常,但回调函数未正确执行。

法典:
void ICACHE_FLASH_ATTR tcp_connect_sap_cb(void *arg){
结构体 espconn *conn_sap = (结构体 espconn *)arg;这没有被执行
espconn_regist_recvcb(conn_sap、recv_sap_cb);正在工作
        send_msg("'connect cb' SAP TCP CONNECTEDn"); // THIS IS NOT BEING EXECUTED
}

本地空隙 ICACHE_FLASH_ATTR tcp_init_sap(){
tcp_proto_sap.local_port = 2233;
tcp_conn_sap.类型=ESPCONN_TCP;
tcp_conn_sap.状态 = ESPCONN_NONE;
        tcp_conn_sap.proto.tcp = &tcp_proto_sap;
        espconn_regist_connectcb(&tcp_conn_sap, tcp_connect_sap_cb);

        sint8 sap_conn_accept = espconn_accept(&tcp_conn_sap);
if(sap_conn_accept != 0){
                os_printf("SAP TCP CONN ACCEPT ERROR: %dn",sap_conn_accept);
}else{
                os_printf("SAP TCP DONE");
        }

        sint8 max_conn = espconn_tcp_set_max_con_allow(&tcp_conn_sap,5);
if(max_conn != 0){
                os_printf("Set max conn error: %dn",max_conn);
        }
        espconn_regist_time(&tcp_conn_sap,7200,0);

}

void user_init(void){
uart_init(BIT_RATE_19200、BIT_RATE_19200);
wifi_init();
espconn_init();
}

接收回调已注册,但未执行os_printf语句。
      

回帖(1)

李梅

2024-7-20 16:35:18
从您提供的代码片段来看,您正在尝试在ESP-01模块上实现TCP服务器和客户端之间的通信。您提到回调函数没有被执行,这可能是由于以下原因之一:

1. **回调函数注册问题**:确保您在初始化ESP-01模块时正确注册了回调函数。在您的代码中,您需要在调用`espconn_regist_connectcb`时传递`tcp_connect_sap_cb`函数。

2. **回调函数定义问题**:检查您的回调函数定义是否正确。确保函数签名与ESP-01模块期望的签名相匹配。例如,对于连接回调函数,它应该是这样的:

   ```c
   void ICACHE_FLASH_ATTR tcp_connect_sap_cb(void *arg);
   ```

3. **回调函数调用问题**:确保在回调函数中正确调用了其他函数。例如,您在回调函数中调用了`espconn_regist_recvcb`,但您需要确保在回调函数之外也正确注册了接收回调函数。

4. **ESP-01模块配置问题**:检查您的ESP-01模块是否正确配置为STATIONAP模式,并确保另一个模块配置为STATION模式。同时,确保两个模块的IP地址、子网掩码和网关设置正确。

5. **代码逻辑问题**:检查您的代码逻辑,确保在连接建立后正确调用了回调函数。例如,您可以在连接建立后立即调用`tcp_connect_sap_cb`函数,以确保回调函数被执行。

6. **调试和日志记录**:在您的代码中添加更多的调试信息和日志记录,以帮助您确定问题所在。例如,您可以在回调函数的开始和结束处添加日志记录,以检查回调函数是否被调用。

7. **固件版本问题**:确保您使用的ESP-01模块固件版本与您的代码兼容。如果固件版本不兼容,可能会导致回调函数无法正确执行。

8. **硬件问题**:检查您的ESP-01模块硬件连接是否正确,确保模块之间的通信没有问题。如果硬件连接有问题,可能会导致回调函数无法正确执行。

综上所述,您需要仔细检查您的代码和硬件设置,以确定回调函数未被执行的原因。通过添加调试信息和日志记录,您将更容易找到问题所在并解决它。
举报

更多回帖

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