| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Какие команды вставить?
08.11.2013, 18:28
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Какие команды вставить?
Прошлая задача имхо была интереснее. Еще интереснее было бы решить задачу с помощью вачдога - не надо вообще векторов (в меге можно определить откуда произошел сброс) но там в четыре команды не уложиться перед циклом aaa.
|
|
|
|
08.11.2013, 18:45
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Какие команды вставить?
До ответа осталось немного, начало-то правильное.
|
|
|
|
08.11.2013, 19:00
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Какие команды вставить?
|
Код:
|
rjmp init ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp ADC ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface Handler
rjmp SPM_RDY ; Store Program Memory Ready Handler
init:
xxx ;нужно вставить 4 команды
xxx ;мы их уже знаем
xxx
xxx
aaa:
nop
rjmp aaa
TIM0_OVF: ; осталось только это добавить и вуаля
....
bbb:
nop
rjmp bbb |
|
|
|
|
08.11.2013, 19:39
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Какие команды вставить?
Сообщение от zelvans
|
|
Задача - шутка.
|
|
Сообщение от zelvans
|
|
продумал этюд
|
Надо же, то чем вы тут оба занимаетесь ничего общего с вышеозвученным не имеет, и называется проще - аппаратно_привязанные к AVR извращения... 
Это так , мысли вслух. Продолжайте.
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 08.11.2013 в 20:16.
|
|
|
|
08.11.2013, 19:49
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Какие команды вставить?
спалил
|
|
|
|
09.11.2013, 04:41
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Какие команды вставить?
А кот похоже действительно злой, но разрешил продолжать.
цикл bbb прикрыт другим циклом.
dddd:
nop
rjmp dddd
bbb:
nop
rjmp bbb
|
|
|
|
09.11.2013, 11:21
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Какие команды вставить?
nop
rjmp aaa
TIM0_OVF:
dec r16 ;ну так например
breq bbb ; breq/brne то разрешены... пока
dddd:
nop
rjmp dddd
bbb:
nop
rjmp bbb
изначально задача имела более практичное значение - можно сэкономить на векторах прерываний, при условии что есть только одно прерывание:
|
Код:
|
.CSEG
.ORG 0
start:
ldi r16,HIGH(RAMEND) ; define stack
out SPH,r16
ldi r16,LOW(RAMEND)
out SPL,r16
call init
main:
call task1
call task2
call task3
rjmp main
rjmp timer0_ovf
init:
ldi r16, 1
out TCCR0, r16
out TIMSK, r16
.....
sei
ret
task1:
.....
ret
task1:
.....
ret
task2:
.....
ret
task3:
.....
ret
timer0_ovf:
.....
reti |
Последний раз редактировалось oleg110592; 09.11.2013 в 11:29.
|
|
|
|
09.11.2013, 12:16
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Какие команды вставить?
Главная моя мысль была - как из произвольного места кода попасть в другое произвольное без применения команд условных переходов br*, *jmp, *call. Усложнение с выходом из первого цикла привело к неразберихе. 4-мя командами по прерыванию выходим из первого цикла и вот находясь в призвольном месте прыгаем в bbb, ограничения на использование команд продолжают присутствовать.
init:
ldi r16, 1
sts TIMSK,r16
sts TCCR0,r16
sei
aaa:
nop
rjmp aaa
|
|
|
|
09.11.2013, 13:03
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Какие команды вставить?
"Огласите весь список, пожалуйста"(c) - какие команды можно и какие нельзя,
ret и reti - можно? Если можно - в стек забиваем адрес возврата bbb, команда reti и мы уже в цикле bbb.
|
|
|
|
09.11.2013, 13:28
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Какие команды вставить?
reti , ret разрешены. Код можно не приводить. Все верно!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:44.
|
|