Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: basic++ neuling Kategorie: Programmierung Basic (von Stefan Tappertzhofen, Homepage - 15.12.2004 21:39)
 Als Antwort auf Re: basic++ neuling von ReinhardB - 15.12.2004 17:04
> Mit dem Resultat, das ich nicht über das "end funktion" hinauskomme.
> Das heißt, kein 2. Piepser ertönt und die Unit hängt sich auf.
> Ich habe auch schonmal die LCD initialisierung weggelassen, wobei sich bei einigen wenigen
> Versuchen (kompilieren und übertragen) 2 Piepser bemerkbar machten !?
> Aber nicht auf dauer.




Hallo,

vermutlich hast Du das Prinzip von Funktionen nicht verstanden, was vielleicht auch für Neulinge etwas schwierig zu verstehen ist (dafür aber weitgehende Übereinstimmung mit allen anderen gänigen Programmiersprachen übereinstimmt).

Ohne expliziten Aufruf führst Du den Code der Funktion:

FUNCTION anzeige()
dezim = wert *10 /14 'werte umrechnen
zehner=dezim /10 'zehner abfragen
lcd.print zehner
lcd.print ","
einer = dezim -(zehner*10) 'einer abfragen
lcd.print einer
beep 5,5,5 'zur kontrolle
END FUNCTION


aus. Mit END FUNCTION Springt der Compiler an die Stelle zurück, an der die Funktion ursprünglich aufgerufen wurde (das wird intern von der C-Control im Speicher gesichert). Da jedoch kein Sprungbefehl zur Funktion aufgerufen wurde, sondern der code einfach nach dem Hauptteil weitergefahren ist und zum Code der Funktion kam, springt die C-Control quasi ins Nirvana.

Das kannst Du dir im alten CCBASIC so vorstellen:

' tue irgendwas...
' ...
pause 50

#test
return

pause 66

Die letzte Zeile (pause 66) würde hier auch niemals aufgerufen werden, da der Rücksprung nicht gesetzt ist.

Damit Dein Code funktioniert müsstest Du also folgendes programmieren:


define dezim byte
define wert byte
define zehner byte
define einer byte
declare function anzeige()
wert = 14

lcd.init
lcd.Clear
lcd.Pos 1, 4
pause 20

anzeige()

beep 10,5,5
end

' Zum Schluss noch Sicherung, dass die C-Control die Funktion nach Beenden des Programms nicht
' ausversehen aufruft.

#hang
goto hang

FUNCTION anzeige()
dezim = wert *10 /14 'werte umrechnen
zehner=dezim /10 'zehner abfragen
lcd.print zehner
lcd.print ","
einer = dezim -(zehner*10) 'einer abfragen
lcd.print einer
beep 5,5,5 'zur kontrolle
END FUNCTION


Meine Homepage: http://www.fdos.de

 Antwort schreiben

Bisherige Antworten:

END oder GOTO vor FUNCTION (von Dietmar - 16.12.2004 20:18)
    Re: END oder GOTO vor FUNCTION (von Stefan Tappertzhofen - 17.12.2004 7:58)
        Re: END oder GOTO vor FUNCTION (von Henrik - 17.12.2004 8:26)
            Re: END oder GOTO vor FUNCTION (von Stefan Tappertzhofen - 17.12.2004 11:09)