-
Thread
avr und c: lcd-anzeige und nutzung von variablen
(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
-
Thread
Serieller Ausgabesalat
einfacher Aufruf zur Ausgabe von einem String mit Variablen sieht bei mir so aus: [c] serialString_P(PSTR("Steurungswert: ")); serialNumberDigits(parameter.a, 1); serialString_P(PSTR(";")); [/c] wie kann ich das den Prüfen und worin besteht das das Problem, sprich wo kommen die falsch ausgegebenen
-
Thread
HexString to String
argh sprintf_P(sOutString, PSTR("%ld"), strtol(sInString, 0, 16)); ja... is ok ...
-
Thread
ATmega8, UART: UDR mehrmals auslesen?
hintereinander mehrmals auslese. if(bit_is_set(UCSRA, RXC)) { if(UDR == 'o') { uart_puts_pgm(PSTR("O\n")); } if(UDR == 'l') { uart_puts_pgm(PSTR("L\n")); } } Wenn ich ein o sende erhalte ich sofort O als Rückmeldung, wie erwartet. Wenn ich allerdings ein l sende passiert was
-
Thread
Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain
[c] lcdClrscr(); lcdGotoxy(0, 0); lcdWrite_P(PSTR("Loading firmware")); lcdGotoxy(0, 1); lcdWrite_P(PSTR("Please wait... ")); beepOk(); wdt_reset(); wdt_enable(WDTO
-
Thread
[AVR] compiler optimiert strings nicht richtig
automatically storing string constant in program memory */ #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) #define ERROR_SD_READ "Error SD_read" if( 0 != getSDinfos(&sdInfo) ){ lcd_init(LCD_DISP_ON); lcd_puts_P( ERROR_SD_READ ); HALT; } if(0 != SD_readSingleBlock
extern void foo1 (const char*); extern void foo2 (const char*); void foo (void) { foo1 (PSTR ("hallo")); foo2 (PSTR ("hallo")); } [/c] Wird expandiert zu [c] void foo (void) { foo1 ((__extension__({static char __c[] __attribute__((__progmem__)) = ("hallo"); &__c[0];})))
-
Thread
LCD-Menü mit Stringarray
RS232 [OK]....\r\n\r\n");[/c] Braucht gleich mal 18 Bytes RAM Besser wäre [c]uart_putstring_P(PSTR("RS232 [OK]....\r\n\r\n"));[/c] Gruß Roland
-
Thread
Frage GCC-Tutorial: EEPROM-Variable auf feste Adressen legen
gcc bzw. mehr oder weniger gleichbedeutend damit Section-Pragmas. Dazu gehören auch PROGMEM, EEMEM, PSTR, ... die die Codeablage regeln (.eeprom, .pgmspace, .bootloader, ...) > Ein Link wäre natürlich das Allerbeste. http://sourceware.org/binutils/docs-2.19/ld/Scripts.html Johann
-
Thread
Library für EA-DOGM Grafikdisplays inkl. Font-Generator
String im Flash und nicht im (meist wertvollen) RAM: [code]lcd_put_string_P(FONT_PROP_16,NORMAL, PSTR("Hallo Welt"));[/code]
lcd_move_xy(0,0); lcd_put_string_P(FONT_FIXED_8, NORMAL, PSTR("Hallo Welt")); } } eigentlich gibt es da nicht all zu viel zum falsch machen oder?
-
Thread
AVR: USART und Strings im RXIE-Modus
string.h> U8 rxpuf[16]; while(USARTBufferOut(rxpuf)) ; if (strncmp_P ( rxpuf, PSTR("$"), 1) == 0) OutChar('O'); [/c] Das mit den Zeigern kann manchmal echt verwirrend sein.
-
Thread
Simpeles Menü - Denkfehler
dem zeigerarray arbeiten und einfach lcd_write_P(text_1); schreiben oder lcd_write_P( PSTR(" blubbblubb") ); typisch für lcd_write ist ja : lcd_write( char *string) { while(*string) lcd_data( *string++); } die P ist etwas anders lcd_write_P(const char *string) {
-
Thread
70000 / 5 = 888
zwei Zahlen vergleichen wollte. z.b. [c] if ( ByteCounter < ( 1024l*1024l ) ) printf_P( PSTR(" %ld kBytes "), ByteCounter / 1024 ); [/c] und [c] if ( ByteCounter < ( 1024*1024 ) ) printf_P( PSTR(" %ld kBytes "), ByteCounter / 1024 ); [/c] Das erste Beispiel geht, das zweite
-
Thread
MinGW Linkerfehler??
HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("hallo"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc
-
Thread
Unerklärlicher Reset, ATmega16
ich hab mir für strings immer die LCD funktionen gleich als lcd_P() gebastelt aufruf dann lcd_P( PSTR("text") ); oder eben über arrays im flash bei sehr vielen menütexten und einen zeiger drauf aber auch hier brauch man fast nur lcd_P ebenso UART_P wenn ich strings verschicken will .. alles
-
Thread
Char innerhalb einer Funktion in PROGMEM ablegen
Habe folgende Lösung implementiert #define lcd_print_p(__s, __a, __b, __c, __d, __e) lcd_print_P(PSTR(__s), __a, __b, __c, __d, __e) void lcd_print_P( const char* pgmString, int x,int y,int size,unsigned char fc,unsigned char bc ) { char string[40]; strcpy_P( string, pgmString ); lcd_print
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
-
Thread
#defines für AT-Befehle
die at+ befehle legt man sich mit PSTR() oder PROGMEM am besten in den flash
-
Thread
Probleme mit printf_P
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));
-
Thread
H-Brücke für Gleichstrommotor 12V / 20A gesucht
L6201PSTR wär ev eine möglichkeit
-
Thread
[AVR-GCC] struct-Initialisierung. PROGMEM und Strings
unuebersichtlich ist. Viel lieber waere mir sowas in der Art: [c] struct foo PROGMEM mystruct = { 42, PSTR("foobar") }; [/c] Leider funktioniert das PSTR-Makro nicht bei Initialisierungen. Hat jemand eine Idee?
-
Thread
Strings im oberen Flash-Bereich (> 64K)
die normalen "_p"-Funktionen sind dann ja nicht anwendbar, bzw. Konstrukte der Art "PutTextOnLCD(PSTR("blablah"));", da ja schon das PSTR-Makro nur bis 64K geht. Ich hatte vor längerer Zeit lange herumgebastelt, um dafür eine Lösung zu finden, und ich fand folgendes heraus: #define PSTRX(s) (_
pgm_read_byte_far(s); .. } // Verwendung: PutTextOnLCD(PSTRX("Hallo!")); Ich hatte also ein eigenes PSTR-Makro gebastelt, das hier PSTRX ("X" für "eXtended") heißt. PSTR und PSTRX machen ja nichts anderes, als daß sie einen String unter einem nach außen unbekannten Namen im Flash ablegen und dessen
-
Thread
LCD Display, komische Ausgabe.
mir trotzdem jemand kurz erklären wie das mit lcd_string funktioniert und was es mit der funktion PSTR() auf sich hat??
lcd_string_P("Scheinleistung "); funktioniert daher auch, und ist das gleiche wie lcd_string(PSTR("Scheinleistung "));
-
Thread
Display mit Touchscreen bei Pollin?
lcd_line(70,35,70,20); lcd_line(21,20,70,20); lcd_gotoxy(28,24); lcd_writestringP(PSTR("Button")); while(!touched()){} lcd_gotoxy(51,50); lcd_writestringP(PSTR("das ist ein Test")); } while(1); return 0; } [/c]
wo ihr den Button gesetzt habt ? Klaus schrieb: > lcd_gotoxy(28,24); > lcd_writestringP(PSTR("Button")); Hier habt ihr doch die Stelle wo der button ist! Also fragt ihr einfach das Touch ab und errechnet dann ob ihr an der Stelle seit wo der button liegt !! greetz. Oliver
-
Thread
Leeren String als Argument übergeben?
die einen Pointer auf char erwartet, einen leeren String ("") zu übergeben? Bsp.: void foo (char *pstr) -> foo (""); Wenn ja, was macht der Compiler daraus? Ist "" eine Konstante mit dem Inhalt '\0'?
einen Pointer auf char erwartet, > einen leeren String ("") zu übergeben? Bsp.: void foo (char *pstr) -> > foo (""); Ja. > Wenn ja, was macht der Compiler daraus? Er übergibt der Funktion die Adresse einer im Speicher stehenden Null. PS: Ich hoffe nur, du denkst nicht, dass man diesen
-
Thread
Die andere Firmware für AVR-NET IO
void init_cmd_livedata( void ) { #if defined(HTTPSERVER_ONEWIRE) cgi_RegisterCGI( cgi_livedata, PSTR("livedata.cgi")); #endif } void cgi_livedata( void * pStruct ) { struct TIME nowtime; int i; char TEMPSTRING[10]="\0"; for ( i = 0 ; i < 1 ; i ++ ) // TEMP_MAX_SENSORS {
1900), correction for unixtime TEMP_Sensor2String(i, TEMPSTRING); printf_P(PSTR("[%lu000,%s]"), nowtime.time, TEMPSTRING); } }[/c]
-
Thread
Viele verschiedene Strings über USART ausgeben
Hallo, danke für Eure Tipps! printf_P(PSTR("Text")); hats gebracht.... :-) Gruß Tido
-
Thread
memcpy_P mega1280 bootloader
Bootloadersektor vom Atmega (0x1E000), setzt memcpy alle bits auf 1. memcpy_P(uip_ethaddr.addr, PSTR("ac:de:48:fd:0f:d0"), 6); Da kommt dann wenn es in der bootloader section steht nurnoch ff:ff:ff:ff:ff:ff raus... im unteren Programmspeicher klappts problemlos. memcpy(uip_ethaddr.addr, "ac:de
-
Thread
Funktionszeiger
do { for( i = 0; i < NrEntries; ++i ) lcd_set_cursor(1,LINE2);lcd_puts_p(small_font,PSTR("MENÜPUNKT 1")); lcd_set_cursor(1,LINE3);lcd_puts_p(small_font,PSTR("MENÜPUNKT 2")); lcd_set_cursor(1,LINE4);lcd_puts_p(small_font,PSTR("MENÜPUNKT 3")); lcd_set_cursor(1,LINE5);lcd_puts_p(small_font,PSTR("MENÜPUNKT 4")); lcd_set_cursor(1,LINE5);lcd_puts_p(small_font,PSTR("Exit - Taster 3")); if(PIND&(1<<PIND2)){Auswahl=1;} if(PIND&(1<<PIND3)){Auswahl=1;} if(PIND&(1<<PIND4))
-
Thread
Langes Programm: Fehlfunktion AVR ATmega32
> Ich habe folgendes Idiom verwendet: > > [pre] > printf( strcpy_P( (char *) &acBuffer[0], PSTR( "Hello !" ))); > [/pre] Häh!? Vielleicht beschreibst du ja mal, was du tun willst... Du suchst nicht etwa einfach nur [c] printf_P(PSTR("Hello!")); [/c] oder?
Ich habe folgendes Idiom verwendet: >> >> [pre] >> printf( strcpy_P( (char *) &acBuffer[0], PSTR( "Hello !" ))); >> [/pre] > > Häh!? ;-) Hallo Jörg! > > Vielleicht beschreibst du ja mal, was du tun willst... > > Du suchst nicht etwa einfach nur > > [c] > printf_P(PSTR("Hello!")
-
Thread
Frage zu Strings/Strukturen im Flash
und die zeiger direkt auf den flash-bereich zeigen. laut den beispielen geht sowas für fkt mit PSTR. aber dieser mechanismus versagt natürlich bei dem o.g. beispiel. ich brauche das, da ich (mal wieder) exzessiv mit dem präprozessor hantiere, der code der ausgespuckt wird aber dafür sorgt das der
-
Thread
Atmel AVR - Migration GCC --> IAR Embedded Workbench --> pgmspace function
*********** *******************************************/ #define USART_puts_P(__s) USART_puts_p(PSTR(__s)) void USART_Transmit( char data ) { // Wait for empty transmit buffer while(!(UCSR0A & (1<<UDRE0))) {} // Put data into buffer, sends the data UDR0 = data; } void USART_puts
-
Thread
Debug-Funktionen wegdefinieren
> oder bei AVR für Text im ROM Oder [c] #if DEBUG # define trace(s,...) printf_P (PSTR(s) , ##z) #else # define trace(...) (void) 0 #endif [/c] Um Warnungen etc zu vermeiden bei [c] if (x) trace (a, b); else ... [/c] Die Leerzeichen um
Johann L. wrote: > # define trace(s,...) printf_P (PSTR(s) , ##z) Lag nahe, funktioniert(e) aber bei C++ nicht. Daher die andere Version.
-
Thread
MCU Parameter aus Makefile als ASCII im Quellcode?
s) #s #define S(s) STRINGIZE(s) #define __MCU__ S(MCU) #define __FCPU__ S(F_CPU) printf_P(PSTR("\r\nMikrocontroller "__MCU__" %u mal progr."), cnt); [/c]
-
Thread
Grafik LCD am PortC geht am Port B nicht! atm8 & KS0108
ks0108ClearScreen(); // Set a position ks0108GotoXY(15,10); // Print some text ks0108Puts_P(PSTR("www.mikrokontroller.net")); // a nice little round rect ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK); }
-
Thread
uC stürzt beu Zugriff auf MMC ab
jeder Text der rechts steht immer noch ein String im RAM und belegt auch ram. strcpy_P(LCD_buffer,PSTR("Hallo Test3")); sollte genau das machen, was du beschreibst. Die beste Lösung wäre aber, die LCD Routinen so umzubauen, dass sie direkt aus dem Flash lesen.