-
Thread
LCD Display funktioniert nicht
automatically storing string constant in program memory */ #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) /*@}*/ #endif //LCD_H [/C]
-
Thread
Probleme mit AVR ADC
verwendet wird. In meinem main habe ich folgendes: [c] if (strncmp_P((const char*) uart_rx_buf, PSTR("meas_bg\n"), 8) == 0) { get_adc_val(30); printf_P(PSTR("BG = %d\n"), get_adc_val(30)); } [/c] Laut datasheet sollte kanal 30 ja die interne BG Spannung von 1,1 V sein (Seite 288)...
-
Thread
ADC-Wert nicht linear beim Einlesen
readADCWert (0); // ADC-Wert einlesen // ADC-Wert ausgeben lcd_setcursor(0,0); lcd_string_P(PSTR("ADC-Wert:")); utoa( ADCWert, buffer, 10); lcd_string( buffer ); } } void init_ports(void) { // Port B ungenutzt DDRB = 0x00; PORTB = 0xFF; // alle Pullups ein
-
Thread
I2C Puffer enthält falsche Werte
Index send buffer to next row if(i == SENDBUFFER-1) { uart_puts_p(PSTR("! Send buffer overloadet\n")); ieCntN = SENDBUFFER; //Not possible to recive instruction at the moment, leave } } } } } ie = ie+6; //Index recive
-
Thread
C++ char members in Progmem?
sollte ja das klappen: const __flash char* _label; public: Item(const char* label) : _label(PSTR(label)) { } }; [/c]
das klappen: > const __flash char* _label; > > public: > Item(const char* label) : _label(PSTR(label)) > { > } > }; Auf einem AVR wird das aber so nicht wirklich was. Das PSTR Makro wird vom Aufrufer benutzt um den String ins Flash zu verlagern. Deine Klasse hat einen ganz banalen Pointer
-
Thread
[C & µC] Verwendet ihr printf/scanf?
uart_stdio); stdout = &uart_stdio; printf("Hallo Welt aus dem RAM an stdout!\r\n"); printf_P(PSTR("Hallo Welt aus dem Flash an stdout!\r\n")); fprintf(&uart_stdio, "Hallo Welt an UART!\r\n"); }[/c] Die Standard-IO-Funktionen kümmern sich also darum, dass die zu FILE passende Funktion aufgerufen
-
Thread
Funktion mehrfach aufgerufen geht nicht mehr.
) { memm2old=memm2; LichtDimmenAn (PSTR("88|15|05|%1i\n"),PSTR("89|15|05|01\n"),PSTR("98|15|05|%1i\n\r"),memm2 ); } } [/c]
(PSTR("88|15|05|%1i\n"),PSTR("89|15|05|01\n"),PSTR("98|15|05|%1i\n\r"),memm2 ); } [/c] Die "---0---" oder "---8---" ommt wie zu Erwarten nur bei steigender und fallender Flanke. Ich weiss nicht
-
Thread
GCC ARM: Problem mit "\n" am Stringende
folgende Verschachtelung der Aufrufe main.c: printf("\nHallo\n") => puts(const char *pStr) => pStr @ 0x8002bb4 => "\nHallo\0" (ohne \n) printf.c: puts() => fputs(pStr, stdout) printf.c: fputs(const char *pStr, FILE *pStream) => fputc(*pStr, pStream) printf.c: fputc(signed int c, FILE *pStream
> main.c: printf("\nHallo\n") => puts(const char *pStr) > => pStr @ 0x8002bb4 => "\nHallo\0" (ohne \n) > > printf.c: puts() => fputs(pStr, stdout) Dann lass doch mal dein puts aus printf.c ansehen! Dort muss nach dem String noch ein \n ausgegeben werden.
-
Thread
Rückgabewert funktioniert nicht richtig.
Eingang[0] && licht_status[12]){ test23= TasterDimmenAufAb (Eingang[0], 12); LichtDimmenAn (PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r"),test23 ); } [/c] wird die Ausgabe, auch wenn Eingang[0] immmer da ist, nicht hochgezählt. Mache ich die Funktion ohne Rückgabewert
Wie kriege ich das mit Rückgabewert hin? Mit Rückgabewert bin ich flexibler, da dieser Part "(PSTR("88|11|05|%1i\n"),PSTR("89|11|05|01\n"),PSTR("98|11|05|%1i\n\r").... );" immer anders ist! Danke
-
Thread
string oder int an Display ausgeben
gebracht. Einfache Textausgaben wie etwa: [c] lcd_set_cursor(75,LINE0); lcd_puts_p(med_font,PSTR("Hauptmenu")); [/c] geht schon ganz gut. Doch was ich nicht verstehe, bzw. wie kann ich eine String Variable oder int Variable aus geben. Wenn ich z.B. folgendes mache: [c] int count;
-
Thread
LC 7981 Grafikdysplay Ansteuerung
PSTR() und PROGMEM sind wohl auch nicht so angebracht. Da fehlt allerdings noch einiges! (diverse Header-Dateien, LCD-Routinen)
-
Thread
uIP+httpd+Daten zum Webserver senden
,&ee_net_mask,4); eeprom_write_block (_gateway, &ee_gateway, 4); PSOCK_SEND_PSTR(&s->sout,PSTR("<b>Parameters Accepted, cycle power to make active!</b>")); } else { PSOCK_SEND_PSTR(&s->sout,PSTR("<b>Parameters incorrect!</b>")); } } _enable_dhcp=eeprom_read_byte
(&s->sout,PSTR("\"></td></tr>\ <tr><td>DHCP:</td><td><input type=\"checkbox\" name=\"dhcp\" value=\"1\"")); if(_enable_dhcp) PSOCK_SEND_PSTR(&s->sout,PSTR("CHECKED")); PSOCK_SEND_PSTR(&s->sout,PSTR
-
Thread
ARM: kompliziert?
paar Eigenheiten der Controller einzustellen ist nun wirklich nicht so schwer. Immer noch besser als PSTR-Orgie beim avr.
-
Thread
China SUPER Bauteile-Schnäppchen Thread
identifier = LCD_readRegister(LCD_R_DRIVERCODE); if(identifier == 0x9325) { Serial.println(PSTR("Found ILI9325 LCD driver")); } else if(identifier == 0x9328) { Serial.println(PSTR("Found ILI9328 LCD driver")); } else if(identifier == 0x7575) { Serial.println(PSTR("Found HX8347G LCD driver")); } else { Serial.print(PSTR("Unknown LCD driver chip: ")); Serial.println(identifier, HEX); } [/c] Nur zur Info: Das LCD meldet sich als _ILI9325_ . http://www.adafruit.com/datasheets/ILI9325.pdf
-
Thread
STK500 Serial Port String senden
usart_init ( MYUBRR ); // dump some strings to the screen at power on usart_pstr("Ready to rock and roll!\n\r"); usart_pstr("Type in a character, and I will transpose it up by 1:\n\r"); // main loop while(true) { // if a key has been pressed, then process
unsigned char b; b=0; if(UCSRA & (1<<RXC)) b=1; return b; } void usart_pstr(char *s) { // loop through entire string while (*s) { usart_putchar(*s); s++; } } [/c]
-
Thread
Fliesskomma ARM7 GCC
short i=65; float f; f=i*1.23; sprintf (str, "Aktueller ADC-Wert: %d %f\r\n", i, f); DbguPStr(str); Ich glaube, es liegt am makefile. Habe in google etwas über mfloat-abi gelesen, aber nicht verstanden, wo das hin soll. Weiss da jemand Rat? Danke Hannes
(); f=i*1.23; sprintf (str, "Aktueller ADC-Wert: %d %f\r\n", i, f); DbguPStr(str); } }
-
Thread
HTML teil des inhalts eines iframes auslesen
EtherShield es=EtherShield(); uint16_t http200ok(void) { return(es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"))); } uint16_t http404(void) { return(es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 404 OK\r\nContent-Type: text/html\r\
schrieb im Beitrag #2767667: > uint16_t http200ok(void) > { > return(es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"))); > } Also: [c] HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\nAccess-Control-Allow-Origin: *\r\
-
Thread
Array-Speicher nach LCD-Ausgabe wieder freigeben
dass es einen Pointer ins Flash erwartet, muss es an dieser Stelle heißen [C] DOG_writetext( PSTR("Start: kurz dr."), 1, 0 ); [/C] Dann verfrachtet der Compiler den Text auch ins Flash und er belegt KEINEN Platz mehr im SRAM dafür. Man muss also wissen, welchen Pointer eine FUnktion jeweils
sendbyte( c ); } } ... // Strings aus dem Flash heraus ausgeben DOG_writetext_p( PSTR("*BOS08E-Konfig.*"), 0, 0 ); DOG_writetext_p( PSTR("Start: kurz dr."), 1, 0 ); DOG_writetext_p( PSTR("Konfig: lang dr."), 2, 0 ); // Strings aus dem SRAM heraus ausgeben DOG_writetext
-
Thread
AVR strings im flash mit progmem, direkt als argumente an funktionen?
Siehe PSTR in der AVR-Libc
4.7: [c] #include <avr/pgmspace.h> const char * volatile p; int main (void) { p = PSTR ("Hallo"); p = PSTR ("nochmal Hallo"); return 0; }[/c] mit -Os -fmerge-all-constants wird daraus: [avrasm] main: ldi r24,lo8(__c.1515) ldi r25,hi8(__c.1515) sts p+1,r25
-
Thread
Arduino ethernet enc28j60 Hintergrundbild
ist das natürlich nicht so einfach. Aber versuch doch mal statt: es.ES_fill_tcp_data_p(buf,plen,PSTR("<html><head><title>Arduino</ti tle></head><body>\n")); einfach: es.ES_fill_tcp_data_p(buf,plen,PSTR("<html><head><title>Arduino</ti tle></head><body background="http://www.mikrocontroller.net
Sorry, nochmal: [code] es.ES_fill_tcp_data_p(buf,plen,PSTR("<html><head><title>Arduino</ti tle></head><body background="http://www.mikrocontroller.net/images/bg.png">\n")); [/code]
-
Thread
ADC mit ATmega8A
..^^ Mag er aber iwi nicht... undefined reference to 'uart_init' undefined reference to 'PSTR' undefined reference to 'uart_puts_p'
-
Thread
Lookupstr - Bascom
9600 Dim Strtxt As String * 20 Dim Strtxtbytes(21) As Byte At Strtxt Overlay Declare Sub Slooku pstr(byval Bytpos As Byte , Byref Strtxtbytes(1) As Byte , Byval Bytlen As Byte ) Call Slookupstr(2 , Strtxtbytes(1) , 10) '10 Zeichen Print Strtxt Call Slookupstr(3 , Strtxtbytes(1) , 20) '20 Zeichen
-
Thread
Software-Datenflusssteurung über RS232
* pucCh = &pcStrOrder[ strlen(pcStrOrder) ]; strcpy(gcaStr, pcStrOrder); strcpy_P(gcaNumStr, PSTR(",")); //HILFSWEISE gcaNumStr für "," if( (pStrTok = strtok_r( pcStrOrder, gcaNumStr , &pucCh)) != NULL)//Trenne CMD, von ID, -"$$$1,CMD { strcpy(gsCmd.ucaCmd, pStrTok); } else {
Und dann TO Float }; }; --------------- Befehlsliste if( !strcasecmp_P( gsCmd.ucaCmd, PSTR("PING")) ) { Print_PStrCR( PSTR("PONG") ); return; }; -----
-
Thread
Funktion wird nicht ausgeführt mit Ausgabe auf LCD
Kleiner Korrekturvorschlag: lcd_puts_P( PSTR("String") ); http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga05ca900ebf7cd121be73c654d9ccb3eb
Krapao schrieb im Beitrag #2719316: > Kleiner Korrekturvorschlag: > lcd_puts_P( PSTR("String") ); > http://www.nongnu.org/avr-libc/user-manual/group__... Hast bestimmt recht, allerdings läufts bei mir auch ohne PSTR ausm Flash. Keine Ahnung warum, habe Peter Fleury aber auch erst
-
Thread
ihex vs binary unterschiedlicher Code
[1], dns_server_ip[2], dns_server_ip[3]); #define usart_write(format, args...) usart_write_P(PSTR(format) , ## args) void usart_write_P(const char *Buffer,...){ va_list ap; va_start (ap, Buffer); int format_flag; char str_buffer[10]; char str_null_buffer[10]; char move
ist ein [c] usart_write_char("Test"); [/c] kommt vollständig an aber ein [c] usart_write_P(PSTR(format) , ## args) [/c] nur verstümmelt. Es fehlen die ersten chars. Ich werde mal versuchen das auf einen Atmega64 zu testen. Aber wie Jörg schon sagte sind beide Files gleich. @Jörg Wie
-
Thread
Avr Studio 6 - prog_char Fehlermeldung
1 unknown type name 'prog_char' In der entsprechende Zeile steht: DisplayStr(const prog_char* pstr); und diese Datei ist eingebunden #include <avr/pgmspace.h> In der pgmspace.h ist das prog_char auch enthalten. Weiß jemand, wieso das AVR Studio 6 mit einmal darüber stolpert und wie ich es zum
-
Thread
scanf_p unsigned char / Einlesen von Werten 0-255
einlesen? Ich habe es bisher nur für char Werte geschafft. uint8_t temp2[MESSAGE_LENGTH]; scanf_P(PSTR("%s"),&temp2); Ich möchte Nachrichten nicht im Klartext übertragen, sondern den vollen Zahlenvorrat nutzen. Eine Nachricht wie z.B. FF FF FA soll auch so in temp2 abgelegt werden. Kontroller:
Sebastian W. schrieb im Beitrag #2678779: > uint8_t temp2[MESSAGE_LENGTH]; > scanf_P(PSTR("%s"),&temp2); > > Ich möchte Nachrichten nicht im Klartext übertragen, sondern den vollen > Zahlenvorrat nutzen. Eine Nachricht wie z.B. FF FF FA soll auch so in > temp2 abgelegt werden.