- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Grundwissen Subroutinen

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Ruedi

    Ich meine den Programmspeicher!

    Wenn ich einen Code habe wo 20mal auf eine Sub zugegriffen wird,
    (nicht in einer Schleife sondern wo 20mal der Code drinn steht)
    brauche ich ca. 600 Byte mehr Programmspeicher, als wenn ich es mit Gosub Sprüngen mache.

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    67
    Beiträge
    264
    @Roberto:
    Kannst Du mal diesen Code posten ?
    Nur so interessenhalber ...
    Danke !
    MfG
    Ruedi

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo Ruedi

    Weis jetzt nicht mehr so genau.
    Ich galube ich hatte das mit Functionen probiert.

    Habe mal schnell einen Code zusammengeschrieben..

    Der braucht 40 Byte mehr pro Functions aufruf als das gleiche mit Gosub:

    Code:
     ' 8MHz Quarz
     ' LCD auf Port B ,
     '
    '  $sim
    
    $regfile = "m16def.dat"
    $crystal = 8000000                                          ' (RC Intern)
    $baud = 9600
    
    $hwstack = 256
    $swstack = 256
    $framesize = 256
    
    
    '---Config für LCD Port B ----------
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.5 , Db6 = Portb.3 , Db7 = Portb.4 , Rs = Portb.7 , E = Portb.6
    Config Lcdbus = 4
    Config Lcdmode = Port
    Cursor On
    '-----------------------------------
    
    
    Dim A As Byte
    Dim B As Byte
    
    B = 10
    
    Declare Function Test(byval C As Byte)as Byte
    
    
    Do
    A = Test(b)                                       '  500Byte Programmspeicher
    A = Test(b)                                       '+ 40Byte
    A = Test(b)                                       '+ 40Byte
    Loop
    End
    
    
    Function Test(byval C As Byte) As Byte
    C = 10
    
    End Function

    Und das Gleiche hier mit Gosub:

    Code:
    ' 8MHz Quarz
     ' LCD auf Port B ,
     '
    '  $sim
    
    $regfile = "m16def.dat"
    $crystal = 8000000                                          ' (RC Intern)
    $baud = 9600
    
    $hwstack = 256
    $swstack = 256
    $framesize = 256
    
    
    '---Config für LCD Port B ----------
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.5 , Db6 = Portb.3 , Db7 = Portb.4 , Rs = Portb.7 , E = Portb.6
    Config Lcdbus = 4
    Config Lcdmode = Port
    Cursor On
    '-----------------------------------
    
    '-----------------------------
    
    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    
    B = 10
    
    
    Do
    
    Gosub Test                                                  '454 Byte
    A = C
    
    Gosub Test                                                  '466 Byte
    A = C
    
    Gosub Test                                                  '478 Byte
    A = C
    
    Loop
    End
    
    Test:
    C = 10
    Return
    
    '-----------------------------
    Bei 3 Aufrufen mit 478Byte Programmspeicher.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    @Roberto
    Du vergleichst Äpfel mit Birnen

    siehe oben:
    Zitat Zitat von PicNick
    Was ins Fleisch geht, ist die Sache mit "byval".
    lass die Paramerübergabe byval weg und es kommt auf das gleiche raus

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad