你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
jjbboox

jjbboox

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
4 回答

求教:sw4stm32编译C++工程 Link的时候出错,请大神帮忙看看

未设置标签
jjbboox jjbboox 回答时间: 2018-3-20 16:21

本帖最后由 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。

赞0
jjbboox jjbboox


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16