|
Какие действия происходят в МК до main() ?, Какой язык используется в .xcl файле? |
|
|
|
Nov 20 2007, 06:55
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 687

|
Хотелось бы вообще разобраться, какие действия происходят в микроконтроллере до того как мы попадаем в main() ? Зачем нужен .mac файл? Какой язык используется в .xcl файле? Где про всё это почитать можно?
|
|
|
|
|
 |
Ответов
|
Nov 20 2007, 11:26
|

Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241

|
Цитата(Толик @ Nov 20 2007, 09:55)  Хотелось бы вообще разобраться, какие действия происходят в микроконтроллере до того как мы попадаем в main() ? Запускается C-стартап. Который выполняет следующие действия: настройка необходимого минимума аппаратуры, прерываний, стека, возможно включение кварцевого генератора и настройка портов ввода-вывода (многое, конечно, можно вынести в main, но main запускается с большой задержкой). Потом инициализация C-переменных (глобальных) и вызов конструкторов C++ классов. После всего запускается main.
--------------------
[ZX]
|
|
|
|
|
Nov 20 2007, 11:53
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 687

|
Цитата(Kirill Frolov @ Nov 20 2007, 14:26)  Запускается C-стартап. Который выполняет следующие действия: Дело - то всё в том, что когда мы находимся на первой строчке стартапа, в RAMе у нас уже есть куча наших переменных или функций, которые неизвестно как туда попали....ну в случае работы с отладчиком(или программатором...как он там называется) - ясно, а вот без него....ну то есть при обыной работе.....или после RESETa?
|
|
|
|
|
Nov 20 2007, 12:18
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(Толик @ Nov 20 2007, 13:53)  Дело - то всё в том, что когда мы находимся на первой строчке стартапа, в RAMе у нас уже есть куча наших переменных или функций, которые неизвестно как туда попали....ну в случае работы с отладчиком(или программатором...как он там называется) - ясно, а вот без него....ну то есть при обыной работе.....или после RESETa? Копирование функций, обьявленных как __ramfunc, из flash в RAM тоже происходит в стартапе. Либо они могут загрузиться в RAM из внешней памяти внутренним загрузчиком. Какие у Вас аппаратные особенности (какой МК, как сконфигурирована начальная загрузка и есть ли она вообще) - неизвестно.
|
|
|
|
|
Nov 20 2007, 12:50
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 687

|
Цитата(IgorKossak @ Nov 20 2007, 15:18)  Копирование функций, обьявленных как __ramfunc, из flash в RAM тоже происходит в стартапе. Программирую AT91SAM7A3 (отладочную плату). Так вот взял стандартный проект с бегающими огоньками.....написал у одной функции __ramfunc, затем запустил FLASH Debug.....затем не выполняя программу начинаю смотреть RAM с 0x00200000 и вижу там функцию указанную как __ramfunc, хотя csstartup ещё не выполнялся.
|
|
|
|
|
Nov 20 2007, 13:53
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Толик @ Nov 20 2007, 14:50)  затем не выполняя программу начинаю смотреть RAM с 0x00200000 и вижу там функцию указанную как __ramfunc, хотя csstartup ещё не выполнялся.  На самом деле программа начала выполняться. После прошивки флеш отладчик дает ресет на процессор, процессор начинать выполнять программу (с cstartup), а в это время отладчик перехватывает управление, переводит процессор в режим ARM и ставит PC на нулевой адрес. Вот пока отладчик перехватывает управление и успевает выполниться некоторая часть cstartup, в вашем случае - копирование функций. Чтобы убедиться - напишите свою __low_level_init() с достаточно длинным циклом, чтобы процессор какое-то время повисел в цикле.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Толик Какие действия происходят в МК до main() ? Nov 20 2007, 06:55 IgorKossak Цитата(Толик @ Nov 20 2007, 08:55) Хотело... Nov 20 2007, 07:20 Толик Ну вот, в часности, не понятно откуда МК знает дел... Nov 20 2007, 10:23  IgorKossak Цитата(Толик @ Nov 20 2007, 12:23) А где... Nov 20 2007, 10:45   Толик Спасибо.
Цитата(IgorKossak @ Nov 20 2007, 1... Nov 20 2007, 11:21 VladislavS Цитата(Толик @ Nov 20 2007, 09:55) Зачем ... Nov 20 2007, 09:56  Сергей Борщ Цитата(Толик @ Nov 20 2007, 13:53) Дело -... Nov 20 2007, 12:12  Kirill Frolov Цитата(Толик @ Nov 20 2007, 14:53) Дело -... Nov 20 2007, 14:04 vet Можно предположить, что устройство не выключалось,... Nov 20 2007, 13:07 Толик Цитата(vet @ Nov 20 2007, 16:07) Можно пр... Nov 20 2007, 13:14 Толик И правда..... в стартапе есть код копирующий функц... Nov 20 2007, 14:25 VladislavS Вижу как приходит понимание. Так держать! Nov 21 2007, 05:32 mdmitry В документации к WinAVr(gcc) (avr-libc) подробно р... Nov 21 2007, 07:34 Сергей Борщ Цитата(mdmitry @ Nov 21 2007, 09:34) В до... Nov 21 2007, 11:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|