Hi,
Ich brauche eine Funktion, die einen String in ein Array schreibt.
Dieses Array wird dann auf einen OLED Display ausgegeben (SSD1306). Dazu
habe ich mir ein Testprogramm geschrieben (im Anhang), wobei die
Funktion write_string_to_OLED_buffer jedoch nicht funktioniert.
Nach etwas testen kam ich zu dem Ergebnis, dass ich, wenn ich den Inhalt
des Strings in der Funktion neu schreibe (über den Pointer), auch etwas
ausgegeben bekomme.
Ebenfalls möglich ist es, Zeile 47 von
*buffer_pointer = font[*string_pointer][d];
zu
*buffer_pointer = font['A'][d];
zu ändern, halt mit der Wirkung, dass ich 5x ein A ausgegeben bekomme.
Zeile 32 & 33 dienen nur dem Test, ob der Rest funktioniert (was er
tut).
In einem anderen Thread habe ich gelesen, dass evtl. der String nicht in
den Speicher geschrieben wird. In meinem Makefile konnte ich nichts
finden, was darauf schließen lässt, bin allerdings auch nicht sehr
bewandert darin.
Es wäre schön, wenn mir da jemand bei helfen könnte.
viele Grüße,
Tristan
@Tristan V. (jing-peng)
>Ich brauche eine Funktion, die einen String in ein Array schreibt.
Das ist das kleine 1x1.
>Funktion write_string_to_OLED_buffer jedoch nicht funktioniert.
Logisch. Eher so.
> würde wohl eher so sein müssen:void write_string_to_OLED_buffer> (unsigned char* buffer_pointer, char *string_pointer)> {> for (int i = 0; i < 5; string_pointer++, buffer_pointer++, i++)> {> for (unsigned char d=0; d < 5; d++, buffer_pointer++)> *buffer_pointer = font[string_pointer][d];> }> }
Ist auch falsch!!!
Hallo,
erstmal danke für die vielen Antworten!
Dirk B. schrieb:> Bist du dir bei *string_pointer++ wirklich zu 100% sicher?> (Das funktioniert zwar, aber der * ist überflüssig)
das ist mir wohl bei der letzten Änderung reingerutscht, ändert aber
nichts am nicht Funktionieren.
René H. schrieb:> *buffer_pointer = font[string_pointer][d];
sicher dass das so funktionieren kann?. Ich bekomme einen Fehler vom
Compiler (und hätte auch nicht erwartet, dass das geht).
René H. schrieb:> Weshalb Du in der for Schleife <5 nimmst, erschliesst sich mir nicht....
das habe ich nur gemacht, weil *string_pointer != '\0' nicht geklappt
hat
Fontspezialist schrieb:> ob der Font wirklich bei> Zeichen Null beginnt?
tut mir leid, habe vergessen das Headerfile (ist nicht von mir) zu
posten.
Ist im Anhang.
Ist es evtl. möglich, dass ich statt der main.hex die main.elf flashen
muss?
vielen Dank für die Antworten,
Tristan
Wie vermutet, du versuchst mehr RAM zu benutzen, als überhaupt vorhanden
ist, weshalb der Stack in deine statischen Daten rein wächst. Auch mit
Korrektur der anderen kleinen Fehler wird es so also nicht
funktionieren. Du musst die Font-Daten ins Flash verbannen und aus dem
RAM raus halten.
Stefan E. schrieb:> Ich würde ja __flash nehmen. Das macht das ganze deutlich transparenter,> insbesondere bei mehrdimensionalen Arrays.
Geht natürlich auch. Dachte für den TO so als Einstieg zum RAM sparen
mal
an pgmspace.h.
(Das Headerfile habe ich natürlich auch entsprechend geändert)
Danke nochmal, dass ihr die Flash-Funktionen mit ins Spiel gebracht
habt, die werden mir bestimmt noch das ein oder andere Mal helfen!
Tristan