Пт июн 22, 2018 10:37:14
Чт июн 28, 2018 19:42:33
Пт июн 29, 2018 06:34:50
Пт июн 29, 2018 08:35:04
Чт июл 26, 2018 21:07:06
Пт июл 27, 2018 05:01:39
;addressLabels Code Comments
$000 rjmp RESET ; Reset Handler
$001 rjmp EXT_INT0 ; IRQ0 Handler
$002 rjmp EXT_INT1 ; IRQ1 Handler
$003 rjmp TIM2_COMP ; Timer2 Compare Handler
$004 rjmp TIM2_OVF ; Timer2 Overflow Handler
$005 rjmp TIM1_CAPT ; Timer1 Capture Handler
$006 rjmp TIM1_COMPA ; Timer1 CompareA Handler
$007 rjmp TIM1_COMPB ; Timer1 CompareB Handler
$008 rjmp TIM1_OVF ; Timer1 Overflow Handler
$009 rjmp TIM0_OVF ; Timer0 Overflow Handler
$00a rjmp SPI_STC ; SPI Transfer Complete Handler
$00b rjmp USART_RXC ; USART RX Complete Handler
$00c rjmp USART_UDRE ; UDR Empty Handler
$00d rjmp USART_TXC ; USART TX Complete Handler
$00e rjmp ADC ; ADC Conversion Complete Handler
$00f rjmp EE_RDY ; EEPROM Ready Handler
$010 rjmp ANA_COMP ; Analog Comparator Handler
$011 rjmp TWSI ; Two-wire Serial Interface Handler
$012 rjmp SPM_RDY ; Store Program Memory Ready Handler
;
$013 RESET: ldi r16,high(RAMEND) ; Main program start
$014 out SPH,r16 ; Set Stack Pointer to top of RAM
$015 ldi r16,low(RAMEND)
$016 out SPL,r16
$017 sei ; Enable interrupts
rjmp RESET ; 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 iADC ; 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
;
RESET: ldi r16,high(RAMEND) ; Main program start
out SPH,r16 ; Set Stack Pointer to top of RAM
ldi r16,low(RAMEND)
out SPL,r16
; Здесь пишем свою программу - то, что должно выполняться при закрытых прерываниях.
sei ; Enable interrupts
А здесь - продолжение при открытых прерываниях
; Заглушки для неиспользуемых прерываний:
EXT_INT0: ; IRQ0 Handler
EXT_INT1: ; IRQ1 Handler
TIM2_COMP: ; Timer2 Compare Handler
TIM2_OVF: ; Timer2 Overflow Handler
TIM1_CAPT: ; Timer1 Capture Handler
TIM1_COMPA: ; Timer1 CompareA Handler
TIM1_COMPB: ; Timer1 CompareB Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_OVF: ; Timer0 Overflow Handler
SPI_STC: ; SPI Transfer Complete Handler
USART_RXC: ; USART RX Complete Handler
USART_UDRE: ; UDR Empty Handler
USART_TXC: ; USART TX Complete Handler
iADC: ; ADC Conversion Complete Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TWSI: ; Two-wire Serial Interface Handler
SPM_RDY: ; Store Program Memory Ready Handler
rjmp pc
org INT0addr
rjmp <метка в моей программе, которую тоже надо сочинить>
Пт июл 27, 2018 19:50:41
Непонятно откуда, но периодически такое вылазит в форумах. Звучит так же, а что если jmp addss сработает как jmp rand_addss. Второй утверждение же врядли кто посчитает не абсурдным, но это одно и тоже.B@R5uk писал(а):...Не гоже, если некоторые прерывания срабатывают по какой-либо причине, а вызывается обработка каких-нибудь других прерываний..
В асме такое бывает?afz писал(а): У "взрослых" она заполняется т.н. слабыми ссылками
Лучше сделать обработчик по умолчанию, и то он нужен для обработки исключений, коих нет avr (вроде).afz писал(а):Помогает RJMP PC.
Сб июл 28, 2018 03:39:54
Угу, еще и, почему-то, для этих неожиданных прерываний предлагают молча выходить из них. Хотя незапланированное прерывание может быть только из-за ошибки в программе. И вот для поиска таких ошибок нужна именно заглушка типа RJMP PC. Зависла программа, смотришь в отладчике и видишь, что вылезло не то прерывание, которое ожидалось.Непонятно откуда, но периодически такое вылазит в форумах.
Во "взрослых" асмах - естественно, да. В нашей "песочнице", естественно, нет.В асме такое бывает?
Сб июл 28, 2018 10:19:00
Можно пример?afz писал(а):Во "взрослых" асмах - естественно, да.
Сб июл 28, 2018 16:11:45
DCD USART1_IRQHandler ; USART1
Сб июл 28, 2018 16:33:56
Сб июл 28, 2018 17:07:59
На ассемблере аналогично.Z_h_e писал(а):В GCC те же вектора со слабыми ссылками на сях сделаны.
def_irq_handler NMI_Handler
def_irq_handler HardFault_Handler
def_irq_handler MemManage_Handler
def_irq_handler BusFault_Handler
def_irq_handler UsageFault_Handler
def_irq_handler SVC_Handler
def_irq_handler DebugMon_Handler
def_irq_handler PendSV_Handler
def_irq_handler SysTick_Handler
def_irq_handler Default_Handler
/* Macro to define default handlers. Default handler
* will be weak symbol and just dead loops. They can be
* overwritten by other handlers */
.macro def_irq_handler handler_name
.align 1
.thumb_func
.weak \handler_name
.type \handler_name, %function
\handler_name :
b.
.size \handler_name, . - \handler_name
.endm
Сб июл 28, 2018 17:36:27