-         

Ergebnis 1 bis 8 von 8

Thema: Anzahl der byvals in Sub routine limitiert?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32

    Anzahl der byvals in Sub routine limitiert?

    Anzeige

    Hallo Leute,

    Zur zeit benutze ich folgende Statements um eine Sub routine aufzurufen.


    Code:
    Declare Sub Spi_write(byval Spi_instr As Byte , Byval Spi_bytes As Byte, byval CS as byte, byval spi_echo as byte)
    
    Sub Spi_write(byval Spi_instr As Byte , Byval Spi_bytes As Byte, byval CS as byte, byval spi_echo as byte)
    ...
    end sub
    
    call Spi_write(&h40, 1,0,0)
    ...
    jetzt habe ich festgestellt, das im Simutator falsche Werte als "Local variable" angezeigt werden, wenn die Anzahl der byval's > 2 wird.
    Verwende ich nur 2 parameter, funzt alles ohne Probleme.

    Ist das eine immer so und ich mache einen Fehler, oder ein Fehler in bascom? In der docu, ist nicht bezüglich Limitierung beschrieben.

    Vielen Dank

    mfg

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Schau dir mal
    $HWSTACK =
    $SWSTACK =
    $FRAMESIZE =
    an. Die Defaultwerte sind etwas mickrig. (Help dazu lesen)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    OK, diese stehen auf default.

    $HWSTACK =32
    $SWSTACK =8
    $FRAMESIZE =24

    benutze einen Mega8

    leider steht in der Bascom docu nicht viel dazu. Stehen dei max werte in der atmel spec?

    danke

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Das ist weniger Atmel als Bascom.
    However, probier einfach
    $HWSTACK = 48
    $SWSTACK = 64 ' besonders das ist wichtig
    $FRAMESIZE =24
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    hallo Picknick,

    danke für deine super schnelle Antwort.
    Ich habe den SW stack von 8 auf 12 erhöht und es klappt nun so wie gewollt.

    Aber.. was machtr der SW stack eigentlich genau?

    vielen Dank

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Guckst du da, hab ich ein paar Sachen zusammengeschrieben
    http://www.roboternetz.de/wissen/ind.../Bascom_Inside
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    11.07.2005
    Beiträge
    32
    perfekt,

    das hilft mit beim lernen auf alle Fälle weiter.
    toll, das du das alles zusammengetragen hast.

    cu

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2004
    Ort
    Hard, Vorarlberg
    Beiträge
    155
    Neben den bereits erwähnten Punkten wie FrameSize und Softstack-Größe gibt es noch das Limit, dass die Anzahl der LOCALen Variablen, Parameter und Rückgabewert in Summe maximal 32 sein darf.

    Innerhalb einer SUB oder FUNCTION werden die oben erwähnten LOCAL, Parameter und Funktions-Rückgabe über den SoftStack (Y-Pointer) adressiert. Die Adressen werden über die ASM-Statements Y+0 ... Y+63 angesprochen. Für jede Adresse werden 2 Pointer (Y+0, Y+1) benötigt, daher 64/2 = 32 Adressen.
    Viele Grüße
    Josef
    -------------------------------------------------------------------------------------
    DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel

Berechtigungen

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