Цитата(adnega @ Dec 3 2015, 21:08)

При указании массива с атрибутом +ZI будет произведена его инициализация?
ZI - это не атрибут переменной, а тип секции. Атрибут переменной - __attribute__((zero_init)),
при присвоении этого атрибута переменной, она будет помещена в секцию типа ZI.
Как ясно из названия, будет инициализирован нулями.
Цитата(adnega @ Dec 3 2015, 21:08)

В какой момент производится инициализация? До main() в startup?
Уже после startup, внутри __main():
startup ->
__main -> 'C' main()
Цитата(adnega @ Dec 3 2015, 21:08)

1. Указать, что память не нуждается в инициализации и всю жизнь помнить об этом? Как это сделать?
В scatter-файле через атрибут секции UNINIT.
Цитата(adnega @ Dec 3 2015, 21:08)

2. Перенести инициализацию интерфейса внешней памяти вместе с тестированием в startup?
Нужно ли в нем заботится об инициализации областей data и bss или все случится на автомате?
А если это плюсы то, там, вроде, еще и конструкторы нужно инициализировать? Ничего не забыл?
Что делать если память не проходит тест? До инициализации памяти нужно еще много чего проиницализировать (RCC, GPIO).
Причем, такая инициализация использует переменные, которые тоже должны быть проинициализированы.
Или забыть о Си и шпарить без переменных на асме в startup?
А смысл тестировать память? Внутреннюю тоже тестируете? Неисправная железка - это неисправная железка, ничего не поделаешь.
Инициализацию можно написать на 'C', не будут доступны для использования только глобальные инициализированные переменные.