Приведение из указателя uint8_t к ошибке компиляции целых чисел uint32_t - PullRequest
0 голосов
/ 02 июня 2018

В процессе компиляции отображается следующая ошибка:

aes.c:267:35: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
    HWREG(AES_DMAC_CH0_EXTADDR) = (uint32_t)pui8MsgIn;

Строки 275-276:

// base address of the input data in ext. memory
HWREG(AES_DMAC_CH0_EXTADDR) = (uint32_t)pui8MsgIn;

pui8MsgIn имеет тип uint8_t *.

Макрос HWREG выглядит следующим образом:

#define HWREG(x)                                                              \
        (*((volatile uint32_t *)(x)))

У меня нет опыта в C и его указателях, но, вероятно, я мог бы решить его, изменив uint32_t приведение на uintptr_t .Это правильно?

Я хочу подтвердить это, потому что uintptr_t , кажется, не имеет какого-либо размера в своем имени, в отличие от uint32_t .

1 Ответ

0 голосов
/ 02 июня 2018

предположительно, я мог бы решить это, изменив uint32_t cast на uintptr_t.Это правильно?

Да.uintptr_t определено как целое число без знака, достаточно широкое, чтобы вместить результат преобразования любого указателя в целое число.

Я хочу подтвердить это, потому что uintptr_t, кажется, не имеет никакого размерав его названии противоречит uint32_t.

В этом весь смысл (не каламбур).C не указывает, насколько велик указатель, и на самом деле это зависит от реализации.Вы не можете указать конкретный размер в имени типа, если вы должны разместить указатели всех реализаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...