Wenn ich diese Funktion verwende: [c] lcd_stringCenter_P((PSTR)"ID unknown.", 1); [/c] Er schmeißt dann aber bei mir einen Feher raus: Error 6 too few arguments to function 'lcd_stringCenter_P'
Es muss heißen: [c]lcd_stringCenter_P(PSTR("ID unknown."), 1);[/c]
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
andere läuft einwandfrei. aus dem flash oder aus dem SRAM? nutzt du progmem für die Strings und PSTR()?
einwandfrei. > > aus dem flash oder aus dem SRAM? > > nutzt du progmem für die Strings und PSTR()? Yupp..... daher muss ich auch unterscheiden wo was her kommt [c] const char flash_sms_empty[] PROGMEM = "Batterie leer! Powerdown!"; const char flash_admin[] PROGMEM = "Admin OK
{ //unsigned int i; // war char. Nur geht for-Schleife dann in die Hose bei >255 /* USART_sendmsg(PSTR(" ADC-Init: ")); // Hilfsausgabe USART_sendmsg(PSTR("ADCSRB vor: ")); // Hilfsausgabe USART_Tx_Int(ADCSRB); // Hilfsausgabe USART_sendmsg(PSTR(" ADCSRA vor: ")); // Hilfsausgabe USART_Tx_Int(ADCSRA)
brief Transmit a char, if you want to use printf(), * you need implement this function * * @param pStr Storage string. * @param c Character to write. */ void PrintChar(char c) { /* Send a char like: while(Transfer not completed); Transmit a char; */ glcd_putchar(c); } /** Maximum string size allowed
brief Transmit a char, if you want to use printf(), * you need implement this function * * @param pStr Storage string. * @param c Character to write. */ void PrintChar(char c) { /* Send a char like: while(Transfer not completed); Transmit a char; */ glcd_putchar(c); } /** Maximum string size allowed
einer 2007er und einer 2008er Version nicht mehr funktioniert. Bei der 2007er habe ich zB. keine PSTR verwenden können. Da wurde wild im Speicher herumgelesen. Bei der 2008er funktionieren die PSTR zwar wieder, aber dafür habe ich das Problem auf ungerade Adressen im EEProm zuzugreifen. Heute Mittag
durcheinander geht, aber prinzipiell funktioniert der Code. >Bei der 2007er habe ich zB. keine PSTR >verwenden können. Da wurde wild im Speicher herumgelesen. Gibt es dafür auch ein Beispiel? Oliver
Ich habe ein Problem mit der printf-P - Funktion. Der Code ist wie folgt : printf_P(PSTR("\n\rBrennerstart : %6u\n\r"), Brenner_Start_Zeit); printf_P(PSTR("Start:;%02i:%02i:%02i ;"), Brenner_Start_Zeit/3600, (Brenner_Start_Zeit
das, was du wolltest): */ printf_P(PSTR("Start:;%02u:%02u:%02u ;"), (int16_t)(Brenner_Start_Zeit/3600), (int16_t)((Brenner_Start_Zeit/60)%60), (int16_t)(Brenner_Start_Zeit %60));
Wörter ersetzt? unsigned int Replace2(char *pStr, char replace, char newChar) was wäre den pSTR , replace , newChar? newChar = ersetzendes Wort replace = zu ersetzendes Wort pSTR = ? Vielen Dank schon einmal für die Mühe
Dich. Falls Du es verstanden hättest, würdest Du sehr wahrscheinlich so etwas: > was wäre den pSTR , replace , newChar? > newChar = ersetzendes Wort > replace = zu ersetzendes Wort nicht fragen. Denn es würde klar sein, das char nur für ein einzelnes Zeichen steht und ergo, der Parameter newChar
void checkbyte(char c) { if (c & 0b11110000 == hw_GetTWIAddr() ) { printf_P(PSTR("Funktioniert")); printf_P(PSTR("%c"), c); } else printf_P(PSTR("Läuft nicht, falsche Adresse")); } die Funktion soll das byte was vom Uart des contrllers kommt (char c) aufsplitten
dir oben gepredigt habe. PSTR ist ein Makro aus [c] #include <avr/pgmspace.h> [/c] das Header File verwendet PSTR, also müsste das Header File diesen Header inkludieren. Tut es aber nicht, statt dessen macht es die test_uart.c
Zu dem PSTR Problem. Ich weiß nicht, wo die Warnung herkommt. Ich hab sie bei mir nicht und ich sehe in den Headerfiles auf meinem System auch keinen Grund, warum die kommen würde. Ich kann sie aber, wenn
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 "));
sich der Compiler nicht wehren kann :-) Die korrekte Syntax für den gcc lautet: uart_puts_P( PSTR( ">" ) ); Siehe auch das gcc-Tutorial, den Abschnitt 17.2 und dann schau dir mal im Fleury Source-Code an, was uart_puts_P mit dem übergebenen Wert macht.
das so richtig sei. Diesmal hab ich was übersehen. P.Fleury hat sich ein Makro gebaut, dass den PSTR einsetzt: #define uart_puts_P(__s) uart_puts_p(PSTR(__s)) deshalb funktioniert das korrekt. Mea culpa.
*_impure_ptr = &r; /** * @brief Writes a character inside the given string. Returns 1. * * @param pStr Storage string. * @param c Character to write. */ signed int PutChar(char *pStr, char c) { *pStr = c; return 1; } /** * @brief Writes a string inside the given string. * * @param pStr Storage string
die Funktion einen String im Flash erwartet. Deiner liegt aber im RAM. Du kannst den String mit PSTR ins Flash verfrachten, also z.B. so: PSTR("Hallo") http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Vereinfachung_f.C3.BCr_Zeichenketten_.28Strings.29_im_Flash
was ich genau ändern müsste? Ich dachte eigentlich, das hätte ich bereits. lcd_print_P(0,0,PSTR("Time: %2i:%2i:%2i"),hh,mm,ss);
ACC PUSH PSW PUSH REG7 PUSH REG6 PUSH REG5 PUSH REG4 PUSH REG3 PUSH REG2 PUSH REG1 PUSH REG0 ACALL pstr DB "DPTR : ",00h ACALL padr ACALL pstr DB cr,lf,"R0,R1: ",00h pop DPH POP DPL ACALL padr ACALL pstr DB cr,lf,"R2,R3: ",00h pop DPH POP DPL ACALL padr ACALL pstr DB cr,lf,"R4,R5: ",00h pop DPH POP DPL ACALL padr ACALL pstr DB cr,lf,"R6,R7: ",00h pop DPH POP DPL ACALL padr ACALL pstr DB cr,lf,"PSW,A: ",00h pop DPH POP DPL ACALL padr ACALL pstr DB cr,lf,"B,SP : ",00h pop DPH pop DPL ACALL padr ACALL pstr DB cr,lf,00h ret
(code-mäßig), aber einfach: [c] #define STRLEN 15 char s[STRLEN]; int i = 5; sprintf_P(s, PSTR("i = %d"), i); lcd_string(s); [/c]
hinweis. so bin ich jetz auch zu einem prositiven ergebnis gekommen (die variante mit: sprintf_P(s, PSTR("i = %d"), i); wars noch nicht). also allen helfenden nochmal ein dankeschön. bis zur nächsten frage - schöne grüsse vom anfänger
{ 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.
{ 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.
Hallo ihr C-Gurus, ich hätte da mal ein Problem im Atmel Studio 6. Ich möchte einen mittels PSTR im Flash abgelegten String in eine Variable lesen um diesen zu bearbeiten und später anzuzeigen. Ich habe zur Dokumentation mal folgenden (nicht zwingend sinnigen) Testcode geschrieben: [c] int8
} // weitere Verarbeitung von msg_str } void print_str_from_progmem(void) { print_msg(PSTR("Test")); } [/c] Beim Kompilieren erhalte ich dann in der Zeile print_msg(PSTR("Test")); folgende Fehler: Error 1 invalid conversion from 'const char*' to 'char*' [-fpermissive] Error
Die Strings müssen mit PSTR auch ins Flash. So liegen nur die Zeiger auf die Strings dort.
weiter rumgesucht laut https://ewiki.e-dschungel.de/software/avr-gcc geht nur variante1?! das PSTR macro kann hier nicht verwendet werden. ... ich will aber die blonde variant2 und bekomm sie nicht, gemein! mt
define LCD_PRINT_RAM(STR,X,Y) lcd_print (STR, 0, X, Y) #define LCD_PRINT_FLASH(STR,X,Y) lcd_print (PSTR(STR), 1, X, Y) [/c] Ist aber auch Geschmackssache. Schliesslich böte sich noch an, ne eigene, printf-ähnliche Funktion zu schreiben, in der per %-Kommando die print-Koordinaten gesetzt werden