代码如下:
void *paddr = dma buffer physical address;
pkt->vp_pkt.paddr = (uint64_t)paddr;
如果在32位机上编译,指针是32位的,因此编译会有如下警告:
warning: cast from pointer to integer of different size
原因是指针大小为4字节,而要强制转换成8字节的整形数据会有数据丢失风险。
如果要解决这个问题,需要先将地址转为同SIZE的整形,再强制转换成不同SIZE的整形。
指针在32位机上是32位的,在64位机上是64位的,如果让代码兼容呢?使用uintptr_t(数据类型是ISO C99定义的,具体代码在linux平台的/usr/include/stdint.h头文件中。)。
修改之后的代码如下:
void *paddr = dma buffer physical address;
pkt->vp_pkt.paddr = (uint64_t)(uintptr_t)paddr;