Цитата
2. Пытаюсь добавить в функцию main() что-то типа
printf("Init OK \n");
Но при заливке в ..... вместо внятных ассемблерных инструкций какой-то мусор.
3. Что из себя представляет mac-файл ? Насколько я понял, он заливается и выполняется в контроллер до заливки основной программы. Т. е. это и есть т. н. бутлоадер, или я ошибаюсь ?
макросы (.mac) - это сугубо для IAR'вского C-SPY (в смысле отладчика). Пример: есть такой бит как REMAP - "выкидывание" ROM из начальных адресов и "подстановка" туды RAM. Если пытаться хотя бы заливать по JTAG не воспользовывшись этим REMAP на свежесброшенной системе - залить ничего не удасться. что собственно и наблюдается в пункте 2.
А то что им можно инициализировать SDRAM - это только удобство для оладки(как и PLL и прочее).
Основную прогу в принципе можно загружать только ROMloader'ом - тогда она должна быть маленькой (помещаться в IntSRAM) и может пользоваться SDRRAM.
Если прога побольше - то ее невозможно залить в SDRAM - ROMloader ничего не знает о SDRAM - он умеет только в IntSRAM. Вот тут и появляется многоступенчатость: сначала в IntSRAM - свой загрузчик; он подготовит SDRAM и сам загрузит большую прогу.
Дальнейшее увеличение "ступенчатости" - для универсализации: сначала маленький загрузчик, который готовит SDRAM для большой проги, потом большой загрузчик в SDRAM, который умеет не только из flash памяти, но и по USB и по Ethetnet, а уж только потом - основная прога. (при этом первые два зашиваются один раз и никого не беспокоят).
Цитата
4. Зачем в принципе придумано такое многоступенчатое разделение исполняемого кода - сначала .mac файл, затем Startup.s79, затем lowlevelinit, и только потом main() ? Разве нельзя сделать "по-простому" - начинаем сразу с функции main(), в которой и инициализируем всё low-level хозяйство и далее приступаем к основному коду ?
А объединить это все в один вызов из main можно только в том случае если вся программа слинкована и влазит в Internal SRAM, но startup - это вспомогательный код, который идеологически не должен вызываться из пользовательской программы (он подготавливает "окружение" для основной программы)