乐鑫技术交流
直播中

陈飞

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

wificlient write(buf,len) 函数中的编译器错误的原因?怎么解决?

我正在尝试编译这段代码:
代码:全选byte tx_buf[BUF_L];
unsigned int tx_buf_start,tx_buf_end=0;
WiFiClient client;
size_t tx_buf_send()
{
  if (client.connected() && (tx_buf_start!=tx_buf_end)) {
    unsigned int end = (tx_buf_start= BUF_L) {
      tx_buf_start = 0;
      written_again = client.write(tx_buf,tx_buf_end);
      tx_buf_start+=written_again;
    }
    return written+written_again;
  } else return 0;
}


编译错误是:
在 /home/manu/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WiFi/src/ESP8266WiFi.h:39:0 中包含的文件中,
                 来自 /home/manu/Arduino /huzzah_as_wifi_serial/huzzah_as_wifi_serial.ino:1:/home/manu/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WiFi/src/WiFiClient.h
: 在'size_t WiFiClient::write(T& , size_t) [with T = unsigned char [512]; size_t = unsigned int]':
/home/manu/Arduino/huzzah_as_wifi_serial/huzzah_as_wifi_serial.ino:75:53: 从这里需要
/home/manu/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WiFi /src/WiFiClient.h:123:36: 错误:请求'source'中的成员'available',它是非类类型'unsigned char [512]'
     size_t left = source.available();
                                    ^
/home/manu/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WiFi/src/WiFiClient.h:127:5: error: request for member 'read' in 'source', 这是非类类型 'unsigned char [512]'
     source.read(buffer.get(), will_send);
这是在 arduino-1.6.12 中编译的。我尝试了几次转换以强制 gcc 使用 WiFiClient::write(const uint8_t *buf, size_t size); 方法而不是给出编译器错误的模板版本,因为我已经看到它应该修复编译器错误而没有运气。
我在这里错过了什么?

回帖(1)

贾桂林

2024-6-5 17:52:19
该段代码错误的原因可能是缺少引用头文件。需要引入WiFiClient.h头文件。

可以在代码前添加以下语句:

#include

如果还是存在错误,可以尝试修改下面这部分代码:

unsigned int end = (tx_buf_start+BUF_LEN)%BUF_SIZE;

将BUF_L改为BUF_LEN,同时将BUF_SIZE设为tx_buf数组的大小,即:

#define BUF_SIZE 64

也可以将代码块改为:

if (client.connected() && (tx_buf_start!=tx_buf_end)) {
  unsigned int send_len = (tx_buf_start < tx_buf_end) ?(tx_buf_end - tx_buf_start):(BUF_SIZE - tx_buf_start);
  int written_again = client.write(tx_buf+tx_buf_start,send_len);
  tx_buf_start = (tx_buf_start + written_again) % BUF_SIZE;
}

这样代码就可以顺利编译通过。
举报

更多回帖

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