c语言 - 无法对齐"pointer targets signedness"



我在此问题上一直在努力

uint8_t *PMTK = "$PSIMIPR,W,115200*1C";

给我错误

初始化中的指针目标在签名[-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 Libs的真正烦人的角落。有人应该给他们一个很大的线索,即最好将随机阅读的缓冲区在c ... mumble中以 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(毕竟这也是一个数组(,但是这更容易容易出错,因为您必须减去终结器的1。无论如何,我敢肯定编译器将优化此strlen()调用。

c字符串被编译器视为char []。如果将铸件添加到(uint8_t *(之前,请在字符串安静下。

uint8_t *PMTK = (uint8_t *)"$PSIMIPR,W,115200*1C";

相关内容

  • 没有找到相关文章

最新更新