|
IAR 5.11, Объясните pls |
|
|
|
May 16 2008, 15:28
|
Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836

|
Собственно проблема такая - примеры для AT91SAM7A3 компилятся, линкуются и тп. но!, при попытке прогнать их во встроенном симуляторе Cstartup.s с первой точки (reset) улетает куда-то на адрес 6E7C0000, при попытке переписать стартап чтобы он с ресета уходил на lowlevel_init в симуляторе все ОК, однако в железе - мертвяк. все во Flash_DEBUG
|
|
|
|
|
May 17 2008, 05:41
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(Laurica @ May 16 2008, 18:28)  Собственно проблема такая - примеры для AT91SAM7A3 компилятся, линкуются и тп. но!, при попытке прогнать их во встроенном симуляторе Cstartup.s с первой точки (reset) улетает куда-то на адрес 6E7C0000, при попытке переписать стартап чтобы он с ресета уходил на lowlevel_init в симуляторе все ОК, однако в железе - мертвяк. все во Flash_DEBUG Немного непонятно А файл прошивки должен формироваться в режиме Реалис. Вы так его формировали? И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая.
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
May 17 2008, 06:16
|
Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836

|
Цитата(sKWO @ May 17 2008, 09:41)  Немного непонятно А файл прошивки должен формироваться в режиме Реалис. Вы так его формировали? И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая. Теперь мне не понятно...Что значит в режиме Реалис? Дело в том, что моя собственная программа, отлично собиравшаяся в 4.3Х-KS напрочь отказывается компилироваться в 5.11-EV. При попытке переписать startup вроде как адресация после рестарта нормальная - я попадаю в lowlevel init, затем в main - но это все только в симуляторе, а в железе ... ЛЮДИ, ежели не в падлу, скиньте ссылку на EWARM 4.XX EVALUATION, все-же хочется работать, а не бороться со средствами разработки...
|
|
|
|
|
May 17 2008, 06:31
|

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

|
Цитата(sKWO @ May 17 2008, 07:41)  И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая. - А это правда, что Сидоров выиграл машину в лотерею? - Правда. Только не машину, а тысячу рублей. И не в лотерею, а в преферанс, и не выиграл, а проиграл... Цитата(Laurica @ May 17 2008, 08:16)  ...все-же хочется работать, а не бороться со средствами разработки...  Боритесь только сами с собой. Разработчики коммпилятров ошибаются несораизмеримо реже, нежели их пользователи  . тем более на переходе в main(). A EWARM 4.xx, Вы конечно взять можете на сайте iar.com, но незачем.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 17 2008, 10:53
|
Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836

|
Цитата(zltigo @ May 17 2008, 10:31)  Боритесь только сами с собой. Разработчики коммпилятров ошибаются несораизмеримо реже, нежели их пользователи  . Да я не против бороться, я даже за  . Но чтобы бороться надо знатьхоть с чем конкретно. Кто нибудь знает где почитать как startup-ы пишуться в 5.11 с примерами/картинками  . На сайте IAR я посмотрю, но по-моему там уже везде ссылки на 5.10-5.11.
|
|
|
|
|
May 17 2008, 17:02
|
Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836

|
Цитата(zltigo @ May 17 2008, 18:27)  C картинками - это Вам тогда в детский сад надо пойти. Да староват вроде как для сада уже... Зря вы так, наглядный пример лучше трех талмудов.
|
|
|
|
|
May 17 2008, 17:33
|

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

|
Цитата(Laurica @ May 17 2008, 19:02)  Зря вы так, наглядный пример лучше трех талмудов. Повторяю: Код ..базовый вариант startup в комплекте поставки.. Более, чем нагляден и достаточно универсален. Разве только без картинок  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 17 2008, 18:55
|
Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836

|
Обратился к первоисточнику: Код 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) то есть если выполнится первая такая команда, то мы окажемся там, где стрелочка в коде. Так? Понимаю, что звучит по-дурацки, но...
|
|
|
|
|
May 19 2008, 05:33
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(Laurica @ May 17 2008, 22:55)  Код ldr pc,[pc,#+24] происходит добавление к текущему адресу числа 24, (смещение на 6 dword) то есть если выполнится первая такая команда, то мы окажемся там, где стрелочка в коде. Так? Понимаю, что звучит по-дурацки, но...  В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку .
|
|
|
|
|
May 19 2008, 06:14
|
Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836

|
Цитата(alexander55 @ May 19 2008, 09:33)  В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку . Это понятно, что обработчик заносится..., но меня интересует вопрос правильно ли я понимаю КАКОЙ обработчик туда заносится. Адресация-то относительная.
|
|
|
|
|
May 19 2008, 06:23
|

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

|
Цитата(Laurica @ May 17 2008, 20:55)  если я правильно понимаю, то вот сдесь Код 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
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 19 2008, 06:46
|
Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836

|
За пример - большое спасибо, так и вправду понятнее. Однако, касаемо моей изначальной проблеммы - а именно не_запускания программы в железе - наткнулся на то, что если workspace поставить flash_flash (а не flash_debug), то все несколько меняется. При компиляции во flash_debug при переходе с "0" адреса происходит улет в 0x6E7C (а там вакуум...и не работает не в железе ни в симуляторе), в RAM_debug 0x7B50, а в flash_flash туда же в 0x6E7C, при этом все работает в симуляторе, но в железе глухо как в танке... При этом код не меняелся никак. Доктор, где у меня ошибка..?
Сообщение отредактировал Laurica - May 19 2008, 06:58
|
|
|
|
|
May 20 2008, 09:03
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Столкнулся с такой проблемой. Не могу в этом 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. Может чего упустил?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
May 20 2008, 09:44
|

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

|
Цитата(Vitaliy_ARM @ May 20 2008, 12:03)  При компиляции выдается ошибка, что __start_firmware неопределена. В мануале написано, что для экспорта достаточно прописать PUBLIC __start_firmware. Может чего упустил? Самое простое - может забыли подключить startup.s к проекту? Более сложное - если ваш файл компилится в режиме С++, то надо писать extern "C" void __start_firmware(); Если файл может компилиться как в С так и в С++ варианте, то Код #include <yvals.h> _EXTERN_C void __start_firmware(); _END_EXTERN_C
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|