[an error occurred while processing this directive] [an error occurred while processing this directive]
Вопрос по uCOS-II (C167).
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено DGW 13 мая 2002 г. 18:54

Пока использую(посылаю в моем случае) семафор из 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