#c #pointers
#c #указатели
Вопрос:
Я получаю предупреждение в приведенном ниже коде, т.е
uint64_t val = 0x1234567812345678;
uint32_t addr = 0x12345678;
*(volatile uint64_t *)(addr) = val;
$gcc -o test test.c test.c: In function ‘main’: test.c:8:4: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] *(volatile uint64_t *)(addr) = val;
Это встроенная среда и попытка реализовать флэш-алгоритм, в котором можно запрограммировать только двойное слово.
Каков наилучший способ преобразовать uint32_t addr в uint64_t volatile address?
Комментарии:
1. Что вы пытаетесь сделать? Это вряд ли сработает, если вы не используете автономную среду (в основном на встроенной системе без операционной системы).
2. вы должны использовать
uintptr_t
вместоuint32_t
.3. Вопрос, который вы задаете в тексте, не соответствует коду. Вы хотите 64 -> 32 или 32 -> 64
4. Почему бы вам не попробовать *(volatile uint64_t *)(0x12345678) = val;
5. Если вы компилируете для встроенной среды, почему вы используете
gcc
? Если вы компилируете из 64-разрядного Linux на ту же платформу, это может иметь смысл, но если вы выполняете кросс-компиляцию для другой системы, вам, возможно, придется использовать другой компилятор (поправьте меня, эксперты gcc, если я ошибаюсь).