Я работаю с контроллером atmega2560 и avr-g ++. Я отлаживаю код, который работает на моем хосте Ubuntu 18.04 (при компиляции с g ++), но не на atmega2560. Я подумал, что это может быть проблемой с различными размерами типов данных, и использовал этот код для исследования (также приведенный ниже):
int integerType;
float floatType;
double doubleType;
char charType;
printf("Size of int: %ld bytes\n",sizeof(integerType));
printf("Size of float: %ld bytes\n",sizeof(floatType));
printf("Size of double: %ld bytes\n",sizeof(doubleType));
printf("Size of char: %ld byte\n",sizeof(charType));
Результаты на хосте выглядят нормально, но скомпилированный код avr-g ++ на atmega2560 дает большие размеры для разных типов данных:
г ++:
Size of int: 4 bytes
Size of float: 4 bytes
Size of double: 8 bytes
Size of char: 1 byte
.avr-г ++:
Size of int: 2 bytes
Size of float: 41680900 bytes
Size of double: 43253764 bytes
Size of char: 44957697 byte
что совершенно нереально. Что может быть причиной этого?
обновление
Было предложено попробовать% zu вместо% ld, чтобы напечатать выходные данные std :: size_t из sizeof (...). Это, к сожалению, не сработало, и результат выглядит следующим образом:
Size of int: Size of float: Size of double: Size of char: