Перейти к содержанию
    

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Немного непонятно

А файл прошивки должен формироваться в режиме Реалис. Вы так его формировали?

И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Немного непонятно

А файл прошивки должен формироваться в режиме Реалис. Вы так его формировали?

И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая.

 

Теперь мне не понятно...Что значит в режиме Реалис? Дело в том, что моя собственная программа, отлично собиравшаяся в 4.3Х-KS напрочь отказывается компилироваться в 5.11-EV. При попытке переписать startup вроде как адресация после рестарта нормальная - я попадаю в lowlevel init, затем в main - но это все только в симуляторе, а в железе ...

ЛЮДИ, ежели не в падлу, скиньте ссылку на EWARM 4.XX EVALUATION, все-же хочется работать, а не бороться со средствами разработки... :help: :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И ещё, где-то было сообщение нащёт версии 5.11 толи В толи А что она вообще не рабочая.

- А это правда, что Сидоров выиграл машину в лотерею?

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

 

 

...все-же хочется работать, а не бороться со средствами разработки... :help: :smile3046:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Боритесь только сами с собой. Разработчики коммпилятров ошибаются несораизмеримо реже, нежели их пользователи :).

Да я не против бороться, я даже за :twak: . Но чтобы бороться надо знатьхоть с чем конкретно. Кто нибудь знает где почитать как startup-ы пишуться в 5.11 с примерами/картинками :). На сайте IAR я посмотрю, но по-моему там уже везде ссылки на 5.10-5.11.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с примерами/картинками :).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

C картинками - это Вам тогда в детский сад надо пойти.

 

Да староват вроде как для сада уже... Зря вы так, наглядный пример лучше трех талмудов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зря вы так, наглядный пример лучше трех талмудов.

Повторяю:

..базовый вариант startup в комплекте поставки..

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обратился к первоисточнику:

        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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ldr  pc,[pc,#+24]

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

Понимаю, что звучит по-дурацки, но... :wacko:

В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В счетчик команд заносится соответствующий хандлер, т.е. осуществляется переход на соответствующую метку .

Это понятно, что обработчик заносится..., но меня интересует вопрос правильно ли я понимаю КАКОЙ обработчик туда заносится. Адресация-то относительная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если я правильно понимаю, то вот сдесь

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Доктор, где у меня ошибка..? :crying:

Изменено пользователем Laurica

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Столкнулся с такой проблемой.

 

Не могу в этом 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. Может чего упустил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При компиляции выдается ошибка, что __start_firmware неопределена. В мануале написано, что для экспорта достаточно прописать PUBLIC __start_firmware. Может чего упустил?
Самое простое - может забыли подключить startup.s к проекту?

 

Более сложное - если ваш файл компилится в режиме С++, то надо писать extern "C" void __start_firmware(); Если файл может компилиться как в С так и в С++ варианте, то

#include <yvals.h>
_EXTERN_C
void __start_firmware();
_END_EXTERN_C

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...