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

 
 
> IAR AT91SAM7X start up, Начало работы
WHALE
сообщение Dec 3 2013, 16:25
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Пытаюсь освоить ARM под IAR-омю
Подопытный кролик-отладка AT91SAM7X-EK.
Отладчик-J-LINK V8. IAR ARM 6.50
Тестовые примеры собрал и для флэши и для озу,залил-работают.
Походил по коду-почти все понятно rolleyes.gif
На AVR последнее время работал с scmRTOS,очень хотелось-бы применить
её и под SAM7.И тут пока-что полный облом smile3046.gif
Последний официальный порт SAM7,что мне удалось найти-scmRTOSv3.11 под IAR 4.30
С++ её часть вроде-бы удалось подпилить, а вот с асемблеровским OS_Target_asm.s бьюсь
головой об стену cranky.gif
И собственно пара вопросов к знающим:
1. В сорцах оси
CODE
COMMON INTVEC:CODE:ROOT
org 0x00000018
IRQ_SWITCH

IRQ_SWITCH - это LDR PC, AT91C_AIC_IVR
В теперешнем асме IAR директивы org нет.
Пытаюсь сделать так по мотивам Атмеловского стар-апа.
Код
   SECTION .intvec:CODE:NOROOT(2)
        PUBLIC  resetVector

        EXTERN  Undefined_Handler
        EXTERN  SWI_Handler
        EXTERN  Prefetch_Handler
        EXTERN  Abort_Handler
        EXTERN  FIQ_Handler

        ARM

__iar_init$$done:              ; The interrupt vector is not needed
                               ; until after copy initialization is done

resetVector:
       ; All default exception handlers (except reset) are
       ; defined as weak symbol definitions.
       ; If a handler is defined by the application it will take precedence.
        LDR     pc, =resetHandler        ; Reset                                      0  
        LDR     pc, Undefined_Addr      ; Undefined instructions                4
        LDR     pc, SWI_Addr              ; Software interrupt (SWI/SYS)     8
        LDR     pc, Prefetch_Addr        ; Prefetch abort                       0xC
        LDR     pc, Abort_Addr            ; Data abort                           0X10
        B       .                                ; RESERVED                             0X14
        LDR     IRQ_SWITCH               ; IRQ                                     0X18        
        LDR     pc, FIQ_Addr              ; FIQ

На LDR IRQ_SWITCH (т.е. LDR PC, AT91C_AIC_IVR) IAR выдает
CODE
Tool Internal Error:
In function: GeInternalError
Diagnostic: Not an instruction
Line: 141 P0: 0 P1: 0

Этого я вообще не понимаю-что ему не нравится?
В даташите рекомендуется такой метод перехода на обработчик:
LDR PC[PC,# -&F20]- IAR дает Error[0]: Invalid syntax.
Мне этот синтаксис тоже не понятен-догадываюсь,что это переход назад,
но что такое &F20? Вроде-бы если с адреса 0x18 надо прыгнуть на 0xFFFFF100,
то должно быть 0XF18?
Такую команду LDR PC,[PC,# -0xF18] IAR компилирует.

2. Дальше в исходнике встречается команда _BLF OS_ContextSwitchHook, Hook_Relay ;
OS_ContextSwitchHook и Hook_Relay - это метки в коде.
Аналогично-такой команды теперь нет.И что еще хуже-ее нет и в Migration Guide.
Гугление дало только что _BLF это Used by the compiler when calling
functions that might be far away or in Thumb mode.
Примеров нет.Почему в ней указывается сразу две метки и что она делает в данном
случае-мне не понятно.
Я понимаю,что ARM7TDMI нынче не модно,но если кто-то еще помнит этого зверя-
помогите,плиз.

С уважением.






--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 12:17
Рейтинг@Mail.ru


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