Я использую металлическую систему ARM A57 на базе Xilinx.
Я хочу перенести адреса двух символов, определенных компоновщиком, в мою программу c ...
Это скрипт компоновщика:
.mutex_ram: {
_mutex_start = .;
. += _MUTEX_SIZE;
. = ALIGN(8);
_mutex_end = .;
} > mem_common
Это краткое изложение того, что я хочу сделать в C.
extern int _mutex_start;
extern int _mutex_end;
void some_fcn(void)
{
int size = (int)(&_mutex_end)-(int)(&_mutex_start);
memset(&_mutex_start,0,size);
}
Какого черта компилятор предупреждает меня, что это целочисленное преобразование разного размера? Я просто не понимаю ...
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
Кто-нибудь может мне помочь?
int size
- ›size_t size
. На вашей платформеint
, вероятно, 32-битный, тогда как размер указателя - 64-битный. - person Jabberwocky   schedule 06.01.2021size_t size = (size_t)(&_mutex_end - &_mutex_start)
- person Jabberwocky   schedule 06.01.2021intptr_t
иuintptr_t
. Но в этом случае преобразование разницы (ptrdiff_t
) вsize_t
выглядит разумным. - person MikeCAT   schedule 06.01.2021ptrdiff_t size = (ptrdiff_t)((intptr_t)&_mutex_end - (intptr_t)&_mutex_start);
. Возможно, вам потребуется включить<stdint.h>
- person Jabberwocky   schedule 06.01.2021(&_mutex_end - &_mutex_start)
все равно был неправ, не только с точки зрения MISRA, потому что в соответствии с арифметикой указателя результат был разделен наsizeof(int)
. - person Jabberwocky   schedule 06.01.2021