avr-gcc 警告:从不兼容的指针类型初始化

avr-gcc warning: initialization from incompatible pointer type

我不确定如何修复这段代码的警告(警告与第二行有关)。 这不是我的代码,但它确实可以正常工作。但是,我想摆脱警告但感到困惑。 v 是一个无符号长整数,我们要将其放入指针。我们正在使用 avr-gcc。

../../uJ/uj.c:1149:20: warning: initialization from incompatible pointer type const UInt8* d = &v;

static void ujThreadPrvPut32(UInt8* ptr, UInt32 v){         //to pointer
    const UInt8* d = &v;

    *ptr++ = *d++;
    *ptr++ = *d++;
    *ptr++ = *d++;
    *ptr = *d;
}

添加演员:

const UInt8* d = (const UInt8*)&v;

作为对其他答案的补充:

首先将 ptr 参数作为常量指针提供是 better practice

static void ujThreadPrvPut32(UInt8* const ptr, UInt32 v);

由于 ptr 提供了数据应该去的目标地址,这不应该被函数改变,只有那个位置的内容。

另一方面,您可以只使用 memcpy()。

uint8_t* ptr = 0;   // has to be set to desired target address obviously
uint32_t value = 123;

memcpy(ptr, &value, sizeof(value));