реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> IAR 5.11, Объясните pls
Laurica
сообщение May 16 2008, 15:28
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836



Собственно проблема такая - примеры для AT91SAM7A3 компилятся, линкуются и тп. но!, при попытке прогнать их во встроенном симуляторе Cstartup.s с первой точки (reset) улетает куда-то на адрес 6E7C0000, при попытке переписать стартап чтобы он с ресета уходил на lowlevel_init в симуляторе все ОК, однако в железе - мертвяк. все во Flash_DEBUG
Go to the top of the page
 
+Quote Post
sKWO
сообщение May 17 2008, 05:41
Сообщение #2


Местный
***

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



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

Немного непонятно
А файл прошивки должен формироваться в режиме Реалис. Вы так его формировали?
И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Laurica
сообщение May 17 2008, 06:16
Сообщение #3





Группа: Новичок
Сообщений: 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, все-же хочется работать, а не бороться со средствами разработки... help.gif smile3046.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 17 2008, 06:31
Сообщение #4


Гуру
******

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



Цитата(sKWO @ May 17 2008, 07:41) *
И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая.

- А это правда, что Сидоров выиграл машину в лотерею?
- Правда. Только не машину, а тысячу рублей. И не в лотерею, а в преферанс, и не выиграл, а проиграл...


Цитата(Laurica @ May 17 2008, 08:16) *
...все-же хочется работать, а не бороться со средствами разработки... help.gif smile3046.gif

Боритесь только сами с собой. Разработчики коммпилятров ошибаются несораизмеримо реже, нежели их пользователи smile.gif. тем более на переходе в main(). A EWARM 4.xx, Вы конечно взять можете на сайте iar.com, но незачем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Laurica
сообщение May 17 2008, 10:53
Сообщение #5





Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836



Цитата(zltigo @ May 17 2008, 10:31) *
Боритесь только сами с собой. Разработчики коммпилятров ошибаются несораизмеримо реже, нежели их пользователи smile.gif.

Да я не против бороться, я даже за twak.gif . Но чтобы бороться надо знатьхоть с чем конкретно. Кто нибудь знает где почитать как startup-ы пишуться в 5.11 с примерами/картинками smile.gif. На сайте IAR я посмотрю, но по-моему там уже везде ссылки на 5.10-5.11.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 17 2008, 14:27
Сообщение #6


Гуру
******

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



Цитата(Laurica @ May 17 2008, 12:53) *
с примерами/картинками smile.gif.

C картинками - это Вам тогда в детский сад надо пойти. А так - базовый вариант startup в комплекте поставки + документация на контроллер/ASM.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Laurica
сообщение May 17 2008, 17:02
Сообщение #7





Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836



Цитата(zltigo @ May 17 2008, 18:27) *
C картинками - это Вам тогда в детский сад надо пойти.


Да староват вроде как для сада уже... Зря вы так, наглядный пример лучше трех талмудов.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 17 2008, 17:33
Сообщение #8


Гуру
******

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



Цитата(Laurica @ May 17 2008, 19:02) *
Зря вы так, наглядный пример лучше трех талмудов.

Повторяю:
Код
..базовый вариант startup в комплекте поставки..

Более, чем нагляден и достаточно универсален. Разве только без картинок smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Laurica
сообщение May 17 2008, 18:55
Сообщение #9





Группа: Новичок
Сообщений: 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) то есть если выполнится первая такая команда, то мы окажемся там, где стрелочка в коде. Так?
Понимаю, что звучит по-дурацки, но... wacko.gif
Go to the top of the page
 
+Quote Post
alexander55
сообщение May 19 2008, 05:33
Сообщение #10


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Laurica @ May 17 2008, 22:55) *
Код
ldr  pc,[pc,#+24]

происходит добавление к текущему адресу числа 24, (смещение на 6 dword) то есть если выполнится первая такая команда, то мы окажемся там, где стрелочка в коде. Так?
Понимаю, что звучит по-дурацки, но... wacko.gif

В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку .
Go to the top of the page
 
+Quote Post
Laurica
сообщение May 19 2008, 06:14
Сообщение #11





Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836



Цитата(alexander55 @ May 19 2008, 09:33) *
В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку .

Это понятно, что обработчик заносится..., но меня интересует вопрос правильно ли я понимаю КАКОЙ обработчик туда заносится. Адресация-то относительная.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 19 2008, 06:23
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Laurica
сообщение May 19 2008, 06:46
Сообщение #13





Группа: Новичок
Сообщений: 9
Регистрация: 17-04-08
Пользователь №: 36 836



За пример - большое спасибо, так и вправду понятнее. Однако, касаемо моей изначальной проблеммы - а именно не_запускания программы в железе - наткнулся на то, что если workspace поставить flash_flash (а не flash_debug), то все несколько меняется. При компиляции во flash_debug при переходе с "0" адреса происходит улет в 0x6E7C (а там вакуум...и не работает не в железе ни в симуляторе), в RAM_debug 0x7B50, а в flash_flash туда же в 0x6E7C, при этом все работает в симуляторе, но в железе глухо как в танке... При этом код не меняелся никак.
Доктор, где у меня ошибка..? crying.gif

Сообщение отредактировал Laurica - May 19 2008, 06:58
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение May 20 2008, 09:03
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 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. Может чего упустил?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 20 2008, 09:44
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016