PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : interrupt timer crash



Jörn Arne
11.07.2006, 21:47
Hallo


in einem Projekt verwende ich den Timer interrupt der M-Unit 2.0 mit dem OS 2.03.
Das Problem ist, dass der interrupt etwa 3 Sekunden lang ausgeführt wird, aber dann nicht mehr.

Verwendet habe ich verschiedene Compiler Versionen(u.a. basicpp2.1.8)

Mit einer älteren Version klappt es (ich weiß nicht genau welche das war)

Vielleicht hat jemand eine Idee, bin dankbar für Hilfen

Gruß

Jörn Arne

DIE HARD
12.07.2006, 17:01
Hallo


in einem Projekt verwende ich den Timer interrupt der M-Unit 2.0 mit dem OS 2.03.
Das Problem ist, dass der interrupt etwa 3 Sekunden lang ausgeführt wird, aber dann nicht mehr.

Verwendet habe ich verschiedene Compiler Versionen(u.a. basicpp2.1.8)

Mit einer älteren Version klappt es (ich weiß nicht genau welche das war)

Vielleicht hat jemand eine Idee, bin dankbar für Hilfen

Gruß

Jörn Arne

Hallo....
Kannst du das Programm mal posten?
ciao.....

Jörn Arne
12.07.2006, 19:21
Hallo

hier mal ein kleines Testprogram, die Interrupt routine hab ich 1:1 aus meinem Projekt kopiert
Das eigentliche wäre zu umfangreich (auch viele Import Einträge)

;---------------------------

interrupt timerInterrupt


define secondthreadtimer word[31]
define activesecondthread as bit[251]

'interrupt to timer
config2.Init
config2.put 00000001b
config2.off



#init
'hier steht das eigentliche Programm
'Der timer wird dazu benutzt um Display ausgaben zu erledigen (Uhr Zeit), Hintergrundbeleuchtungen zu schalten, und u.a. als Abschalt-timer
'die Variable "Activesecondthread" wird über if Blöcke abgefragt und dem entsprechend die oben gennanten Aufgaben ausgeführt
'Das hat mit dem alten compiler immer ganz gut geklappt
pause 1

goto init

'-------------------------------------interrupt-----------------------------
#timerInterrupt
Activesecondthread = off

if (secondthreadtimer + 50 <= timer) then
beep 20,1,0 'zum testen

Activesecondthread = on

secondthreadtimer = timer

end if

return interrupt


;-----------------------------------------

'nach etwa 1 Sekunde hört man keinen Ton mehr.
'im Normalfall ist der Beep-Befehl auch auskommentiert (funktionslos)



Jörn

DIE HARD
12.07.2006, 19:58
Hallo

hier mal ein kleines Testprogram, die Interrupt routine hab ich 1:1 aus meinem Projekt kopiert
Das eigentliche wäre zu umfangreich (auch viele Import Einträge)

;---------------------------

interrupt timerInterrupt


define secondthreadtimer word[31]
define activesecondthread as bit[251]

'interrupt to timer
config2.Init
config2.put 00000001b
config2.off



#init
'hier steht das eigentliche Programm
'Der timer wird dazu benutzt um Display ausgaben zu erledigen (Uhr Zeit), Hintergrundbeleuchtungen zu schalten, und u.a. als Abschalt-timer
'die Variable "Activesecondthread" wird über if Blöcke abgefragt und dem entsprechend die oben gennanten Aufgaben ausgeführt
'Das hat mit dem alten compiler immer ganz gut geklappt
pause 1

goto init

'-------------------------------------interrupt-----------------------------
#timerInterrupt
Activesecondthread = off

if (secondthreadtimer + 50 <= timer) then
beep 20,1,0 'zum testen

Activesecondthread = on

secondthreadtimer = timer

end if

return interrupt


;-----------------------------------------

'nach etwa 1 Sekunde hört man keinen Ton mehr.
'im Normalfall ist der Beep-Befehl auch auskommentiert (funktionslos)



Jörn

Hallo....
in diesem Fall liegt es am Beep ! Die Interruptroutine muss verlassen
werden bevor der nächste Interrupt kommt. -> Beep dauert zu lang.
Was natürlich nicht die Ursache für das Problem in deinem Programm
ist, da der Beep ja auskommentiert ist !?

Versuch noch mal ein Programm mit diesem Problem zu posten.
ciao......

Jörn Arne
16.07.2006, 14:56
Hallo!

Ich habe noch einmal ein Testpogramm gebastelt, das hat erst auch nicht funktioniert, aber ich habe mir den IF Block angesehen, das Problem scheint an einer Klammer gelegen zu haben:

vorher:
if (secondthreadtimer + 50 <= timer) then

nachher:
if ((secondthreadtimer + 50) <= timer) then

der ältere compiler hat das geschluckt, deshalb meine Verwirrung...
das werd ich dann mal in meinem Projekt ausprobieren....

aber trotzdem vielen Dank

Gruß
Jörn