Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从uint8\u t指针强制转换到uint32\u t整数编译错误_C_Pointers_Casting - Fatal编程技术网

C 从uint8\u t指针强制转换到uint32\u t整数编译错误

C 从uint8\u t指针强制转换到uint32\u t整数编译错误,c,pointers,casting,C,Pointers,Casting,编译过程中显示以下错误: 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_EXTA

编译过程中显示以下错误:

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\u t*的类型

HWREG宏如下所示:

#define HWREG(x)                                                              \
        (*((volatile uint32_t *)(x)))
我对C及其指针没有经验,但我可以通过将uint32\u t转换为uintpttr\u t来解决它。对吗

我想确认这一点,因为uintpr\u t的名称中似乎没有任何与uint32\u t相反的大小

大概我可以通过将
uint32\u t
cast更改为
uintpttr\u t
来解决这个问题。 对吗

uintpttr_t
被指定为一个无符号整数类型,其宽度足以容纳任何指针转换为整数的结果

我想确认一下,因为uintptru\t似乎没有任何尺寸 以与uint32\t相反的名义


这就是重点(没有双关语)。C没有指定指针有多大,事实上,这在不同的实现中有所不同。如果必须容纳所有实现的指针,则不能在类型名称中指定特定的大小。

是。uintptr\t而不是uint32\u t应该修复它。我猜硬件是32位的。我相信这就是问题所在:
HWREG(AES_DMAC_CH0_EXTADDR)=(uint32_t)pui8MsgIn我想你需要右手边是
(uint32_t*)(void*)pui8MsgIn以避免在现代编译器(如GCC和Clang)下出现错误和后续警告。Clang通常需要额外的中间转换以避免额外的警告。详细信息:“C不指定指针有多大”包括指针可能比所有整数类型都宽。类型
(u)intptr\u t
是可选的,尽管通常是实现的。此外,“…容纳任何对象指针转换为整数的结果。”。函数指针可能不是这样。