【发布时间】:2018-06-02 15:07:55
【问题描述】:
编译过程中出现以下错误:
aes.c:267:35: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
HWREG(AES_DMAC_CH0_EXTADDR) = (uint32_t)pui8MsgIn;
第 275-276 行:
// base address of the input data in ext. memory
HWREG(AES_DMAC_CH0_EXTADDR) = (uint32_t)pui8MsgIn;
pui8MsgIn 是 uint8_t * 的类型。
HWREG 宏如下所示:
#define HWREG(x) \
(*((volatile uint32_t *)(x)))
我对 C 及其指针没有经验,但大概我可以通过将 uint32_t 转换为 uintptr_t 来解决它。对吗?
我想确认一下,因为 uintptr_t 的名称中似乎没有与 uint32_t 不同的任何大小。
【问题讨论】:
-
是的。 uintptr_t 而不是 uint32_t 应该修复它。
-
我猜硬件是 32 位的。我相信这是问题所在:
HWREG(AES_DMAC_CH0_EXTADDR) = (uint32_t)pui8MsgIn;我怀疑您需要右侧为(uint32_t*)(void*)pui8MsgIn;以避免在现代编译器(如 GCC 和 Clang)下出现错误和后续警告。 Clang 通常需要额外的中间转换以避免额外的警告。