AVR - это 8-битный MCU, поэтому он не имеет требований к выравниванию в отношении процессора.В этой конкретной системе не должно быть заполнения struct
.
Flash и EEPROM могут иметь требования к выравниванию, связанные с их секторами памяти, но это относится только к драйверам, записывающим в такие области.Это не влияет на то, как компилятор выделяет struct
.
Я не уверен, есть ли в avr gcc или C общее правило, которое гарантирует, что макеты структуры ботов будут такими же, когда я использую eeprom_read_block для копирования в ram, который является другим разделом памяти.
Да, структура всегда будет иметь одинаковую структуру памяти во всей программе, независимо от того, где она хранится.Это гарантировано стандартом C.
ОЗУ и ЭСППЗУ могут иметь разные требования к выравниванию, но нет никакой «магии за линией», которая могла бы быть обработана - вам придется обрабатывать ее вручную в таких случаях при кодировании драйвера флэш-памяти / ЭСППЗУ.