2016-05-11 7 views
0

Я не уверен, как исправить предупреждение для этой части кода (предупреждение относится ко второй строке). Это не мой код, но он отлично работает. Тем не менее, я хотел бы избавиться от предупреждения, но я смущен. v является unsigned long, который мы хотим поместить в указатель. Мы работаем с avr-gcc.avr-gcc предупреждение: инициализация от несовместимого указателя типа

../../uJ/uj.c:1149:20: предупреждение: инициализации из несовместимых указатель типа сопзЬ Uint8 * d = & v;

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

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

Указатели в C относятся к конкретному типу, то есть d ++ пропускают 1 байт, аргумент v составляет 4 байта. Компилятор не может понять, чего вы хотите. Ниже приведен хороший ответ с приложением –

ответ

-1

В дополнении к другому ответу:

Было бы better practice поставлять ptr аргумент в качестве постоянного указателя в первой очереди.

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

Поскольку ptr предоставляет целевой адрес, по которому данные должны идти, это не должно быть изменено с помощью функции, только содержание в этом месте.

С другой стороны, вы можете просто использовать memcpy().