Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Command Counter
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ILYAUL
Всем привет!
Как можно его "вытащить" и запомнить (EEPROM SRAM) из основной программы. Т.е в определённый момент запомнить ( не важно какой) , задачу отложить , и вернутся к ней при необходимости. И это не подпрограммы и прерывания.
aaarrr
Program Counter, надо полагать? Выполнить call или вызвать прерывание и достать из стека.
ILYAUL
QUOTE (aaarrr @ Oct 7 2011, 21:09) *
Program Counter, надо полагать? Выполнить call или вызвать прерывание и достать из стека.

Да, его . Мне тоже в голову приходило , выполнить "пустышку" rcall , думал может ещё есть способ. СПАСИБО!!
kolobok0
Цитата(ILYAUL @ Oct 7 2011, 21:23) *
...выполнить "пустышку" rcall , думал может ещё есть способ..


этот подход самый оптимальный похоже. по крайней мере он входил в "класические" методы работы вирусов ышо аж под досом и иже.. вызываете метку, идущей сразу за коллом. потом два попа, в нужную ячейку сохраняете ну и относитеьно этого смещения и плюсуете все дефайн константы(до нужных данных или кода) относительно этой метки.

удачи вам
(круглый)
ILYAUL
QUOTE (kolobok0 @ Oct 8 2011, 16:28) *
этот подход самый оптимальный похоже. по крайней мере он входил в "класические" методы работы вирусов ышо аж под досом и иже.. вызываете метку, идущей сразу за коллом. потом два попа, в нужную ячейку сохраняете ну и относитеьно этого смещения и плюсуете все дефайн константы(до нужных данных или кода) относительно этой метки.

удачи вам
(круглый)

Нет попы в таком случае не нужны, как пример - запустил таймер и что бы не ждать (долго 20mc) ушёл из программы по прерыванию вернулся
CODE
;**************************************************
;*     ;;/Initialization TIMER1;;*             *
;**************************************************
        outi    OCR1AH,    high(5760)
        outi    OCR1AL,low(5760)
        ldi        temp,1<<OCIE1A|0<<OCIE1B|0<<TOIE1
        outr    TIMSK1,temp
        ldi        temp,1<<CS11|1<<CS10
        outr    TCCR1B,temp
        rcall    ZERO  Уходим из этой программы
MAIN:
        cli
        ldi        temp,1<<OCIE1A|1<<OCIE1B|1<<TOIE1
        outr    TIMSK1,temp
check:    rjmp    check
TIM1_OVF:
        nop
        reti
TIM1_COMPA:
        ldwi    X,RAMEND-2        Возвращаемся обратно
        out        SPL,XL
        out        SPH,XH
        reti

ZERO:
        ldwi    X,(RAMEND-0x1FF)
        out        SPL,XL
        out        SPH,XH
        sei
MAIN1:    rjmp    MAIN1
adc ......
ldi  .......
mov .......
rcall ........


Но принцип я понял.
kolobok0
Цитата(ILYAUL @ Oct 14 2011, 00:46) *
Нет попы в таком случае не нужны...



имелось ввиду узнавание адреса, если прошивка грузится не по статик адесу...
ваш способ в этом случае не проканает...

удачи вам
(круглый)
ILYAUL
QUOTE (kolobok0 @ Oct 14 2011, 03:32) *
имелось ввиду узнавание адреса, если прошивка грузится не по статик адесу...
ваш способ в этом случае не проканает...

удачи вам
(круглый)

Это я узнаю , там попы нужны. Это я так , когда не нужны
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.