Цитата(Сергей Борщ @ Mar 15 2011, 13:04)

Вставьте в low_level_init задержку чтобы отладчик успел остановить проц во время исполнения этой задержки.
А в боевом варианте задержку вручную потом убирать?
Цитата
Да ну, ерунда какая-то. Если речь идет об IAR. С STR91x не работал, а 71х прекрасно отлаживался без всяких указателей. И с чего бы отладчику куда-то улетать из-за неправильных указателей. Ну хотите указатели - инициализируйте их в main(). Периферия-то при чем?
Кристаллы STR91xx имеют уже готовую фирменную библиотеку драйверов периферийных устройств. Библиотека написана на C и требует запуска инициализации собственных внутренних переменных. Как понимаете, вызывать инициализацию такой библиотеки в low_level_init нельзя, потому что следующая за этим инициализация сегментов данных основной программы затрет внутренние переменные слинкованной библиотеки. Поведение программы становится непредсказуемым. Единственный выход- заниматься периферией только после входа в main().
Цитата
Ага, особенно если до входа в main инициализируются глобальные переменные, которые находятся во внешней S(D)RAM или создаются глобальные объекты, которые используют S(D)RAM, а она еще не включена.
Зачем нарываться на приключения? Создавайте объекты, взаимодействующие с периферией, во внутренней SRAM кристалла. Этой SRAM вполне достаточно.
Цитата(Andy Mozzhevilov @ Mar 15 2011, 13:10)

Создать именно в программе? Зачем там лишние сущности? Подключаете ddf файл для вашего контроллера, и смотрите всю периферию.
По моему вы придумали для себя проблему, а потом ее решили, причем далеко не лучшим способом.
Во всяком случае сейчас посмотрел установленный у себя IAR и тут:
C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\config\debugger\ST\
находятся ddf файлы в том числе для STR91xx
Причем это все автоматически подключается, если вы в качестве целевого контроллера выберите именно ваш тип контроллера, а не generiс типа ARM7 или ARM9
Я работаю с IAR v4.30A. Там нет ddf заготовок для STR91xx. Использую установку Taget =ARM9663-E. Предложения типа перейти на новые версии IAR пока не рассматриваю, поскольку создана инфраструктура разработки, привязанная типом отладчика именно к указанной версии. Иными словами придется менять и отладчик, поскольку старый не понимает отладочной информации новых версий.
Цитата
Это только один из способов, причем не факт, что самый надежный. Вы лишаете себя возможности создавать глобальные объекты классов с использованием периферии, при этом вручную вынуждены в определенной последовательности вызывать функции дополнительной инициализации объектов из main или откуда то еще, то есть совершаете дополнительное действие, которое можно забыть сделать.
Я так не считаю. В моем варианте объекты могут использовать периферию. Надо только в этих объектах предусмотреть метод
Старт_Периферии() и вызывать его сразу по входу в main(). Поскольку этот метод есть неотъемлемая часть класса, то забыть чего-либо в периферии вряд ли получиться. Кроме того, это пожалуй единственный прием работать с готовыми библиотеками драйверов периферии, написанными на C.