本帖最后由 jjbboox 于 2018-3-20 16:22 编辑 问题原因找到了 不是__cplusplus的问题。 之所以编译出错是HAL的头文件存在bug。 经过仔细调查,发现 TIM_HandleTypeDef是不会出错的,只有SPI_HandelTypeDef类型会出错。 跑到头文件中去查看,发现该类型结构的定义存在问题。定义代码如下: /** * @brief SPI handle Structure definition */ typedef struct __SPI_HandleTypeDef { SPI_TypeDef *Instance; /*!< SPI registers base address */ SPI_InitTypeDef Init; /*!< SPI communication parameters */ uint8_t *pTxBuffPtr; /*!< Pointer to SPI Tx transfer Buffer */ uint16_t TxXferSize; /*!< SPI Tx Transfer size */ __IO uint16_t TxXferCount; /*!< SPI Tx Transfer Counter */ uint8_t *pRxBuffPtr; /*!< Pointer to SPI Rx transfer Buffer */ uint16_t RxXferSize; /*!< SPI Rx Transfer size */ __IO uint16_t RxXferCount; /*!< SPI Rx Transfer Counter */ void (*RxISR)(struct __SPI_HandleTypeDef * hspi); /*!< function pointer on Rx ISR */ void (*TxISR)(struct __SPI_HandleTypeDef * hspi); /*!< function pointer on Tx ISR */ DMA_HandleTypeDef *hdmatx; /*!< SPI Tx DMA Handle parameters */ DMA_HandleTypeDef *hdmarx; /*!< SPI Rx DMA Handle parameters */ HAL_LockTypeDef Lock; /*!< Locking object */ __IO HAL_SPI_StateTypeDef State; /*!< SPI communication state */ __IO uint32_t ErrorCode; /*!< SPI Error code */ }SPI_HandleTypeDef; 复制代码 通常我们在用typedef定义一个类型的时候 typedef struct后面是不带名称的,只会在结构体最后起名, 但是该类型定义却在typedef struct 后定义为 [__SPI_HandleTypeDef],而在结构体定义最后又起名为[SPI_HandleTypeDef],导致编译器无法将[SPI_HandleTypeDef]识别为一个有效的变量类型。 现在通过将参数类型更改为 struct __SPI_HandleTypeDef后问题解决。 该问题在编译器中貌似不会出问题,但是如果是C++编译器就会出错了。 可能是HAL库的bug。
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16