[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Пока использую(посылаю в моем случае) семафор из C (Keil) светодиод нормально мигает, но как только пытаюсь послать семафор из обработчика прерывания на .asm - возникает проблема. Задача на C первую посылку видит и зажигает светодиод, но затем проект подвисает.
Обработчик:
$SEGMENTED
$CASE
$MOD167 ; Code for extended devices
$INCLUDE (REG168.INC)
$INCLUDE (macrodef.inc)
; Module name (optional)
NAME GT1_ISR
ASSUME DPP1 : NDATA
ASSUME DPP3 : SYSTEM
EXTRN OSIntEnter: FAR
EXTRN OSIntExit: FAR
EXTRN OSSemPost: FAR
EXTRN DPP2: PortSem3: WORD
gt1isr SECTION CODE
gt1_irq PROC INTERRUPT = 0x22
NOP
BCLR IEN
%SaveReg()
BCLR T2IR
CALL OSIntEnter
; CALLS SEG(OSIntEnter), SOF(OSIntEnter)
MOV R9, WORD PortSem3+2
MOV R8, WORD PortSem3
CALLS SEG(OSSemPost), SOF(OSSemPost)
CALL OSIntExit
CALLS SEG(OSIntExit), SOF(OSIntExit)
%RestoreReg()
BSET IEN
RETI
gt1_irq ENDP
gt1isr ENDS ; end of program code section
END
SaveReg() и RestoreReg() - макросы для сохранения и восстановления регистров. Таймер настроен приблизительно на 1с. Что не так?
E-mail: info@telesys.ru