Цитата(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);
}
ессно добавить в обработку исключений нужную функуцональность.
Пасу котов...