编译过程中出现以下错误:
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 相反,其名称中没有任何大小。
答案 0 :(得分:3)
大概我可以通过将
uint32_t
强制转换为uintptr_t
来解决此问题。 这是对的吗?
是。 uintptr_t
被指定为无符号整数类型,足以容纳任何指向整数的指针的转换结果。
我想确认一下,因为uintptr_t似乎没有任何尺寸 其中的名字与uint32_t相反。
这就是重点(没有双关语意)。 C没有指定指针有多大,实际上它在实现之间有所不同。如果您必须适应所有实施,则无法在类型名称中指定特定大小。指针。