关于C#: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;

1
2
3
4
5
6
7
8
static void ujThreadPrvPut32(UInt8* ptr, UInt32 v){         //to pointer
    const UInt8* d = &v;

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


给铸造: P / < >

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

一个此外到其他答案: P / < >

它会更好的实践到供应的ptrargument级常数指针在第一个地方。 P / < >

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

由于ptr提供的目标地址的数据应该在哪里去,这应该不是改变了由"功能"的内容,只在那个位置。 P / < >

在另一方面,你可以只使用memcpy()。 P / < >

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

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