closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

GOTO Label und Funktionen



pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 936
Registered: 02 / 2009
Homepage Private message
Subject: GOTO Label und Funktionen  -  Posted: 13.11.2018 - 17:47   -  
Hallo rolf,

ich muß für eine geordnete Kommunikation mit einem RS485 Gerät zum ersten mal die GOTO-Anweisungen nutzen

TestCode:
Code
Procedure Test;
var
TestByte : byte;

Begin
 // Sprungmarken
  Label: ZKSStart;
  Label: ZKSTimeOut;
  Label: ZKSEnd;

goto ZKSStart;

ZKSStart:
        TestByte:=TestByte;

goto ZKSEnd; // Überspringe TimeOut

ZKSTimeOut:  // Sprungmarke
       TestByte:=TestByte;

ZKSEnd:  // Sprungmarke ENDE
       TestByte:=TestByte;


end Test;


Aber er mault immer bei dem Label "ZKSStart:", wo habe ich meinen Denkfehler?

Thorsten
You must be logged in or your permissions are to low to see this Attachment(s).
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5378
Registered: 03 / 2002
Homepage Private message
Subject: Re: GOTO Label und Funktionen  -  Posted: 13.11.2018 - 18:11   -  
Hallo Thorsten,

ich denke es ist ähnlich wie bei einem Procedure Call.
Mann kann kein Label aufrufen bevor es plaziert ist.
Ich selbst benutze GOTO nie weil es eigentlich ein
unsauberer Stil ist.

rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 936
Registered: 02 / 2009
Homepage Private message
Subject: Re: GOTO Label und Funktionen  -  Posted: 13.11.2018 - 18:17   -  
Quote by rh

Hallo Thorsten,

ich denke es ist ähnlich wie bei einem Procedure Call.
Mann kann kein Label aufrufen bevor es plaziert ist.
Ich selbst benutze GOTO nie weil es eigentlich ein
unsauberer Stil ist.

rolf

Hallo rolf,

ja, ich habe es bis jetzt auch nicht genutzt, aber ich könnte hier von verschiedenen Stellen immer wieder einspringen (wenn es nötig ist) und den Ablauf durchlaufen. So der Gedanke :-)

Und auch so führt es zum gleichen Fehler:

Code
Begin
 // Sprungmarken
  Label: ZKSStart;
  Label: ZKSTimeOut;
  Label: ZKSEnd;


ZKSStart:
    bzksAdr:=bzksAdr;


Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Gunter offline
Administrator
Avatar
Gender: male
Location: GERMANY  Frankfurt Main / Germany
Age:
Posts: 1586
Registered: 02 / 2003
Private message
Subject: Re: GOTO Label und Funktionen  -  Posted: 13.11.2018 - 18:49   -  
Hi,

vielleicht folgendes:
"Innerhalb eines Blocks ist immer nur eine Labeldefinition und damit auch nur ein Sprungziel zulässig"

Gunter
2 Dinge sind unendlich: das Universum und die menschliche Dummheit.
Aber bei dem Universum bin ich mir noch nicht ganz sicher
--
Albert Einstein

---
The concept of global warming was created by and for the Chinese in order to make U.S. manufacturing non-competitive
--
Donald J. Trump on Twitter
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 936
Registered: 02 / 2009
Homepage Private message
Subject: Re: GOTO Label und Funktionen  -  Posted: 13.11.2018 - 19:43   -  
Quote by Gunter

Hi,

vielleicht folgendes:
"Innerhalb eines Blocks ist immer nur eine Labeldefinition und damit auch nur ein Sprungziel zulässig"

Gunter


Hallo Gunter,

alles klar, dann kann ich das so nicht angehen ;-)
Ich dachte mit Block sind IF THEN, FOR, WHILE usw. gemeint.

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Gunter offline
Administrator
Avatar
Gender: male
Location: GERMANY  Frankfurt Main / Germany
Age:
Posts: 1586
Registered: 02 / 2003
Private message
Subject: Re: GOTO Label und Funktionen  -  Posted: 13.11.2018 - 20:32   -  
Hi
im Compiler Manual ist bei der Beschreibung von "GoTo" auch unten die Definition
eines Pascal Blocks erwähnt !
Gunter
2 Dinge sind unendlich: das Universum und die menschliche Dummheit.
Aber bei dem Universum bin ich mir noch nicht ganz sicher
--
Albert Einstein

---
The concept of global warming was created by and for the Chinese in order to make U.S. manufacturing non-competitive
--
Donald J. Trump on Twitter
go down go up
Merlin offline
Schreiberling
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 842
Registered: 03 / 2005
Private message
Subject: Re: GOTO Label und Funktionen  -  Posted: 14.11.2018 - 10:39   -  
Goto and Labels are broken.

labelxxx: syntax is not recognised.

This compiles but shows the problem with goto - it always goes to the same label!

Code
Procedure Test;
var
  TestByte: byte;

 // labels
//  Label: ZKSStart;
//  Label: ZKSTimeOut;
//  Label: ZKSEnd;

Begin

  Label: ZKSStart;
  Label: ZKSTimeOut;
  Label: ZKSEnd;

goto ZKSStart; // comment

asm;
Test.$G2_ZKSStart:
endasm;

        TestByte: = TestByte;

goto ZKSEnd; // skip TimeOut

asm;
Test.$G2_ZKSTimeOut:
endasm;
       TestByte: = TestByte;

asm;
Test.$G2_ZKSEnd:
endasm;
       TestByte: = TestByte;


end test;


which generates

Code
Test.BUTTONCOUNT        .EQU    082h            ; const byte     130
                        .SYM      buttonConfigList, 00306h, 00038h, 3
Test.buttonConfigList   .EQU    306h            ; var iData  array
                        .SYM      buttonConfigListCopy, 0050Eh, 00038h, 3
Test.buttonConfigListCopy     .EQU              50Eh        ; var iData  array
                        .SYM      ee_buttonConfigList, 00000h, 04038h, 3
Test.ee_buttonConfigList      .EQU              000h        ; var EEprom array
                        .FUNC     Test, 00025h, 00020h
Test.Test:
                        .RETURNS   0
                        SBIW      _FRAMEPTR, 1
                        .BLOCK    46
                        .LINE     52
                        .BRANCH   20,Test.$G2_ZKSEnd
                        JMP       Test.$G2_ZKSEnd
                        .ASM
                        Test.$G2_ZKSStart:
                        .endasm
                        .LINE     58
                        LDD       _ACCA, Y+000h
                        STD       Y+000h, _ACCA
                        .LINE     60
                        .BRANCH   20,Test.$G2_ZKSEnd
                        JMP       Test.$G2_ZKSEnd
                        .ASM
                        Test.$G2_ZKSTimeOut:
                        .endasm
                        .LINE     65
                        LDD       _ACCA, Y+000h
                        STD       Y+000h, _ACCA
                        .ASM
                        Test.$G2_ZKSEnd:
                        .endasm
                        .LINE     70
                        LDD       _ACCA, Y+000h
                        STD       Y+000h, _ACCA
                        .ENDBLOCK 73
Test.Test_X:
                        .LINE     73
                        .BRANCH   19
                        RET
                        .ENDFUNC  73


Note the JMP statements all jump to Test.$G2_ZKSEnd!

It is nothing really to do with forward declarations - the label statement is effectively a forward declaration.
Merlin.

:magic:

Software is a black art.
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 10.12.2018 - 19:42