при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Не понимаю как такое прерывание может произойти и как могут помочь RETI. Незапланированных прерываний быть не должно. Но в крайнем случае лучше сделать прерывание по умолчанию и например завешивать там программу или как то семафорить об этом. И то это может быть полезным только на этапе отладки.Demiurg писал(а):Пусть даже и случилось прерывание, но и ничего не произойдет.
Код: Выделить всё
.cseg
.org 0x0000
rjmp Reset
;====== INTERRUPT VECTORS ============
.org INT0addr ; External Interrupt 0
reti
.org INT1addr ; External Interrupt 1
reti
.org OC2addr ; Timer/Counter2 Compare Match
reti // rjmp Proc_Int_BAM // reti
.org OVF2addr ; Timer/Counter2 Overflow
reti
.org ICP1addr ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr ; Timer/Counter1 Compare Match A
reti
.org OC1Baddr ; Timer/Counter1 Compare Match B
reti
.org OVF1addr ; Timer/Counter1 Overflow
reti
.org OVF0addr ; Timer/Counter0 Overflow
reti
.org SPIaddr ; SPI Serial Transfer Complete
reti ; rjmp SPI_Transfer_Int
.org URXCaddr ; USART, RX Complete
reti
.org UDREaddr ; USART Data Register Empty
reti
.org UTXCaddr ; USART, TX Complete
reti
.org ADCCaddr ; ADC Conversion Complete
reti // rjmp ADC_Complete
.org ERDYaddr ; EEPROM Ready
reti
.org ACIaddr ; Analog Comparator
reti
.org TWIaddr ; Two-wire Serial Interface
reti
.org INT2addr ; External Interrupt Request 2
reti
.org OC0addr ; TimerCounter0 Compare Match
rjmp Sys_Timer_Comp
.org SPMRaddr ; Store Program Memory Read
reti
;-------------------------------------------------------------------------
.org INT_VECTORS_SIZE ; size in words
;===================
в чем страховка-то? я не понимаю желания уберечь неверно работающую программу от еще более неверной работы... reti никак не поможет при отладке, даже затруднит её, имхо. а в отлаженной программе никаких внеплановых прерываний быть не должно.Demiurg писал(а):мы страхуемся от незапланированных прерываний
reti как заглушка незапланированных прерываний ничего не делает. Просто происходит переход по вектору и выход из прерывания без каких-либо действий.ARV писал(а):reti никак не поможет при отладке, даже затруднит её, имхо. а в отлаженной программе никаких внеплановых прерываний быть не должно.
Код: Выделить всё
.cseg
.org 0x0000
rjmp Reset
;====== INTERRUPT VECTORS ============
.org INT0addr ; External Interrupt 0
// reti // В этом месте будет 0xFFFF
.org INT1addr ; External Interrupt 1
// reti // В этом месте будет 0xFFFF
Никакой симулятор никогда не покажет реальную работу. И может хватит уже общаться в тоне просветленного учителя? Можете не верить, но про разные методы отладки программ знаете не только Вы.Demiurg писал(а): Не стесняйтесь пользоваться симулятором AVR-Studio. Это единственный инструмент, который показывает реальную работу МК.
При самопроизвольном изменении регистров ничего не поможет.Demiurg писал(а):При сбое и при работе со вводом выводом может записаться бит включения прерывания.
сбой - это явление, аналогичное падению метеорита на голову: защититься от него невозможно никакими программными ухищрениями в принципе. единственная более-менее приличная страховка от сбоя - это WDT.Demiurg писал(а):При сбое
ну, вы меня знаете (или должны знать - не первый же год читаем сообщения друг друга на форуме!) - я крайне негативно отношусь к безапелляционным утверждениям!Demiurg писал(а):Протеус и иже с ними даже рядом не стоял в сравнении со студией
Для начала вспомним, что мы в теме ассемблера. Reti наилучший вариант при бездействии. Nop-ы и 0xFFFF (слово) 0xFFFFFFFF - наихудший.ARV писал(а):Итак, вывод: вариант с reti в пустых ячейках таблицы векторов - наихудший при отладке и поиске проблем.
Код: Выделить всё
.cseg
.org 0x0000
rjmp Reset
;====== INTERRUPT VECTORS ============
.org INT0addr ; External Interrupt 0
rjmp INT_0_Handler ; reti
.org INT1addr ; External Interrupt 1
rjmp INT_1_Handler ; reti
.org OC2addr ; Timer/Counter2 Compare Match
rjmp OC2_Handler ; reti
INT_0_Handler:
ldi r16, 1
rjmp Proc_Errors
INT_1_Handler:
ldi r16, 2
rjmp Proc_Errors
OC2_Handler:
ldi r16, 3
rjmp Proc_Errors
Proc_Errors:
cli
out PORTB, r16
rjmp PC + 0 // Вместо глухого зацикливания вы можете написать простую мигалку светодиодом.
если вы оспариваете мою классификацию вариантов действий программиста, то прошу вас педантично опровергнуть всю цепочку моих рассуждений.Demiurg писал(а):Для начала вспомним, что мы в теме ассемблера. Reti наилучший вариант при бездействии.
это совсем не то, о чем шла речь ранее!Demiurg писал(а):.org INT0addr ; External Interrupt 0
rjmp INT_0_Handler ; reti
.org INT1addr ; External Interrupt 1
rjmp INT_1_Handler ; reti
.org OC2addr ; Timer/Counter2 Compare Match
rjmp OC2_Handler ; reti
Только не говорите мне, что я не умею готовить. Сколько раз я пробовал работать в протеусе. И все разы я проклинал все попытки. На простых проектах ногодрыгах еще что-то можно делать. На более сложных, как минимум жуткая тормозня.ARV писал(а):прошу вас доказать, с какого перепугу симулятор студии лучше протеуса, если студия в принципе не симулирует аналоговую периферию, захват таймера, некоторые режимы работы таймера и вообще с отладкой "as_realtime" у студии боооольшие проблемы?
Я не оспариваю вашу квалификацию. Вы не ассемблерщик. Это всего лишь означает тип мышления.ARV писал(а):...
Каким компилятором пользуетесь?Demiurg писал(а):Проект на си. ... Но я уже несколько лет не пишу проекты на асме.
IAR. Иногда студию и тулчейн. Отладка всегда в студии. IAR создает файл в формате студии. Прошивка МК только через студию. STK-500 либо AVRISP MKII.Z_h_e писал(а):Каким компилятором пользуетесь?
Именно, что давно не делал проекты в Toolchain. Иногда делаю мелкие проверки. Либо, как в нашем случае, открыл старый проект, чтобы посмотреть на выхлоп компилятора.Z_h_e писал(а):Просто Вы говорили что GCC давно не пользовались или что -то в этом роде. К студии другой подключен чтоли
О панике. Когда у тебя непонятки, ты несколько дней не можешь понять, в чем дело. И горят сроки. Нужно успокоиться. Критически взглянуть на свою работу. Составить план действий. Методику проверки.ARV писал(а):предлагаемый вами вариант - это не тот вариант, который мы обсуждаем: вы только что предложили обрабатывать ВСЕ прерывания, а говорили до сих пор мы о том, что некоторые обработчики остаются не обработанными из-за невнимательности программиста.