硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2878|回复: 4
收起左侧

[有问必答] 请教ESP8266中,ESP8266_RxNew函数使用的问题

[复制链接]

91

主题

289

回帖

562

积分

金牌会员

积分
562
发表于 2020-1-8 22:41:58 | 显示全部楼层 |阅读模式
请问ESP8266_RxNew函数应该怎么使用?我看V7的“ESP8266串口WIFI模块TCP客户端”中是这样用的
if (g_TCPServerOk == 1)
                {
                        cmd_len = ESP8266_RxNew(cmd_buf, &tcpid);
                        if(cmd_len >0)
                        printf("\r\n接收到数据长度 = %d\r\n远程ID =%d\r\n数据内容=%s\r\n", cmd_len, tcpid, cmd_buf);
                }

       。。。。。。
case JOY_DOWN_R:                            /* 摇杆右键按下,向TCP客户端发送数据 */
                                        g_TCPServerOk = 1;
                                        ESP8266_SendTcpUdp(tcpid, (uint8_t *)WriteText, sizeof(WriteText));
                                        break;

我理解的是如果TCP建立连接后,如果不按其他按键,那么g_TCPServerOk 就是 1,然后只按右键就向客户端发送数据。如果收到客户端数据就通过串口打印出来,一直循环下去。

我在初始化时让g_TCPServerOK=1,然后主程序的while循环中是如下程序:
while (1)
        {
                if (g_TCPServerOk)
                {
                        RxBuf_len = ESP8266_RxNew(RxBuf,0);
                        if (RxBuf_len > 0)
                        {
                                ComSendBuf(COM1, RxBuf, RxBuf_len);                               
                        }                       
                }
                else
                {
                        /* 将 COM_ESP8266 口接收到数据转发到 COM1 */
                        if (comGetChar(COM_ESP8266, &Value))
                        {
                                comSendChar(COM1, Value);
                        }
                        /* 将 COM1 口接收到数据转发到 COM_ESP8266 */
                        if (comGetChar(COM1, &Value))
                        {
                                comSendChar(COM_ESP8266, Value);
                        }
                }
                KeyCode = bsp_GetKey();
                if (KeyCode > 0)
                {
                        switch(KeyCode)
                        {
                                case JOY_DOWN_OK:
                                        ESP8266_SendTCPUDP(0, data1, 10);
                                        break;
                                default:
                                        break;
                        }
                }
               
        }


服务器(ESP8266)向客户端(电脑)发送数据正常,一旦客户端发送数据,程序就跑到了HardFault_Handler了。如果只是else以下的程序,接收和发送都没有问题。所以想请问是不是ESP8266_RxNew使用方法不对?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107463
QQ
发表于 2020-1-9 00:12:14 | 显示全部楼层
ESP8266_RxNew只是单纯的做数据接收的解析。

而那个变量g_TCPServerOk要注意,我是在例子中防止用户建立了TCP Server后操作其它功能。
回复

使用道具 举报

91

主题

289

回帖

562

积分

金牌会员

积分
562
 楼主| 发表于 2020-1-9 08:59:53 | 显示全部楼层
RxBuf_len = ESP8266_RxNew(RxBuf,0);可以在主循环中一直调用吗?
为什么客户端(电脑)一发送数据,执行下面的程序就进入硬件错误中断HardFault_Handler呢?
if (g_TCPServerOk)
                {
                        RxBuf_len = ESP8266_RxNew(RxBuf,0);
                        if (RxBuf_len > 0)
                        {
                                ComSendBuf(COM1, RxBuf, RxBuf_len);                                
                        }                        
                }

工程如下,在V3(103vet6)的板子上测试的 project.rar (4.67 MB, 下载次数: 1)


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107463
QQ
发表于 2020-1-9 09:12:08 | 显示全部楼层
feiante 发表于 2020-1-9 08:59
RxBuf_len = ESP8266_RxNew(RxBuf,0);可以在主循环中一直调用吗?
为什么客户端(电脑)一发送数据,执行 ...

特别注意一点,我更新那个8266驱动代码了。
回复

使用道具 举报

91

主题

289

回帖

562

积分

金牌会员

积分
562
 楼主| 发表于 2020-1-12 20:33:49 | 显示全部楼层
今天照着V7的bsp_uart_fifo.c和bsp_esp8266.c对了一遍,没有发现不一样的地方,不知道驱动更新了那里了
等我把下面这句加在V6的板子上试试,看看会不会进入硬件中断。
if (g_TCPServerOk == 1)
                {
                        cmd_len = ESP8266_RxNew(cmd_buf, &tcpid);
                        if(cmd_len >0)
                        printf("\r\n接收到数据长度 = %d\r\n远程ID =%d\r\n数据内容=%s\r\n", cmd_len, tcpid, cmd_buf);
                }
V6的目前只有发送数据到中移云,没有接收数据解析部分。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-2 22:11 , Processed in 0.254548 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表