to automatically put a string constant into program memory */ #define uart_puts_P(__s) uart_puts_p(PSTR(__s)) /** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */ extern void uart1_init(unsigned int baudrate); /** @brief Get received byte of USART1 from ringbuffer. (only
PSTR einsetzt, so dass du es nicht vergessen kannst. Sozusagen die Komfortversion, so wie usart_writePC die Komfortversion von usart_write_P0 ist. [C] #define Licht_P(x,y) Licht( PSTR(x), y ) [/C]
sein. Ins Flash kannst du den String aber nur bei seiner 'Entstehung' verschieben. Also muss das PSTR mit dem String-Literal mitwandern. Dort wo das String-Literal ist, muss auch das PSTR sein.
oder zumindest ein zeichen. Wenn du unbedingt printf nutzen willst dann so: sprintf_P(help,PSTR("%c \r\n"),buffer);
Peter II schrieb im Beitrag #2648795: > 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
mit kleinem p) übergeben wird. Gemacht ist es so [C] #define LCD_printf_P(x) LCD_printf_p( PSTR(x) ) [/C] Das PSTR Makro sorgt dafür, dass der konstante Text im Flash bleibt.
Namen. Aber was uart_puts_p angeht: Die Strings müssen zum Parameter passend in ROM gelegt werden. PSTR("xxx") statt "xxx" könnte notwendig sein. Manchmal gibt es Versionen _p ohne und _P mit automatischem PSTR. Doku lesen.
Probiers mal so: #define uart_puts_P(s) uart_puts_p(PSTR(s)) (diesmal wars daneben geklickt...)
Hi, schon mal mit "PSTR()" im Array versucht? Hab gerade keine Möglichkeit dies zu testen, aber da es beim printf auch so geht sollte es möglich sein. Stephan
übersichtlicher und schnell erweiterbar. @Stephan dies funktioniert leider nicht, da [c] # define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];})) [/c] aus 2 Codezeilen besteht, welche natürlich nicht im Array verwendet werden können. Wahrscheinlich wirds drauf hinaußlaufen,
schon echt Einiges versucht wie ihr euch vorstellen könnt. Bis hin zu: [C] if (!strncasecmp(DS1, PSTR("OUT1"), 4)){...oder if (!strncasecmp(DS1, PSTR("OUT1\0"), 4)){... [/C] war alles dabei. Ich danke euch sehr für Hilfe.
html_node/Finding-Tokens-in-a-String.html RAM/Flash Verwirrung? Oben steht an einigen Stellen PSTR. Das Gegenstück muss dazu passen.
basteln. Da gibt es einen Befehl mit dem man per HTTP Webseiten abrufen kann... ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback); Diesen Befehl will ich nutzen um eine Variable per HTTP GET an meinen Server zu übertragen. Funktioniert auch technisch wenn ich z.B. einen String eingebe... ether.browseUrl(PSTR("/script.php?daten="), "test", website, my_callback); ...ich bekomme anstelle von "test" jedoch keine Variable hin. Arduino 1.0 gibt mir immer eine Fehlermeldung aus: invalid conversion from 'int
Kartonverpackung und Materialien Transportation Packing and Materials Barcodelabel Barcodelabel -:1P1 ninB3B pSTR T6 76 D Bi Te2L 0C C RT T DEM Y L O PSY rM 2 2a 24 60 nal2EX 18 ultiT 3 Addti77 VAR :R + Q-1 M e 0PACKR P:P-1 V E L t )G R UO L E asee . ( c dnoalR H ) s Ibar iy ( . to 9 8 : 144 um id R H O pctors
ks0108ReadFontData, BLACK); // Set a position //ks0108GotoXY(15,10); // Print some text //ks0108Puts_P(PSTR("test")); // a nice little round rect //ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK); // Once again :) // Select a font //ks0108SelectFont(SC, ks0108ReadFontData, BLACK); // Set
wäre mit den anderen Antworten längst gelöst. z.B. in main.c statt T6963cPutStringXY_P(0, 0, PSTR("Hi!")); [C] { char Buffer[20]; int i = 25; itoa( i, Buffer, 10 ); // http://www.mikrocontroller.net/articles/FAQ T6963cPutStringXY(0, 0, Buffer); // ohne _P ! } [/C] Zu Beginn
Was es mit dem _P auf sich hat, kannst du im AVR-GCC Tuturial unter den Stichworten PSTR und PROGMEM nachlesen.
at Row 15, Col 3 T6963cPutStringXY_P(0, 0, PSTR("Hi!")); T6963cPutStringXY_P(0, 1, PSTR("Wie kann ich bei diesem Display ")); T6963cPutStringXY_P(0, 2, PSTR("TM24064B, mit einem T6963C,einen ")); T6963cPutStringXY_P(0, 3, PSTR("ADC-Wert ausgeben? Ich habe es schon mit ")); T6963cPutStringXY_P(0, 4, PSTR("Itoa versucht,aber das mit dem Itoa ")); T6963cPutStringXY_P(0, 5, PSTR("klappt irgendwie nicht, weis einer Rat ? ")); T6963cPutStringXY_P(0, 6, PSTR("Danke schon mal fuer etwaige bemuehungen "));
{ b = 0; switch(pgm_read_byte(http_entry[index].new_page_pointer+2)) { case 'I': sprintf_P(dstr, PSTR("%i.%i.%i.%i"),myip[0],myip[1],myip[2],myip[3]); break; case 'R': sprintf_P(dstr, PSTR("%i.%i.%i.%i"),router_ip[0],router_ip[1],router_ip[2],router_ip[3]); break; case 'M': sprintf_P(dstr, PSTR("%i.
schon gar nicht mehr die Seite auf. Den Text den er ausgeben soll ist: [code] sprintf_P(data, PSTR(" <div class=\"eingabe\">%i FREI: %i Raum:%i Ein am:%i.%i.%i um %i:%iUhr AUS:%i.%i.%i um %i:%iUhr</div> "),i,Time_Speicher[i].Frei, Time_Speicher[i].Raum, Time_Speicher[i].EIN_Day,Time_Speicher[i].EIN_Month
kann Code auch umbrechen und muss nicht alles in einer Zeile reinknüdeln [c] sprintf_P( data, PSTR(" <div class=\"eingabe\">%i " "FREI: %i " "Raum:%i " "Ein am:%i.%i.%i um %i:%iUhr " "AUS
. Außerdem sollten bei entsprechenden Controllern (z.B. AVR) String-Konstanten mit "PROGMEM" oder PSTR() erzeugt werden, damit sie während der Laufzeit nicht ins RAM kopiert werden. Beides ist extrem speicherschonend.
with the suffix "_P" where the format string is expected to reside in the flash ROM. The macro \c PSTR (explained in \ref avr_pgmspace) becomes very handy for declaring these format strings. \anchor stdio_without_malloc <h3>Running stdio without malloc()</h3> By default, fdevopen() requires malloc().
www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Array_aus_Strings_im_Flash-Speicher PROGMEM und PSTR sind die Zauberwörter. Servus Michael
Code. Da gibt es einen kompletten Abschnitt drüber im AVR-GCC-Tutorial. Such mal nach PROGMEM und PSTR... In der Artikelsammlung sind auch Projekte beschrieben, die mit einer Menüführung auf einem LCD arbeiten. Da ist wahrscheinlichst auch entsprechender Code zu sehen.