Есть несколько вопросов по scmRTOS под АРМ.
1.Вопрос по приоритетам.
При работе с АВР приоритеты без вариантов рулятся только на уровне оси.
А вот как быть с АРМ-ами?
Пока в голову приходит следующее:
Выставить всем осевым прерываниям одинаковый приоритет в контроллере прерываний,
чуть выше системного таймера.
А какой приоритет в контроллере прерываний ставить внеосевым прерываниям?
2. Я использую версию оси 3.11,т.к версии 4.0 для AT91SAM7 нет.
Для 3-й версии scmRTOS нет описания.Есть для версий 2 и 4.
Какое будет актульнее для 3-й?
3.Столкнувшись с глюками под отладчиком,к своему удивлению не обнаружил в версии 3.хх
поддержки режима отладки .Бегло глянул версию 4.0 под GCC и там не увидел тоже.
А без нее реально под jtag-ом глючит-периодически улетает неведомо куда и сваливается в исключения.
Я добавил в __low_level_init()
#ifdef DEBUG
AT91C_BASE_AIC->AIC_DCR = AT91C_AIC_DCR_PROT; // Enable Debug mode
#endif
и в cstartup.s
Код
resetVector:
LDR pc, =resetHandler ; Reset
LDR pc, Undefined_Addr ; Undefined instructions
LDR pc, SWI_Addr ; Software interrupt (SWI/SYS)
LDR pc, Prefetch_Addr ; Prefetch abort
LDR pc, Abort_Addr ; Data abort
B . ; RESERVED
#ifdef DEBUG
LDR pc, =irqHandler
#else
LDR PC,[PC,#-0x20] ;
LDR pc, FIQ_Addr ; FIQ
irqHandler:
STMFD SP!, {r5,r6,r7} ;
LDR r5, =AT91C_BASE_AIC ;
LDR r6, [r5, #AIC_IVR] ;
STR r5, [r5, #AIC_IVR] ;Write in the IVR to support Protect Mode
STR r6, [SP, #8] ;
LDMFD SP!, {r5,r6,PC}
ну и в scmRTOS_config.h если нужна отладка определить #define DEBUG
С уважением.