Подопытный кролик-отладка AT91SAM7X-EK.
Отладчик-J-LINK V8. IAR ARM 6.50
Тестовые примеры собрал и для флэши и для озу,залил-работают.
Походил по коду-почти все понятно

На AVR последнее время работал с scmRTOS,очень хотелось-бы применить
её и под SAM7.И тут пока-что полный облом

Последний официальный порт SAM7,что мне удалось найти-scmRTOSv3.11 под IAR 4.30
С++ её часть вроде-бы удалось подпилить, а вот с асемблеровским OS_Target_asm.s бьюсь
головой об стену

И собственно пара вопросов к знающим:
1. В сорцах оси
CODE
COMMON INTVEC:CODE:ROOT
org 0x00000018
IRQ_SWITCH
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
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
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 нынче не модно,но если кто-то еще помнит этого зверя-
помогите,плиз.
С уважением.