无法对齐“指针目标签名”

时间:2018-02-22 09:37:50

标签: c gps uart hal 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通信。

2 个答案:

答案 0 :(得分:2)

是的,这是STM32 Cube库的一个非常恼人的角落。有人应该给他们一个很大的线索,即随机只读缓冲区在C ... mumble中最好用const char PMTK[] = "$PSIMIPR,W,115200*1C"; if (HAL_UART_Transmit(&huart3, (uint8_t *) PMTK, strlen(PMTK), 2000) != HAL_TIMEOUT) 表示。

所以,修复它:由于数据是文本的,因此使用字符串文字会很方便。所以,这样做,然后在电话中投入,而不是:

strlen()

注意使用sizeof来获得正确的长度,硬编码的文字值永远不是正确的选择,并且在此处被破坏(字符串不是32个字符长)。我们也可以使用strlen()(毕竟它是一个数组),但由于必须为终结符减去1,因此更容易出错。无论如何,我很确定编译器会优化这个{{1}}调用。

答案 1 :(得分:1)

c编译器将字符串视为char []。如果在String之前向(uint8_t *)添加强制转换,则警告将被静音。

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