Danke für den Hinweis!
Das wusste ich nicht.

Aber dennoch ist das wenn man es genau nimmt ein Compiler-Fehler.
Denn der müsste selbstständig für die Rückgabevariable Speicher reservieren.
Auf dem Softstack 2 Adressen und im im Framesize die Variablenwerte.
Und wenn man des Soft-Stack anschaut, reserviert er auch Platz für 2 Adressen.
Die eine Adresse zeigt auf den Parameter. Die andre Adresse zeigt auch irgendwo hin,
konnte aber nicht herausfinden auf was.

Wenn man es weiß, kann man den Fehler umgehen, hatte mich aber dumm gesucht,
bis ich merkte, dass die Funktion den Rückgabewert überschreibt.

Vermutlich ist das auch das selbe Problem, wenn man z.B. eine Funktion so schreibt.

Code:
Function Sub DurchsucheArray(byval Anzahl as Byte, byval SuchString as String) as Byte
   local i as Byte
   For i=0 to Anzahl-1
      If myArray(i)=SuchString then
         DurchsucheArray=i
         Exit Function
      End If
   Next
End Function
Hierbei hatte ich den Effekt, dass es einige male funktionierte und plötzlich läuft die Schleife über Anzahl hinaus.
Eben noch so ein Bug in Bascom.

Eigentlich Schade, dass die Programmierer die Software und die Bascom-Hilfe nicht richtig pflegt.

Aber nochmals danke für die Info.

Micha

- - - Aktualisiert - - -

Nachtrag

Wenn der Funktion (aus 1. Beitrag) keine Variable zur Aufnahme des Rückgabewerts zur Verfügung (var=Funktionsaufruf) gestellt wird,
zeigt die 2. Adresse des Software-Stack auf den Wert $0010. Dies entspricht dem Register 16.

Ein Test im Simulator zeigt, dass der Wert aus Register r16 zurück gegeben wird.
Auf dem Framesize wurde nur 1 Wert abgelegt, der Bytewert des Übergabeparameters.

Fazit: Der Compiler hat seine Macken und ist irgendwie nicht ausgereift. Gäbe es so Macken in GCC, würden die Programmierer auf die Barrikaden gehen.

Schade, Schade.