const static char array[] PROGMEM = "0123456789"; char buffer; static char help[100]; buffer = array[7]; sprintf_P(help,PSTR(" %d \n") buffer); uart1_puts(help); Hallo Leute, ich sehe glaube ich vor lauter Bäumen den Wald nicht mehr. In dem kurzen Quellcode oben versuche ich das siebte Element des Arrays auszugeben. Leider habe ich keinen erfolg. Sieht jemand den fehler? Danke schonmal für eure Hilfe
Günther schrieb: > uart1_puts(help); > const static char array[] PROGMEM = "0123456789"; > char buffer; > buffer = array[7]; das kann schon mal nicht gehen > sprintf_P(help,PSTR(" %d \n") buffer); hier fehlt doch erstmal ein , oder nicht? %d erwartet eine zahl - du übergibst aber ein zeichen.
<sieht nach gcc aus>
1 | const static char array[] PROGMEM = "0123456789"; |
2 | ...
|
3 | buffer = array[7]; |
4 | ...
|
Auf Dinge, die im Flash liegen (erkennbar durch das PROGMEM) kannst du nicht einfach so zugreifen. pgm_read_byte benutzen. AVR-GCC-Tutorial
Ich sag es ja der Wald :-) Danke Funktioniert jetzt bis auf einen schönheitsfehler. sprintf_P(help,PSTR("%x \r\n"),buffer); diese zeile gibt mir richtig den hex wert aus. Aber ich will den dezimalwert, da dachte ich immer %d oder %i wäre das richtige. da kommt allerdings Mist raus
Günther schrieb: > Ich sag es ja der Wald :-) > Danke > > Funktioniert jetzt bis auf einen schönheitsfehler. > > sprintf_P(help,PSTR("%x \r\n"),buffer); > > diese zeile gibt mir richtig den hex wert aus. > Aber ich will den dezimalwert, da dachte ich immer %d oder %i wäre das > richtige. da kommt allerdings Mist raus sprintf docu zu raten ziehen? müsste ich jetzt auch machen...
Günther schrieb: > diese zeile gibt mir richtig den hex wert aus. > Aber ich will den dezimalwert, da dachte ich immer %d oder %i wäre das > richtige. da kommt allerdings Mist raus du hast doch überhaupt keine zahl, du musst nichts umwandeln! Du hast schon einen String oder zumindest ein zeichen. Wenn du unbedingt printf nutzen willst dann so: sprintf_P(help,PSTR("%c \r\n"),buffer);
:-) Merci gegoogled und leider nicht gefunden. ich suche zwar noch weiter, aber hoffe das jemand die lösung weiß
Peter II schrieb: > sprintf_P(help,PSTR("%c \r\n"),buffer); ;-) mein Gott. Es gibt Tage da steht man besser nicht auf. Heute ist eindeutig so ein Tag danke
Günther schrieb: > gegoogled und leider nicht gefunden. http://www.google.de/search?q=printf 1.Treffer -> http://www.cplusplus.com/reference/clibrary/cstdio/printf/
So, leider ahbe ich noch eine weitere Frage. Natürlich will ich mehrere Arrays anlegen. buffer= pgm_read_byte(&array[4]); sprintf_P(help,PSTR("%c \r\n"),buffer); das funktioniert 1A. So jetzt MUSS ich dieses Programm erweitern. es wird: array0,array1,...array10000 geben. und jetzt will ich nicht 10000mal buffer= pgm_read_byte(&array[4]); schreiben. habe ich da eine möglichkeit das abzukürzen?
Günther schrieb: > So, leider ahbe ich noch eine weitere Frage. > > Natürlich will ich mehrere Arrays anlegen. > > > buffer= pgm_read_byte(&array[4]); > sprintf_P(help,PSTR("%c \r\n"),buffer); > das funktioniert 1A. > > So jetzt MUSS ich dieses Programm erweitern. es wird: > array0,array1,...array10000 geben. Warum willst du das? Was steht in den anderen Arrays denn so drinnen? Wie unterscheidest du denn, welches der 1000 Arrays das Richtige ist?
Also da stehen nur zeichen drin. und über eine eingabe über rs232 will ich ein bestimmtes zeichen (a) der zeichenkette ausgeben. z.B. array773z4. und dann soll buffer= pgm_read_byte(&array773[4]); ausgeführt werden. Die eingabe steht. Ich habe die 773 in einer Variablen und die 4 in einer variabelen. nur kann ich das nicht zusammenfügen zu einem Befehl
Günther schrieb: > Also da stehen nur zeichen drin. und über eine eingabe über rs232 will > ich ein bestimmtes zeichen (a) der zeichenkette ausgeben. z.B. > array773z4. und dann soll > buffer= pgm_read_byte(&array773[4]); > ausgeführt werden. > Die eingabe steht. > Ich habe die 773 in einer Variablen und die 4 in einer variabelen. > nur kann ich das nicht zusammenfügen zu einem Befehl Aber du kannst die 774 genauso wie die 4 als Index in ein und dasselbe Array auffassen. Du hast dann halt ein 2-dimensionales Array anstatt vieler 1-dimensionaler.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.