Julian hat geschrieben:Sorry, bin erst gerade dazu gekommen mir das anzuschauen (irgendwer hatte das im Forum mal als Sozialstress beschrieben

). Doch ich glaube wir reden aneinander vorbei. Das Problem liegt nicht im Code zum schreiben des Puffers auf SD (den hab ich aus xload übernommen). Das Problem ist die Pufferübergabe. Ich habe allen unnötigen Code entfernt und die Daten mal hochbeladen
Ich habe jetzt mal kurz drübergesehen. Irgendwie ist mir die Logik dahinter nicht ganz klar wie Du Variablen/Werte übergibst:
z.B.
Code: Alles auswählen
PUB getpack128 | buffer[128],i,test1
repeat i from 0 to 127
buffer[i] := ser.rx
return buffer
Hier gibst Du als Returnwert den Inhalt des Arrays "buffer" zurück. Wenn ich das richtig interpretiere als 256-Stellige Zahl .. bißchen groß für die arme Variable

Meines Erachtens musst Du die Adresse von "buffer" zurückgeben, also "RETURN @buffer".
Das geht aber nur, wenn "buffer" nicht ein lokales Array ist, da dieses nach dem Verlassen der Routine ja nicht mehr Existent ist.
Mein Vorschlag wäre, "buffer[128]" in "ymodemlib" global zu definieren, "RETURN @buffer" wie oben, und im Hauptprogramm:
Code: Alles auswählen
.....
if packnr == 0
buffer := ymodem.getpack128 ' buffer = Adresse des Puffers
.....
und statt:
Code: Alles auswählen
ios.printhex(buffer,265) <--- ich glaube, da kommt nur Müll raus. Übrigens .. warum 265 ?
lieber
Code: Alles auswählen
repeat i from 0 to 256 STEP 2
ios.printhex(buffer+i,2)
Außerdem wirft mir das hier --> "CRC := ymodem.getcrc" <--- einen Kompilerfehler raus, da die Routine nicht existiert.
Joshy hat Dir auch alle Möglichkeiten gezeigt, wie man auf den Puffer zugreifen könnte (und das hat nichts mit SD-Schreibzugriff zu tun nur weil der Befehl da drin ist).
Probiers halt einfach mal aus mit einem anderen/kleineren Puffer der mit einfachen Ganzzahlen befüllt ist.
Wir können hier auch alle nur rumprobieren. Bei mir hat die Übergabe bis jetzt immer geklappt.
Ich glaube auch ehrlich gesagt nicht daß die Übergabe das Problem ist, sondern wie Du hinterher damit weiterarbeitest.
Ich hab's gerade mal mit dem Befehl "ios.printhex(buffer,256)" in einem Testprogramm probiert ... und bei mir kommt da IMMER nur Müll raus.
Gruß.
Rainer