[an error occurred while processing this directive]
|
Почитал доку и нашел пример как нужно обрабатывать прерывание на асме если весь проект на С. Попробовал в IAR1.40 все работает, сделал тоже самое в IAR2.27B не работает, а мне нужно софт для меги128 писать.
Люди добрые пишушие в IAR2.27B помогите, как написать обработчик прерывания на ассемблере!!!!
-----------вот обработчик который я использую---------------
NAME EXT_INT1
#include "iom128.h"
extern c_int1
COMMON INTVEC:CODE:ROOT(1)
ORG INT0_vect ; Place code at interrupt vector
JMP c_int1 ; Jump to assembler interrupt function
ENDMOD
NAME c_int1
#include "iom128.h"
PUBLIC c_int1 ; Symbols to be exported to C function
RSEG CODE:CODE:NOROOT(1)
c_int1:
st -Y,R16 ; Push used registers on stack
in R16,SREG ; Read status register
st -Y,R16 ; Push Status register
in R16,PIND ; Load in value from port D
com R16 ; Invert it TESTS
out PORTB,R16 ; Output inverted value to port B
ld R16,Y+ ; Pop status register
out SREG,R16 ; Store status register
ld R16,Y+ ; Pop Register R16
reti
END
--------------------------------------------
фаил обозвал interrupt.s90 и подключил к проекту, после компиляции 0-ибок 0-предупреждений. Заглядываю в ассемблерный фаил всего моего проекта после компиляции и ничего похожего на мой код не вижу, а в конце
; 5 bytes in segment ABSOLUTE
; 672 bytes in segment CODE
; 7 bytes in segment INITTAB
; 4 bytes in segment INTVEC
; 18 bytes in segment NEAR_F
; 1020 bytes in segment NEAR_Z
т.е. 4 байта сегмента векторов используются для вектора таймера который у меня в программе используется.
E-mail: info@telesys.ru