Вопросы по секциям.
Читаю
http://www.nongnu.org/avr-libc/user-manual, но там как-то очень скупо все описано... прошу помочь разобраться.
Записи
-Wl,--section-start=.data=0x802000 и
-Wl,--section-start,.data=0x802000 эквивалентны?
Т. е., синтаксис указания начала расположения секций имеет несколько вариантов?
Как на самом деле выглядят секции .data, .bss, .noinit?
Как я понимаю, данные из .data копируются в определенный момент времени в ОЗУ, инициализируя переменные. Когда копируются и кем? Нашел нечто в описании секции .init4, но там сказано про контроллеры с ОЗУ > 64 кБ ПЗУ (а это почему?).
Для секции .bss аналогичной операцией является заполнение нулями. Когда?
А для чего нужна секция .noinit? Ведь есть же .data и .bss.
Правильно ли я понимаю, что все глобальные или статические переменные, которые инициализированы программистом попадают в .data, а неинициализированные глобальные и статические переменные попадают в .bss и инициализируются нулями (по стандарту Си)?
А что происходит с локальными инициализированными переменными? Они же создаются на стеке, кто их и когда инициализирует?
Зачем нужны .finiN, если мы в main() обычно делаем while(1) {};?