я тут сегодня кое что нарыл. Педали заключаются в следующем:
это мой:
sub lr, lr, #4
stmfd sp!, {lr}
mrs r14, SPSR
stmfd sp!, {r14}
stmfd sp!, {r0}
ldr r14, =AT91C_BASE_AIC
ldr r0, [r14, #AIC_IVR]
str r14, [r14, #AIC_IVR]
msr CPSR_c, #MODE_SVC
stmfd sp!, { r1-r3, r12, r14}
mov r14, pc
bx r0
ldmia sp!, { r1-r3, r12, r14}
msr CPSR_c, #NIRQ | MODE_IRQ
ldr r14, =AT91C_BASE_AIC
str r14, [r14, #AIC_EOICR]
ldmia sp!, {r0}
ldmia sp!, {r14}
msr SPSR_cxsf, r14
ldmia sp!, {pc}^
это кернеловское:
sub lr, lr, #4 /* Set lr to the actual return address */
stmfd sp!, {r0-r12, lr} /* save all registers*/
ldr r0, =tn_cpu_irq_handler
mov lr, pc
bx r0
ldr r0, =tn_curr_run_task /* context switch ? */
ldr r1, [r0]
ldr r0, =tn_next_task_to_run
ldr r2, [r0]
cmp r1, r2 /* if equal - return */
beq exit_irq_int
b tn_int_ctx_switch /* else - goto context switch */
вот сейчас сижу, ломаю голову, как одно привести ко второму или наоборот:)
Дело ещё заключаеться в том, что когда я сперва завел кернел, он работал. Я был рад - жизнь удалась, до тех пор пока не завел второй процесс. И всё. Работает только один процесс, старший по приоритету, ну просто напросто он не переключаеться, да и с чего ему переключаться, если в моём стартапе этого нету.
З.Ы. О великий модератор, перенеси мою тему на уровень повыше, дабы помощь отыскать мне.