实际上没有错误。代码工作正常,但是这个警告让我很烦。
lib/uwc_event/wifi_event.c: In function 'uwc_wifi_init_sta':
lib/uwc_event/wifi_event.c:33:24: warning: initialization of 'unsigned char' from 'uint8_t *' {aka 'unsigned char *'} makes integer from pointer without a cast [-Wint-conversion]
.ssid = {(uint8_t *)&WIFI_SSID[0]},
^
lib/uwc_event/wifi_event.c:33:24: note: (near initialization for 'wifi_config.sta.ssid[0]')
lib/uwc_event/wifi_event.c:34:28: warning: initialization of 'unsigned char' from 'uint8_t *' {aka 'unsigned char *'} makes integer from pointer without a cast [-Wint-conversion]
.password = {(uint8_t *)&WIFI_PASW[0]},
^
lib/uwc_event/wifi_event.c:34:28: note: (near initialization for 'wifi_config.sta.password[0]')
这是警告显示的部分代码:
wifi_config_t wifi_config = {
.sta =
{
.ssid = {(uint8_t *)&WIFI_SSID[0]},
.password = {(uint8_t *)&WIFI_PASW[0]},
.threshold.authmode = WIFI_AUTH,
},
};
其中声明了.ssid
(我不确定,请参见:(https://github.com/espressif/esp-idf/blob/master/components/esp_wifi/include/esp_wifi_types.h)):
typedef struct {
uint8_t ssid[32];
uint8_t password[64];
// another code...
WIFI_SSID
和WIFI_PASW
是由我自己声明的:
extern char WIFI_SSID[32];
extern char WIFI_PASW[32];
那么我该如何删除这些警告呢?是什么让这种警告发生的?
发布于 2022-07-31 21:10:31
ssid
和password
是数组,因此您正在尝试将(rhs)地址初始化为数组的第一个元素。相反,您希望使用例如strcpy()
复制数据。
strcpy(wifi_config.sta.ssid, WIFI_SSID);
strcpy(wifi_config.sta.password, WIFI_PASW);
发布于 2022-07-31 21:07:15
数据成员ssid
被声明为uint8_t
类型对象的数组。
uint8_t ssid[32];
您正在尝试用指针初始化它的第一个元素。
.ssid = {(uint8_t *)&WIFI_SSID[0]},
上面的初始化相当于
.ssid = {[0] = (uint8_t *)&WIFI_SSID[0]},
也就是说,元素ssid[0]
是用指针初始化的。
所以编译器发出一条诊断消息。
数据成员password
也存在同样的问题。
若要设置这些数据成员的值,如果这些数组包含字符串,则需要使用任一strcpy
。
extern char WIFI_SSID[32];
extern char WIFI_PASW[32];
如果数组不包含字符串,则为memcpy
。
发布于 2022-07-31 21:14:15
谢谢你的“奥兰风”和“莫斯科的弗拉迪”,我的最后代码是:
wifi_config_t wifi_config = {
.sta =
{
.threshold.authmode = WIFI_AUTH,
},
};
strncpy((char *)wifi_config.sta.ssid, (char *)&WIFI_SSID[0], 32);
strncpy((char *)wifi_config.sta.password, (char *)&WIFI_PASW[0], 64);
在这里,编译器将在没有警告的情况下得到结果:
* Executing task: C:\Users\User\.platformio\penv\Scripts\platformio.exe run
Processing esp32cam (platform: espressif32; board: esp32cam; framework: espidf)
------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32cam.html
PLATFORM: Espressif 32 (5.0.0+sha.e66e12c) > AI Thinker ESP32-CAM
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-espidf @ 3.40401.0 (4.4.1)
- tool-cmake @ 3.16.4
- tool-esptoolpy @ 1.30300.0 (3.3.0)
- tool-idf @ 1.0.1
- tool-mconf @ 1.4060000.20190628 (406.0.0)
- tool-ninja @ 1.9.0
- toolchain-esp32ulp @ 1.22851.191205 (2.28.51)
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3
Reading CMake configuration...
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 7 compatible libraries
Scanning dependencies...
Dependency Graph
|-- esp32-camera @ 2.0.0
|-- uwc_event
| |-- uwc_cam_cfg
| | |-- esp32-camera @ 2.0.0
| |-- uwc_eol_remover
| |-- uwc_tag
| |-- uwc_uart
| |-- uwc_wifi_cfg
| | |-- uwc_tag
Building in release mode
Compiling .pio\build\esp32cam\liba67\uwc_event\wifi_event.o
Archiving .pio\build\esp32cam\liba67\libuwc_event.a
Linking .pio\build\esp32cam\firmware.elf
Retrieving maximum program size .pio\build\esp32cam\firmware.elf
Checking size .pio\build\esp32cam\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [= ] 10.1% (used 33120 bytes from 327680 bytes)
Flash: [======= ] 72.0% (used 755277 bytes from 1048576 bytes)
Building .pio\build\esp32cam\firmware.bin
esptool.py v3.3
Creating esp32 image...
Merged 25 ELF sections
Successfully created esp32 image.
================== [SUCCESS] Took 21.36 seconds ==================
* Terminal will be reused by tasks, press any key to close it.
https://stackoverflow.com/questions/73186826
复制相似问题