Hallo,
ich habe das Problem, dass folgende funktion nur einmal funktioniert.
nach dem aufrufen von sd_write schreibt er zwar noch den wert aus der
variablen, jedoch danach nichts mehr auf die karte, auch keine anderen
Zeichen mehr.
SD Lib von Roland Rigel:
Atmega32L
volatile char lon[11];
uint32_t myoffset = 100;
-> wird mehrfach aufgerufen alle 4 sekunden
sd_raw_write(myoffset,&lon,strlen(lon) )
myoffset++;
sd_raw_sync();
Und du meinst aus diesem Codeschnipsel kann man
auf deinen Fehler schliessen? Was steht in lon?
strlen(lon) könnte sonstwas liefern wenn da
kein gültiger String drin steht.
>sd_raw_write(myoffset,&lon,strlen(lon) )
sd_raw_write(myoffset,lon,strlen(lon) )
beschreibe ich so:
pToken ist ein NMEA GPGA string den ich aufteile.
lon beinhaltet zu dem zeitpunkt tatsaechlich daten die ich
an ein lcd ausgebe, lon ist also niemals leer und schliest an stelle 10
immer mit 0 ab.
strncpy(lon,pToken,10);
lon[10] = 0;
also ich hab mir selbst mal strlen() ueber itoa() per uart ausgeben
lassen,
und er zeigt IMMER 10 an.
und direkt danach habe ich auch noch lon ausgeben lassen.
dieser besteht immer aus 10 Zeichen.
die Leitungen sind drann, denke ich.
was mir nicht in den kopf will, ich kann stundenlang, MB weise
da drauf schreiben, solange ich nur einzelne zeichen schreibe.
z.B. abwechselnd ein K und ein L.
aber sobald ich einmal den string aus 10 zeichen drauf schreibe,
schreibt er den und danach is schluss, nix passiert mehr.
Auch wenn es vermutlich das Problem nicht behebt:
> sd_raw_write(myoffset,lon,strlen(lon));> myoffset++;
myoffset += strlen(lon);
Dürfte da wohl angebracht sein.
Du das koennte sogar genau mein Problem sein, ich verschiebe den offset
ja blos um eins, hab mal ein kleinen trick gemacht
void sdXX(const char *s) {
while (*s) {
sd_raw_write(myoffset,s,1);
myoffset++;
sd_raw_sync();
s++;
}
}
und siehe da, mein problem tritt nicht mehr auf, und warum? weil ich nur
1 Byte schreibe