无法对齐 "pointer targets signedness"
Can't align "pointer targets signedness"
这段代码
让我在这个问题上苦苦挣扎了一段时间
uint8_t *PMTK = "$PSIMIPR,W,115200*1C";
给我错误
pointer targets in initialization differ in signedness [-Wpointer-sign]
仅将其更改为 char *
或 unsigned char *
没有任何区别,并且 const char *
会导致程序在应该使用 PMTK 的地方进一步抱怨,如下所示代码:
if (HAL_UART_Transmit(&huart3, PMTK, 32, 2000) != HAL_TIMEOUT)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
}
else
{ ....
该程序应该使用 HAL 驱动程序建立从 STM32F0xx 到 GPS 接收器 (SIM33ELA) 的 uart 通信。
是的,那是 STM32 Cube 库中一个非常烦人 的角落。有人应该给他们一个重要的线索,即随机 read-only 缓冲区在 C 中最好表示为 const void *
... 咕哝。
所以,要解决这个问题:使用字符串文字很方便,因为数据是文本的。所以,这样做,然后在调用中转换,而不是:
const char PMTK[] = "$PSIMIPR,W,115200*1C";
if (HAL_UART_Transmit(&huart3, (uint8_t *) PMTK, strlen(PMTK), 2000) != HAL_TIMEOUT)
注意使用 strlen()
来获得正确的长度,硬编码文字值从来都不是正确的选择并且在这里被破坏了(字符串不是 32 个字符长)。我们也可以使用 sizeof
(毕竟它是一个数组),但是 error-prone 有点多,因为您必须为终止符减去 1。无论如何,我很确定编译器会优化这个 strlen()
调用。
c 字符串被编译器视为 char[]。如果您在 String 之前向 (uint8_t *) 添加强制转换,则警告会消失。
uint8_t *PMTK = (uint8_t *)"$PSIMIPR,W,115200*1C";
这段代码
让我在这个问题上苦苦挣扎了一段时间uint8_t *PMTK = "$PSIMIPR,W,115200*1C";
给我错误
pointer targets in initialization differ in signedness [-Wpointer-sign]
仅将其更改为 char *
或 unsigned char *
没有任何区别,并且 const char *
会导致程序在应该使用 PMTK 的地方进一步抱怨,如下所示代码:
if (HAL_UART_Transmit(&huart3, PMTK, 32, 2000) != HAL_TIMEOUT)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
}
else
{ ....
该程序应该使用 HAL 驱动程序建立从 STM32F0xx 到 GPS 接收器 (SIM33ELA) 的 uart 通信。
是的,那是 STM32 Cube 库中一个非常烦人 的角落。有人应该给他们一个重要的线索,即随机 read-only 缓冲区在 C 中最好表示为 const void *
... 咕哝。
所以,要解决这个问题:使用字符串文字很方便,因为数据是文本的。所以,这样做,然后在调用中转换,而不是:
const char PMTK[] = "$PSIMIPR,W,115200*1C";
if (HAL_UART_Transmit(&huart3, (uint8_t *) PMTK, strlen(PMTK), 2000) != HAL_TIMEOUT)
注意使用 strlen()
来获得正确的长度,硬编码文字值从来都不是正确的选择并且在这里被破坏了(字符串不是 32 个字符长)。我们也可以使用 sizeof
(毕竟它是一个数组),但是 error-prone 有点多,因为您必须为终止符减去 1。无论如何,我很确定编译器会优化这个 strlen()
调用。
c 字符串被编译器视为 char[]。如果您在 String 之前向 (uint8_t *) 添加强制转换,则警告会消失。
uint8_t *PMTK = (uint8_t *)"$PSIMIPR,W,115200*1C";