Laurica 0 16 мая, 2008 Опубликовано 16 мая, 2008 · Жалоба Собственно проблема такая - примеры для AT91SAM7A3 компилятся, линкуются и тп. но!, при попытке прогнать их во встроенном симуляторе Cstartup.s с первой точки (reset) улетает куда-то на адрес 6E7C0000, при попытке переписать стартап чтобы он с ресета уходил на lowlevel_init в симуляторе все ОК, однако в железе - мертвяк. все во Flash_DEBUG Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sKWO 0 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба Собственно проблема такая - примеры для AT91SAM7A3 компилятся, линкуются и тп. но!, при попытке прогнать их во встроенном симуляторе Cstartup.s с первой точки (reset) улетает куда-то на адрес 6E7C0000, при попытке переписать стартап чтобы он с ресета уходил на lowlevel_init в симуляторе все ОК, однако в железе - мертвяк. все во Flash_DEBUG Немного непонятно А файл прошивки должен формироваться в режиме Реалис. Вы так его формировали? И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laurica 0 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба Немного непонятно А файл прошивки должен формироваться в режиме Реалис. Вы так его формировали? И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая. Теперь мне не понятно...Что значит в режиме Реалис? Дело в том, что моя собственная программа, отлично собиравшаяся в 4.3Х-KS напрочь отказывается компилироваться в 5.11-EV. При попытке переписать startup вроде как адресация после рестарта нормальная - я попадаю в lowlevel init, затем в main - но это все только в симуляторе, а в железе ... ЛЮДИ, ежели не в падлу, скиньте ссылку на EWARM 4.XX EVALUATION, все-же хочется работать, а не бороться со средствами разработки... :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая. - А это правда, что Сидоров выиграл машину в лотерею? - Правда. Только не машину, а тысячу рублей. И не в лотерею, а в преферанс, и не выиграл, а проиграл... ...все-же хочется работать, а не бороться со средствами разработки... :smile3046: Боритесь только сами с собой. Разработчики коммпилятров ошибаются несораизмеримо реже, нежели их пользователи :). тем более на переходе в main(). A EWARM 4.xx, Вы конечно взять можете на сайте iar.com, но незачем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laurica 0 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба Боритесь только сами с собой. Разработчики коммпилятров ошибаются несораизмеримо реже, нежели их пользователи :). Да я не против бороться, я даже за :twak: . Но чтобы бороться надо знатьхоть с чем конкретно. Кто нибудь знает где почитать как startup-ы пишуться в 5.11 с примерами/картинками :). На сайте IAR я посмотрю, но по-моему там уже везде ссылки на 5.10-5.11. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба с примерами/картинками :). C картинками - это Вам тогда в детский сад надо пойти. А так - базовый вариант startup в комплекте поставки + документация на контроллер/ASM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laurica 0 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба C картинками - это Вам тогда в детский сад надо пойти. Да староват вроде как для сада уже... Зря вы так, наглядный пример лучше трех талмудов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба Зря вы так, наглядный пример лучше трех талмудов. Повторяю: ..базовый вариант startup в комплекте поставки.. Более, чем нагляден и достаточно универсален. Разве только без картинок :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laurica 0 17 мая, 2008 Опубликовано 17 мая, 2008 · Жалоба Обратился к первоисточнику: ARM __vector: ldr pc,[pc,#+24] ;; Reset ---------------------------------- __und_handler: | ldr pc,[pc,#+24] ;; Undefined instructions | __swi_handler: | ldr pc,[pc,#+24] ;; Software interrupt (SWI/SVC) | __prefetch_handler: | ldr pc,[pc,#+24] ;; Prefetch abort | __data_handler: | ldr pc,[pc,#+24] ;; Data abort | DC32 0xFFFFFFFF ;; RESERVED | __irq_handler: | ldr pc,[pc,#+24] ;; IRQ<----------------------------------- __fiq_handler: ldr pc,[pc,#+24] ;; FIQ DC32 __iar_program_start DC32 __und_handler DC32 __swi_handler DC32 __prefetch_handler DC32 __data_handler<-------------------------------------- а из IRQ сдесь B . DC32 IRQ_Handler_Entry DC32 FIQ_Handler_Entry если я правильно понимаю, то вот сдесь ldr pc,[pc,#+24] происходит добавление к текущему адресу числа 24, (смещение на 6 dword) то есть если выполнится первая такая команда, то мы окажемся там, где стрелочка в коде. Так? Понимаю, что звучит по-дурацки, но... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexander55 0 19 мая, 2008 Опубликовано 19 мая, 2008 · Жалоба ldr pc,[pc,#+24] происходит добавление к текущему адресу числа 24, (смещение на 6 dword) то есть если выполнится первая такая команда, то мы окажемся там, где стрелочка в коде. Так? Понимаю, что звучит по-дурацки, но... В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laurica 0 19 мая, 2008 Опубликовано 19 мая, 2008 · Жалоба В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку . Это понятно, что обработчик заносится..., но меня интересует вопрос правильно ли я понимаю КАКОЙ обработчик туда заносится. Адресация-то относительная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 19 мая, 2008 Опубликовано 19 мая, 2008 · Жалоба если я правильно понимаю, то вот сдесь ldr pc,[pc,#+24] происходит добавление к текущему адресу числа 24, (смещение на 6 dword) то есть если выполнится первая такая команда, то мы окажемся там, где стрелочка в коде. Так? Нет. "Для разобраться" надо просто слегка посмотреть на архитектуру процессора и на то, что значат в ASM скобочки []. Хотя написано, конечно от балды. Я так не пишу, дабы не заморачивать голову ненужными магическими числами. Так читабельнее: ldr pc, (?vect_entry + 4*0); 00 ldr pc, (?vect_entry + 4*1); 04 ldr pc, (?vect_entry + 4*2); 08 ldr pc, (?vect_entry + 4*3); 0C ldr pc, (?vect_entry + 4*4); 10 dc32 0 ; 14 Summ of other vectors instructions ldr pc, [pc,#-0xFF0]; 18 Jump directly to the address given by the AIC ; from [0xFFFFF030] Curent 18h +conveyer ldr pc, (?vect_entry + 4*7); 1C ;---------------------------------------------------------------------------- ORG 0x20 ; Constant table entries (for ldr pc) will be placed at 0x20 ?vect_entry: dc32 ?cstartup ; Reset dc32 ?undf_abort ; UND dc32 vPortYieldProcessor; SWI dc32 ?pref_abort ; P_ABT dc32 ?data_abort ; D_ABT dc32 0 ; ARM-reserved vector dc32 0 ; IRQ (Jump directly!) dc32 FIQ_ISR_handler; FRQ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laurica 0 19 мая, 2008 Опубликовано 19 мая, 2008 (изменено) · Жалоба За пример - большое спасибо, так и вправду понятнее. Однако, касаемо моей изначальной проблеммы - а именно не_запускания программы в железе - наткнулся на то, что если workspace поставить flash_flash (а не flash_debug), то все несколько меняется. При компиляции во flash_debug при переходе с "0" адреса происходит улет в 0x6E7C (а там вакуум...и не работает не в железе ни в симуляторе), в RAM_debug 0x7B50, а в flash_flash туда же в 0x6E7C, при этом все работает в симуляторе, но в железе глухо как в танке... При этом код не меняелся никак. Доктор, где у меня ошибка..? :crying: Изменено 19 мая, 2008 пользователем Laurica Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 20 мая, 2008 Опубликовано 20 мая, 2008 · Жалоба Столкнулся с такой проблемой. Не могу в этом IAR експортировать функции (в данном случае __start_firmware()) из startup.s Прописал: SECTION .intvec:CODE:NOROOT(2) PUBLIC __vector PUBLIC __iar_program_start PUBLIC __vector_0x14 PUBLIC __start_firmware Тело функции: __start_firmware: ldr r0,=0x0 ldr r1,=0x0 ldr r2,=0x0 ldr r3,=0x0 ldr r4,=0x0 ldr r5,=0x0 ldr r6,=0x0 ldr r7,=0x0 ldr r8,=0x0 ldr r9,=0x0 ldr r10,=0x0 ldr r11,=0x0 ldr r12,=0x0 ldr r13,=0x0 ldr r14,=0x0 ldr pc, =(0x0008000) пытался вызвать: extern void __start_firmware(); main() { TargetInit(); __start_firmware(); } При компиляции выдается ошибка, что __start_firmware неопределена. В мануале написано, что для экспорта достаточно прописать PUBLIC __start_firmware. Может чего упустил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 20 мая, 2008 Опубликовано 20 мая, 2008 · Жалоба При компиляции выдается ошибка, что __start_firmware неопределена. В мануале написано, что для экспорта достаточно прописать PUBLIC __start_firmware. Может чего упустил?Самое простое - может забыли подключить startup.s к проекту? Более сложное - если ваш файл компилится в режиме С++, то надо писать extern "C" void __start_firmware(); Если файл может компилиться как в С так и в С++ варианте, то #include <yvals.h> _EXTERN_C void __start_firmware(); _END_EXTERN_C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться