|
Инициализация периферии до входа в main() - возможно ли?, RealView compiler |
|
|
|
Jan 8 2009, 19:14
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sonycman @ Jan 8 2009, 21:33)  Даже стёк инитить не надо - он грузится автоматически с нулевого адреса таблицы векторов. Типа Cortex-M3  ? Цитата А есть ли какие-то ограничения у такого способа? Ничего необычного нет.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 8 2009, 19:35
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
А чем не устраивает main рассматривать как ту самую функцию настройки периферии, из нее уже запускать что-то еще. Цитата А можно привести здесь эти строки? А то качать 40 метров слишком накладно... Вам оно не пригодится. Между SAM'ом и Cortex'ом пропасть как раз в стартапе. Цитата Можно, наверное, поставить BL прямо перед вызовом __main. Даже стёк инитить не надо - он грузится автоматически с нулевого адреса таблицы векторов. Конечно, можно. ;> Для кортекса: Код Reset_Handler IMPORT LowLevelInit IMPORT __main BL LowLevelInit LDR R0, =__main BX R0 Сам же LowLevelInit объявите как void LowLevelInit(void) в любом .c файле.
|
|
|
|
|
Jan 8 2009, 20:15
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(zltigo @ Jan 8 2009, 23:14)  Типа Cortex-M3  ? Ага  Цитата(defunct @ Jan 8 2009, 23:35)  А чем не устраивает main рассматривать как ту самую функцию настройки периферии, из нее уже запускать что-то еще. Немного не устраивает то, что приходится вводить в классы доп. функцию для инициализации, так как часть работы не может быть выполнена в конструкторе, когда периферия не сконфигурирована...  Мелочь, в принципе... Цитата Для кортекса: Код Reset_Handler IMPORT LowLevelInit IMPORT __main BL LowLevelInit LDR R0, =__main BX R0 Сам же LowLevelInit объявите как void LowLevelInit(void) в любом .c файле. Спасибо, так и поступлю. Ещё вот интересно, для чего при переходе на __main юзать R0? А если просто B __main?
|
|
|
|
|
Jan 8 2009, 20:30
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Jan 8 2009, 22:35)  А чем не устраивает main рассматривать как ту самую функцию настройки периферии, из нее уже запускать что-то еще. До main хотя бы память должна ожить. Кроме того, тоскливо получается копировать/инициализировать эту память на медленных клоках, например. Цитата(sonycman @ Jan 8 2009, 23:15)  Ещё вот интересно, для чего при переходе на __main юзать R0? А если просто B __main? А если __main далеко?
|
|
|
|
|
Jan 8 2009, 23:24
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(aaarrr @ Jan 8 2009, 22:30)  До main хотя бы память должна ожить. Кроме того, тоскливо получается копировать/инициализировать эту память на медленных клоках, например. Согласен, актуально для МК с кешем, внешним RAM, либо толстым Init RW сегментом. В контексте кортекса, внешней шины часто вообще нет (оживлять нечего), а внутреннего RAM'a - с гулькин нос, поэтому и PLL настраивать до main'a ради инициализации пары KB переменных смысла особого нет.
|
|
|
|
|
Jan 8 2009, 23:34
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Jan 9 2009, 02:24)  Согласен, актуально для процессоров с MMU и кешем и внешним SDRAM'ом. Ну, еще для атмеловских SAM'ов, которые с 32kHz запускаются, тоже весьма актуально. Цитата(defunct @ Jan 9 2009, 02:24)  внутреннего RAM'a - с гулькин нос, поэтому и PLL настраивать до main'a ради инициализации пары KB переменных смысла особого нет. Если это пара десятков килобайт и пара десятков килогерц, то совсем даже не мало получается.
|
|
|
|
|
Jan 8 2009, 23:35
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(aaarrr @ Jan 9 2009, 01:32)  Ну, еще для атмеловских SAM'ов, которые с 32kHz запускаются, тоже весьма актуально. Угу, что правда, то правда. Цитата Если это пара десятков килобайт и пара десятков килогерц, то совсем даже не мало получается. Везде свой подход. Мне что-то подсказывает (соседние ветки), что проц, который использует автор топика стартует на нормальной частоте (явно больше 32kHz)  Иначе бы и не заикался на счет инициализации в main
|
|
|
|
|
Jan 8 2009, 23:59
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(defunct @ Jan 9 2009, 03:35)  Везде свой подход. Мне что-то подсказывает, что проц, который использует автор топика стартует на нормальной частоте (явно больше 32kHz)  Иначе бы и не заикался на счет инициализации в main  Да у меня STM32. Стартует на внутреннем RC 8 МГц - вполне хватает, чтобы не слишком торопиться с PLL. До этого был LM3S601, который я угробил, переназначив вывод житага на GPIO... есть ещё оказывается камни, которые убиваются софтовой ошибкой Кстати, какая разница между внутренними RC генераторами этих контроллеров - с одной стороны 8 МГц +- 1%, с которого чип запускается после ресета. С другой - 15 МГц +- 50%, запуск с которого невозможен, только после софтового переключения... на кой нужен такой генератор?  Видать, нет у Luminary индивидуальной калибровки... экономят-с...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|