Zephyr West Build 错误:sensor_channel_get 函数指针类型不匹配
在 Zephyr West Build 过程中,imu.c 文件中出现以下警告信息,表示使用错误的指针类型作为 'sensor_channel_get' 函数的第三个参数:
'D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/imu.c:116:70: warning: passing argument 3 of 'sensor_channel_get' from incompatible pointer type [-Wincompatible-pointer-types]
116 | res = sensor_channel_get(imu_Dev, SENSOR_CHAN_ACCEL_XYZ, &tmp);
| ^~~~
| |
| struct sensor_value ()[3]
In file included from C:/Users/NineDay/zephyrproject/zephyr/include/zephyr/drivers/sensor.h:881,
from D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/imu.c:5:
D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/include/generated/syscalls/sensor.h:123:113: note: expected 'struct sensor_value ' but argument is of type 'struct sensor_value ()[3]'
123 | static inline int sensor_channel_get(const struct device * dev, enum sensor_channel chan, struct sensor_value * val)
| ~~~~~~~~~~~~~~~~~~~~~~^~~
D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/imu.c:133:69: warning: passing argument 3 of 'sensor_channel_get' from incompatible pointer type [-Wincompatible-pointer-types]
133 | res = sensor_channel_get(imu_Dev, SENSOR_CHAN_GYRO_XYZ, &tmp);
| ^~~~
| |
| struct sensor_value ()[3]
D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/include/generated/syscalls/sensor.h:123:113: note: expected 'struct sensor_value ' but argument is of type 'struct sensor_value ()[3]'
123 | static inline int sensor_channel_get(const struct device * dev, enum sensor_channel chan, struct sensor_value * val)
| ~~~~~~~~~~~~~~~~~~~~~~^~~
D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/imu.c:152:73: warning: passing argument 3 of 'sensor_channel_get' from incompatible pointer type [-Wincompatible-pointer-types]
152 | res = sensor_channel_get(imu_Dev, SENSOR_CHAN_MAGN_XYZ, &tmp);
| ^~~~
| |
| struct sensor_value
(*)[3]
D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/include/generated/syscalls/sensor.h:123:113: note: expected 'struct sensor_value ' but argument is of type 'struct sensor_value ()[3]'
123 | static inline int sensor_channel_get(const struct device * dev, enum sensor_channel chan, struct sensor_value * val)
| ~~~~~~~~~~~~~~~~~~~~~~^~~'
解决方法:
-
修改代码:
- 检查 imu.c 文件中的 'sensor_channel_get' 函数调用,确保第三个参数('val')是一个指向 'struct sensor_value' 结构体的指针,而不是指向数组的指针。
- 例如,如果 'tmp' 是一个 'struct sensor_value' 结构体的数组,则需要将代码更改为:
res = sensor_channel_get(imu_Dev, SENSOR_CHAN_ACCEL_XYZ, &tmp[0]); - 确保传递给 'sensor_channel_get' 函数的 'val' 参数指向单个 'struct sensor_value' 结构体。
-
禁用警告选项:
- 在 CMakeLists.txt 文件中,将
-Wno-incompatible-pointer-types选项添加到CFLAGS或CXXFLAGS中,例如:set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-incompatible-pointer-types")
- 在 CMakeLists.txt 文件中,将
注意:
- 建议尽可能修复代码中的警告,而不是只是禁用它们。
- 禁用警告选项可能会隐藏代码中的潜在错误。
- 修改代码以使用正确的指针类型是更安全和更可靠的解决方案。
原文地址: https://www.cveoy.top/t/topic/n6Bb 著作权归作者所有。请勿转载和采集!