STM32: хранение карты адресов в массиве - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь сохранить карту адресов в массиве.

Следующий фрагмент кода работает, как и ожидалось, на моем STM32F767ZI, но компилируется с предупреждением ...

intptr_t addressMap[2];

int* a=NULL;
int* b=NULL;

*a=10;
*b=20;

addressMap[0]=(intptr_t) a;
addressMap[1]=(intptr_t) b;

int* c=addressMap[0];

компилируется с предупреждением:

initialization makes pointer from integer without a cast [-Wint-conversion]

в последней строке (int* c=addressMap[0];).

Я также попытался uint32_t и int32_t в качестве типа данных addressMapмассив.То же предупреждение.

Согласно этому документу (http://www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm) адреса имеют ширину 32 бита (как и ожидалось).

Как мне написать свой код без этого предупреждения?

1 Ответ

3 голосов
/ 25 апреля 2019

Как я могу написать свой код без этого предупреждения?

, как сказано в предупреждении, просто добавьте приведение, сделав

int* c = (int*) addressMap[0];

, чтобы избежать предупреждения initialization makes pointer from integer without a cast [-Wint-conversion]

Но я рекомендую вам не использовать intptr_t, а строго int*, если цель addressMap состоит в том, чтобы содержать указатели на int , благодаря чему выне нуждается в приведении вообще:

int * addressMap[2];

int* a=NULL;
int* b=NULL;

*a=10;
*b=20;

addressMap[0] = a;
addressMap[1] = b;

int* c = addressMap[0];
...