-
Thread
optimierung und itoa
Strings [c] lcd_text( (u8*) "Ex Interval:"); [/c] in "ExI" o.Ä. Saubere Lösung: pgmspace.h, PSTR, lcd_text_P.
> lcd_text( (u8*) "Ex Interval:"); > [/c] > in > "ExI" o.Ä. > > Saubere Lösung: pgmspace.h, PSTR, lcd_text_P. genau, PROGMEM für diese Konstanten verwenden, dann landen die im Flash. Dann ggf. den Pointer drauf holen und weiterverwenden: char *pText = .... Strings sind - wie mein Vorredner
-
Thread
C: Pixel auf dem Bildschirm ausgeben
LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "SetPixelFunc" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ; wndclass.cbSize = sizeof
LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "SetPixelFunc" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ; wndclass.cbSize = sizeof
-
Thread
AtMega ehwiges Fuse Thema 16 Mhz Quarz
automatically put a string constant into program memory */ #define uart1_puts_P(__s) uart1_puts_p(PSTR(__s)) /**@}*/ #endif // UART_H [/code] gruß daniel
im RAM. Du kannst mit der Lib aber auch Texte aus dem Flash ausgeben. Das sollte mit uart1_puts_p(PSTR("STRING IM FLASH")) gehen. cu Georg
-
Thread
Mehrsprachig programmieren für AVR
ein define) aktiviert werden können. Hat da jemand ein fertiges, bewährtes Makro das auch mit PSTR() umgehen kann?
Wenns nur wenige, vorher feststehende Sprachen sind: [c] #if deutsch # define TEXT(de,en) PSTR(de) #else # define TEXT(de,en) PSTR(en) #endif // später: puts(TEXT("Hallo Welt","Hello World")); [/c]
-
Thread
Anzahl der zeichen in String angeben Printf %S
Sooo.. SR ist der string wo ich nur 4 Zeichen ausgeben möchte.. printf_P(PSTR("%-2d %s %-7lu %-2.1f %s %d\r"), address, NA_STRING, system_GetSerialNumber() == 0xFFFFFFFF ? 0 : system_GetSerialNumber(), system_GetHardwareRevision(),
, GetTotalNumberOfErrors()); Mein Ansatz war jetzt: char shortSR[4] = SR; printf_P(PSTR("%-2d %s %-7lu %-2.1f %s %d\r"), address, NA_STRING, system_GetSerialNumber() == 0xFFFFFFFF ? 0 : system_GetSerialNumber(), system_GetHardwareRevision(),
-
Thread
flash struct mit flash string pointern auslesen
geschoben wird b) Der ganze Ausdruck als die Adresse von "c-im_Flash" evaluiert. Sieh dir an, wie zb PSTR in pgmspace.h definiert ist. [C] # define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];})) [/C] da muss schon etwas mehr Aufwand getrieben werden, um etwas inline ins Flash zu
String angelegt! Das müsste doch dann [C] const ST_BYTE_RESLV g_stCmdBase[] PROGMEM = { { PSTR( "+" ), GSM_CmdExt0 }, [/C] lauten. Also einen String, statt einem einzelnen Character.
-
Thread
Stringauswertung Problem
------------------------------------------------------ #define PRINT(string, ...) printf_P(PSTR(string), ##__VA_ARGS__) static int putchar__(char c, FILE *stream) { uart_putc(c); return 0; } static FILE mystdout = FDEV_SETUP_STREAM(putchar__, 0, _FDEV_SETUP_WRITE); // ---------
-
Thread
string aus RAM an LCD-Ausgabefunktion übergeben
irgendwas im Umgang mit Strings falsch: Folgendes funktioniert einwandfrei: N3310_PutStr(PSTR("Beispieltext")); Wenn ich das PSTR weglasse, oder wenn ich einen String übergeben möchte, den ich vorher über den UART des ATmega ins RAM eingelesen habe, wird aber nur ein schwarzer Balken angezeigt. Dass mit PSTR der Text "Beispieltext" vom Compiler im Flash abgelegt wird, glaube ich, verstanden zu haben, was schief läuft, wenn man es weglässt, verstehe ich allerdings nicht. Kann mir jemand sagen, was ich
-
Thread
Frage zur verwendung von strncat
5 ; i++ ) { { strncat(S2, S1[i], 24); /* the next word attach the rear */ strncat_P(S2, PSTR(" "), 24); /* insert space*/ } } ich möchte , dass S2 so aussieht: FF AA BB CC danke
+ ) > { { > strncat(S2, S1[i], 24); /* the next word attach the rear */ > strncat_P(S2, PSTR(" "), 24); /* insert space*/ > } > } > ich möchte , dass S2 so aussieht: FF AA BB CC In Textform oder sollen ersten 4 Bytes von S2 so aussehen? du musst erst mal damit anfangen zwischen
-
Thread
usart xmega probleme
,PSTR("\033[C"));uart1_puts(out) #define POSITION(Ze, Sp) sprintf_P(out,PSTR("\033[%d;%dH"),Ze,Sp);uart1_puts(out) #define CLEAR sprintf_P(out,PSTR("\033[2J"));uart1_puts(out) #define
sprintf_P(out,PSTR("\033[36m"));uart1_puts(out) #define FORECOLOR_WHITE sprintf_P(out,PSTR("\033[37m"));uart1_puts(out) #define BACKCOLOR_BLACK sprintf_P(out,PSTR("\033[40m"));uart1_puts(out) #define BACKCOLOR_RED
-
Thread
Strings in .data sichtbar machen per avr-nm
Hallo! Angenommen ich verwende auf dem AVR printf("foo") statt printf_P(PSTR("foo")), dann wird der const char* ja im Flash ablegt, dann aber von der startup-Routine in die .data-Sektion kopiert (die im SRAM liegt). Wenn ich mir das mit avr-size ansehe, sehe ich da auch den
Ja, ich hatte das mit den durch PSTR generierten Symbolen verwechselt, die bekommen einen Namen. Die .data-Symbole haben keinerlei Debug- Information, davon übernimmt der Assembler keinerlei symbolische Information in die Objektdatei
-
Thread
Data-Memorie is voll - In den Program-Memorie verschiebbar?!
[c] printf_P(PSTR("Text im Flash! Variablen gehen auch: %d"), value); [/c]
Lothar Miller schrieb im Beitrag #1770065: > printf_P(PSTR(" die variante mit dem großen P ist normalerweise ein Makro, dass das PSTR selbst macht. also entweder printf_P("text") oder printf_p(PSTR("text"))
-
Thread
PORT-PINS als Jumper AVR (Ethernut 2)
PB0 PORTB &= ~(_BV(1)); // set Pin PB1 to low /*...*/ if(bit_is_set(PINB,0)) { fputs_P(PSTR("HIGH"),stream); } else { fputs_P(PSTR("LOW"),stream); } /*...*/
-
Thread
Arrays, Strings und Flash bzw. SRAM
struct mystruct { prog_char* pText; }; const struct mystruct test[] PROGMEM = { { PSTR ( "Test 1" ) }, { PSTR ( "Test 2" ) }, { PSTR ( "Test 3" ) }, { PSTR ( "Test 4" ) } }; // ---------------------------------------------------------------------- // Variante 3 // Oder
-
Thread
C++: Only initialized variables can be be placed into programming area
Hallo, ich erhalte bei allen Ausdrücken der Art lcd_puts_p(PSTR("Sending")); die obige Warnung vom Compiler. Der Quelltext wird als C++ übersetzt. Wie kann ich diese Warnung umgehen, und was meint der Compiler eigentlich damit? LG Stefan
-
Thread
lcd string "ü" darstellen.
RAM-Verschwendung und pgmspace.h. [c] #include <avr/pgmspace.h> set_cursor(0,2); lcd_string_P( PSTR("Belüftung") ); [/c] Werd ich demnächst mal ins Tutorial einbauen. MfG Falk
-
Thread
Problem mit Textausgabe an UART
uartPutChar( c ); c = pgm_read_byte( buffer++ ); } } ... uartPutString_P( PSTR( " THIS IS " ) ); [/C]
-
Thread
Atmega644 UART - Komische Ausgabe
dorthin gebracht werden. Schau Dir mal in der Dokumentation zu <avr/pgmspace.h> an, was z.B. der Macro PSTR() tut.
-
Thread
3310 Software will nicht char* nehmen
LcdImage(waitImage); //Bild LcdGotoXYFont(1,6); //Zeile LcdFStr(FONT_1X,(unsigned char*)PSTR("MPC Startet...")); //Startet LcdUpdate();// Auf Display _delay_ms(1000); LcdClear(); //Bildschirm räumen LcdUpdate();// Auf Display LcdGotoXYFont(1,1); //Zeile LcdFStr(FONT
[c] LcdFStr(FONT_1X,(unsigned char*)PSTR("MPC Startet...")); //Startet [/c] und kurz danach ... [c] LcdFStr(FONT_1X,(unsigned char*)Text); [/c] wobei „Text“ eine (falsch deklarierte, aber jedenfalls) Variable im SRAM ist. Also wird
-
Thread
Schalter PORTC 1-5 C
LcdImage(waitImage); //Bild LcdGotoXYFont(1,4); //Zeile LcdFStr(FONT_1X,(unsigned char*)PSTR("PC Startet...")); //Startet LcdUpdate();// Auf Display _delay_ms(100); LcdClear(); //Bildschirm räumen }*/ DDRC &= ~(1<<DDC1); /* Pin PC1-5 als Eingang */ DDRC &= ~(1<<DDC2);
-
Thread
STM32 Speicherproblem?
Beim AVR lag es daran, weil die Debug-Texte im RAM lagen und mir den Stack zerstört haben. Mit PSTR und pgmspace konnte ich die Texte in den Flash legen und das Problem lösen. Aber der ARM hat eine andere Speicherarchitektur und legt Strings automatisch in den Flash? Ich benutze einen STM32F105RB
-
Thread
STM32 ohne JTAG starten
= "K pressed long"; uputs(c); Aber das ist etwas umständlich zu schreiben. Beim AVR hab ich PSTR benutzt. Aber der hat auch ne andere Architektur. Bin noch etwas Newbie mit den ARMs ;) Aber danke für die geduldige Hilfe!
-
Thread
Code funktioniert in main(), aber nicht über Funktion?
Kompletter Programmcode attached). /* Ask for command and store result in string s */ UART_readline(PSTR("Enter command. \r\n"), s); /* Ask for command and store result in string s */ /*printf_P(PSTR("Enter command. \r\n")); wdt_disable(); fgets(s, sizeof(s)-1, stdin); wdt_enable(WDTO_500MS); s[strlen(s)-2] = 0; // drop the ending \r\n printf_P(PSTR("You entered '%s'\r\n"),s); */ Nutze AVR Studio. Irgendwelche Ideen, an was das liegen mag? Danke Axel
-
Thread
Problem: zwei Variablen auf selber Adresse(?)
rausgefunden wie ich meine Texte auf den > Flash speichern lassen kann pgm_read_*() zum lesen, PSTR() ums bequem in den Flash zu verbannen. Beides in pgmspace.h (avr-libc) > Warum gibt es denn keinen Fehler oder zumindest ne Warnung wenn der SRAM > überfüllt ist? Weil es in der Regel nicht
-
Thread
Zugriff string Konstante im PROGMEM eleganterer, einfacherer Weg?
Guck dir mal den PSTR-Makro an.
PSTR( "Alfons" ); [/C] Danke! Gruß AVRli...
-
Thread
String splitten (Programmiersprache: C)
cmd_switch(void) { char cmd = uart_string[0]; switch(cmd) { case 'm': uart_puts_p(PSTR("MOTOR\r\n")); break; case 'l': uart_puts_p(PSTR("LEDS\r\n")); break; case 's': uart_puts_p(PSTR("SPEED\r\n")); break; case 'u': uart_puts_p(PSTR("UEBERSICHT")); break; default: uart_puts_p(PSTR("ERROR\r\n")); memset(uart_string, 0, UART_MAXSTRLEN); } }[/c]
-
Thread
atmega328 funktioniert teilweise nicht
automatically storing string constant in program memory */ #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) /*@}*/ #endif //LCD_H [/c]
-
Thread
AVR-NET-IO mit ATmega644
Schau mal in die Datei "apps/modules/cmd_adc.c" nach folgendem Codefragment: [c] /* printf_P( PSTR( "<HTML>" "<HEAD>" "<TITLE>ADC</TITLE>" "</HEAD>" "<BODY>" ));*/ cgi_PrintHttpheaderStart(); printf_P( PSTR( "<table border=\"0\" cellpadding=\"5\"
); */ printf_P( PSTR( "<table border=\"0\" cellpadding=\"5\" cellspacing=\"0\">" ) ); [/c] Damit wird die Seite alle 30 Sekunden neu geladen. Ich werte deinen Vorschlag mal als Wunsch und habe es auch schon eingepflegt