[quote name='bodja74' date='Nov 1 2006, 16:41' post='171352']
Ааа,бывали в наших краях,будете проезжать ,свистните,пивка попьем

[/quote]
Замётано(:-)
Ну раз пошла такая пьянка... Если хранить адрес проги не в памяти, а в регистрах (r5-r4), то получим суперсверхскоростной код(:-)
Код
PLANi: in r2,SREG ;cохраняем SREG
movw r30,r4;current program address
adiw zl,vector(i);реальный адрес вектора
out SREG,R2 ;востанавливаем SREG
ijmp
Ужоснах, если сравнивать с исходным кодом(:-). Всего 5 слов кода на прерывание, не так уж и много для вставки. Зато скорость удвоилась: 10 тактов по сравнению с 20 исходными! Это ж скока пива! Не, я стока не выпью(:-)
[/quote]
ПЬЕМ ПИВО ДАЛЬШЕ!!!
Как вам такой вариант?
Код
.org 0
jmp PLAN_START
ldi R16,$04
rjmp PLAN
ldi R16,$08
rjmp PLAN
....
clr R17
....
PLAN: in r2,SREG ;cохраням SREG
movw zl,r4;current program address
add zl,r16
adc zh,r17
out SREG,R2 ;востанавливаем SREG
ijmp
Очередной изврат заключается в подмене в векторах одной команды jmp (4байта) на ldi и rjmp (по 2 байта) ,правда такой номер не пройдет для 8 и 8535 мег,но это не смертельно учитывая ,что у них не так немного памяти для размещение нескольких программ.
Естественно планировщик в первых 2кило кода ,скорость таже,но зато не нужно дублировать PLAN для каждого прерывания

ЗЫ ГЫ,неслабая ось получилась



[/quote]
Тогда уж так, лишние регистры не помешают
Код
ldi r30,0x04
rjmp PLAN
PLANi: in r2,SREG ;cохраняем SREG
clr r31 ;current program address
add zl,r4 ;реальный адрес вектора
adc zh,r5
out SREG,R2 ;востанавливаем SREG
ijmp
Почему бы и не попить(:-)