GOTO Label und Funktionen

pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

GOTO Label und Funktionen

 · 
Posted: 13.11.2018 - 17:47  ·  #1
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
Attachments
Wo Ist der Fehler
Filename: 13-11-_2018_17-45-31.bmp
Filesize: 1.28 MB
Title: Wo Ist der Fehler
Information: Wo Ist der Fehler
Download counter: 106
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: GOTO Label und Funktionen

 · 
Posted: 13.11.2018 - 18:11  ·  #2
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
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: GOTO Label und Funktionen

 · 
Posted: 13.11.2018 - 18:17  ·  #3
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
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: GOTO Label und Funktionen

 · 
Posted: 13.11.2018 - 18:49  ·  #4
Hi,

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

Gunter
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: GOTO Label und Funktionen

 · 
Posted: 13.11.2018 - 19:43  ·  #5
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
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: GOTO Label und Funktionen

 · 
Posted: 13.11.2018 - 20:32  ·  #6
Hi
im Compiler Manual ist bei der Beschreibung von "GoTo" auch unten die Definition
eines Pascal Blocks erwähnt !
Gunter
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: GOTO Label und Funktionen

 · 
Posted: 14.11.2018 - 10:39  ·  #7
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.
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   126   141 · Page-Gen-Time: 0.071068s · Memory Usage: 4 MB · GZIP: on · Viewport: SMXL-HiDPI