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

时间:2016-05-11 08:42:21

标签: c avr-gcc

我不确定如何修复这段代码的警告(警告与第二行有关)。 这不是我的代码,但确实完美。但是,我想摆脱警告但很困惑。 v是我们想要指向的无符号长整数。我们正在使用avr-gcc。

  

../../ uJ / uj.c:1149:20:警告:从不兼容的指针类型初始化      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;
}

2 个答案:

答案 0 :(得分:3)

添加演员:

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

答案 1 :(得分:-1)

作为对另一个答案的补充:

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

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

由于ptr提供了数据应该到达的目标地址,因此该函数不应更改此位置,只能更改该位置的CONTENTS。

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

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

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