在使用ESP32的uart_read_bytes函数读取串口数据时,你可能会遇到以下错误:

/root/source/uart/main/uart.c:56:47: 警告: 传递参数 2 给 'uart_read_bytes' 时,整数转换成指针类型 [-Wint-conversion] 56 | rxBytes = uart_read_bytes(UART_NUM_0, data, 1, 20 / portTICK_PERIOD_MS); | ^~~~ | | | uint8_t {aka unsigned char}

/root/source/uart/main/uart.c:56:19: 错误: 'data' 未初始化 [-Werror=uninitialized] 56 | rxBytes = uart_read_bytes(UART_NUM_0, data, 1, 20 / portTICK_PERIOD_MS); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

错误分析

  • 'Wint-conversion': 这是一个类型转换警告,表示你将一个整数类型的值传递给了需要指针类型的参数。在你的代码中,'data' 是一个 'uint8_t' 类型的变量,而 'uart_read_bytes' 函数的第二个参数需要一个指向存储读取数据的缓冲区的指针。
  • 'Werror=uninitialized': 这是一个未初始化变量的错误,表示你在使用变量 'data' 之前没有对其进行初始化。

解决方案

  1. 将 'data' 声明为数组: 将 'data' 声明为一个 'uint8_t' 类型的数组,为其分配足够的存储空间,以便存储从串口读取的数据。
  2. 初始化 'data': 在使用 'data' 之前,确保对其进行初始化。你可以将其所有元素设置为0,或者根据你的需求进行其他初始化。

代码示例

#include 'driver/uart.h'

void app_main() {
  // 将 'data' 声明为数组,并分配足够的空间
  uint8_t data[100] = {0};

  // 初始化串口
  uart_config_t uart_config = {
    .baud_rate = 115200,
    .data_bits = UART_DATA_8_BITS,
    .parity = UART_PARITY_DISABLE,
    .stop_bits = UART_STOP_BITS_1,
    .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
    .source_clk = UART_SCLK_APB,
  };
  uart_driver_install(UART_NUM_0, BUF_SIZE * 2, 0, 0, NULL, 0);
  uart_param_config(UART_NUM_0, &uart_config);
  uart_set_pin(UART_NUM_0, 1, 3, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);

  // 读取串口数据
  int rxBytes = uart_read_bytes(UART_NUM_0, data, sizeof(data), 20 / portTICK_PERIOD_MS);

  // 处理读取到的数据
  if (rxBytes > 0) {
    // ...
  }
}

通过将 'data' 声明为数组并进行初始化,你就可以解决 'Wint-conversion' 和 'Werror=uninitialized' 错误,并在 ESP32 上成功使用 'uart_read_bytes' 函数读取串口数据。

解决ESP32 uart_read_bytes函数'Wint-conversion'和'Werror=uninitialized'错误

原文地址: https://www.cveoy.top/t/topic/fZeH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录