|
IAR C++ и АРМ (STR710), код инициализации |
|
|
|
Oct 11 2005, 10:49
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
начинаю плотно разбираться с процессором, раньше с АРМ никогда не работал (в основном с атмел АВР). возник вопрос: в комплекте с IAR C++ идут примеры программ, в т.ч. для конкретных процессоров, в т.ч. для конкретно моего (STR710). кроме того, я скачал кое-какие примеры, тоже на С, с сайта фирмы-производителя. обратил внимание на то, что во всех проектах IAR включен код cstartup.s79, причем он существенно отличается от дефолтового (приведенного в исходниках их же рантайм-библиотеки), я уже не говорю про демо-проекты от производителя, там даже ассемблер другой. При этом проекты собираются и с cstartup.s79, и без него, а попробовать в железе пока не на чем. может, кто-то подскажет мне, как работать с этим кодом инициализации? или, в идеале, подкинет ссылочку, где про это можно почитать? также не совсем ясно содержание файла vect.s79, хотя его назначение, в общем, понятно. в общем, буду благодарен за любую инфу
|
|
|
|
|
 |
Ответов
|
Oct 11 2005, 11:02
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(sergik_vrn @ Oct 11 2005, 15:49) начинаю плотно разбираться с процессором, раньше с АРМ никогда не работал (в основном с атмел АВР). возник вопрос: в комплекте с IAR C++ идут примеры программ, в т.ч. для конкретных процессоров, в т.ч. для конкретно моего (STR710). кроме того, я скачал кое-какие примеры, тоже на С, с сайта фирмы-производителя. обратил внимание на то, что во всех проектах IAR включен код cstartup.s79, причем он существенно отличается от дефолтового (приведенного в исходниках их же рантайм-библиотеки), я уже не говорю про демо-проекты от производителя, там даже ассемблер другой. При этом проекты собираются и с cstartup.s79, и без него, а попробовать в железе пока не на чем. может, кто-то подскажет мне, как работать с этим кодом инициализации? или, в идеале, подкинет ссылочку, где про это можно почитать? также не совсем ясно содержание файла vect.s79, хотя его назначение, в общем, понятно. в общем, буду благодарен за любую инфу Если затачиваться под IAR, то мое имхо: 1. Не делать свой cstartup, а пользоваться библиотечным, то есть дефолтовым. 2. То, что идут примеры программ в комплекте, на них надо наплевать. Цель этих программ показать, что хоть что-то шевелится, не более того. Потом выяснится, что в их стартапах не вызываются конструктоы C++ или еще чего-то. 3. В IAR предусмотрена функция __low_level_init(), в которой можно сделать дополнительную инициализацию. Я там, например делаю инициализацию FIQ стека. 4. Вектора в iar удобнее указывать прямо на С, тогда в случае использования С++ не надо болеть головой по вызову ++ функций из асма, там есть свои соглашения, который нужно обеспечивать, а на С все просто: Код #pragma vector = 0x04 __irq __arm void undef_instr_isr(void) { while(1); }
#pragma vector = 0x08 __irq __arm void swi_isr(void) { while(1); }
#pragma vector = 0x0c __irq __arm void prefetch_abort_isr(void) { while(1); }
#pragma vector = 0x10 __irq __arm void data_abort_isr(void) { while(1); } ессно добавить в обработку исключений нужную функуцональность.
--------------------
Пасу котов...
|
|
|
|
|
Oct 11 2005, 11:13
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(Andy Mozzhevilov @ Oct 11 2005, 15:02) Если затачиваться под IAR, то мое имхо: 1. Не делать свой cstartup, а пользоваться библиотечным, то есть дефолтовым. ясно Цитата(Andy Mozzhevilov @ Oct 11 2005, 15:02) 2. То, что идут примеры программ в комплекте, на них надо наплевать. Цель этих программ показать, что хоть что-то шевелится, не более того. Потом выяснится, что в их стартапах не вызываются конструктоы C++ или еще чего-то. ну вроде как примеры-то самим IARом писаны, неужто до подобного доходит? и все-таки, в чем глубокий смысел сего действа, не понимаю... Цитата(Andy Mozzhevilov @ Oct 11 2005, 15:02) 3. В IAR предусмотрена функция __low_level_init(), в которой можно сделать дополнительную инициализацию. Я там, например делаю инициализацию FIQ стека. спасибо, приму к сведению Цитата(Andy Mozzhevilov @ Oct 11 2005, 15:02) 4. Вектора в iar удобнее указывать прямо на С, тогда в случае использования С++ не надо болеть головой по вызову ++ функций из асма, там есть свои соглашения, который нужно обеспечивать, а на С все просто: ну это понятно, это я и из АВРа знаю, опять же неясно - при наличии такого метода, к чему лепить асмовые модули?.. или я просто в АВРе примеры не разбирал, потому и проблемы такой не имел?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|