-
Thread
Mithilfe von printf auf UART0 und UART1 Ausgaben machen (LPC2138)
stderr = &lcd_str; fprintf(stderr, "Hello world!\n"); for (;;) { printf_P(PSTR("Enter command: ")); if (fgets(buf, sizeof buf - 1, stdin) == NULL) break; if (tolower(buf[0]) == 'q') break; switch (tolower(buf[0])) { default: printf("Unknown
-
Thread
uart progmem: invalid initialiser
Wenn ich mich richtig erinnere, ist uart_puts_P als Makro definiert und setzt dann irgendwo ein PSTR(x) ein. D.h. du musst in deiner main.c bzw. dort wo du uart_puts_P aufrufst, noch die <avr/progmem.h> includen.
-
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
AVR warum braucht String RAM?
SRAM im m328 weniger weh tut. Aber selten mal ist RAM über und flash wird knapp dann natürlich ohne PSTR("hier ist ein langer Text....")
-
Thread
#defines für AT-Befehle
die at+ befehle legt man sich mit PSTR() oder PROGMEM am besten in den flash
-
Thread
[Glaskugel] Funktionsaufruf lässt Controller hängen
if (leadingZeros) { for (uint8_t i = getDigitCount(value); i < c; i++) lcd_print_P(PSTR("0")); } lcd_print(str); } //- Print string to cursor position void lcd_print(char *string) { while(*string) { lcd_putchar(*string++); } } //- Put char to atctual cursor
-
Thread
timer Probleme ctc OCRA/B
Initialisiert, Pins + timer1 and dann ist folgende Zeile eingefügt worden: [c] for(;;delay(1000)) p0(PSTR("\nMILLIS = "),(word)millis()),nl();[/c] p0 verwendet atoi der AVR lib Delay ist wie folgt definiert: [c] void delay(word ms) { while(ms--) _delay_loop_2(3999); } [/c] Ausserhalb von Timer1
-
Thread
ATtiny2313 verschluckt Zeichen beim Senden
9600 ); //init_i2c(); //sei(); //uart_puts("I2C-Sniffer" LINEFEED); //uart_puts_p(PSTR("This is a test")); uart_putc('1'); uart_putc('2'); uart_putc('3'); uart_putc('4'); uart_putc('5'); uart_putc('6'); uart_putc('7'); uart_putc('8'); uart_putc('9'); uart_putc
-
Thread
3Com 3C509B-TPO REV-A
3Com ? return 3; // no 3com // Produktkennung st = readreg(0x312); printf_P(PSTR("Product ID: %04X\n"), st); if(st != 0x9450) return 4; // no 3c5x9 [/C] Wenn es keine 3com Karte ist... selber Schuld. Und die Product ID: Ich habe hier natürlich auch nicht alle revisionen
-
Thread
AZ antennenrotor-strategie wenn ein sat vorbeifliegt
smallest) { smallest = diffminus; newaz = azminus; } Log::console(PSTR("az: %.0f, az+: %.0f, az-: %.0f, oaz %.0f, diff %.0f, smallest %.0f, newaz %.0f"), azangle, azplus, azminus, oldazangle, diff, smallest, newaz); oldazangle = newaz; // 1.8deg/step, 200
-
Thread
ATMega128 - Ram wird eng.
Strings werden vom Flash ins RAM geladen. Also ins Flash packen (PSTR Macro, pgmspace.h). Erschwert deren Verwendung zwar ungemein, macht aber den Platz frei. Finale Lösung: externes RAM.
-
Thread
Programmierung AVR
schneller lesen kann eh keiner! [c] // irgendwo sprintf_P(&menu[HAUPT_SCREEN][DATE_LINE-1][0], PSTR("%s %2d.%s %4d"), strWochenTagName_kurz(RTC.dow), RTC.day, strMonatsName_kurz( RTC.month ), RTC.year); // wird ins LCD kopiert //------------------------------------- for(uint8_t upd_line=0;
-
Thread
Progmem Funktionen
return strcpy_P((char *)str_FtoR,str); } [/c] weg? aufruf der funktion: [c] strings(PSTR("blabla")); [/c]
-
Thread
Schwer einschätzbarer Fehler(Interrupts?)
uart_putc(ETX); sreg_local = SREG; cli(); N3310_ClearLcd(); N3310_goto(0, 0); N3310_PutStr(PSTR("Temp1")); N3310_goto(42, 0); N3310_PutInt(adc_get(6)); //N3310_goto(42, 12); N3310_PutInt(istTemp); SREG = sreg_local; [/c] N3310 ist ein LCD Display. Der Code Ausschnitt wird alle 250ms durchgeführt
-
Thread
Arduino/C - sprintf_P() - Ersetzender String im Flash
strings im flash gibt es den format string %S, also grosses statt kleines s. Eventuell könnte man PSTR statt F verwenden.
-
Thread
I2C Slave mit dem Attiny 841
TWSSRA = 1<<TWBE; // reset bus error xmit_string(PSTR("BUS ERROR"), 0); } } [/c] Und im Watchdog-Interrupt gibts eins auf die Nuss, wenn I2C zu lange aktiv ist, weil dann der WDT /nicht/ zurückgesetzt wird:
-
Thread
Dummy für __flash bzw PROGMEN
pgm_read_word(a) (*(a)) #define pgm_read_pointer(a) (*(a)) #define constflash const #define PSTR(a) (a) #define strlen_P strlen #define strncpy_P strncpy #define vsnprintf_P vsnprintf #define printf_P printf #define fprintf_P fprintf #define fputs_P fputs
-
Thread
Stirngs auf dem Controller
pdutext,buf); kann man auch so machen if(strlen(buf)<2){ strcpy_P(&pdutext[strlen(pdutext)],PSTR("0")); }else strcpy(&pdutext[strlen(pdutext)],buf); das ist zwar etwas unübersichtlicher.. aber im if verbrauchst du weniger ram (weil direkt aus dem flash kopiert wird.. dann könnte man nun auch
-
Thread
strcmp_P für einzelne chars eines Strings
Der Vergleich kompletter Strings funktioniert, also z.B. folgendes: if (!strcmp_P (stringbuffer, PSTR ("\n\rHallo_alle"))) // funktioniert genauso auch: static char Empfang_test[13] PROGMEM = "\n\rHallo_alle"; if (!strcmp_P (stringbuffer, Empfang_test)) // funktioniert Was _nicht_ funktioniert
-
Thread
Nanoampere LED
erreichen 80% Wirkungsgrad und teilweise noch etwas mehr. Bei 1µA und 2,7V macht es Pel 2,7µW und ~2,2µW Pstr. Bei 470nm entspricht es 1,5*10^-4 Lumen. Dumm nur, dass man wahrscheinlich keine schwachen LEDs finden wird, die diese Wirkungsgrade haben, weil so gut sind nur die besten blauen Hochleistungs-LEDs
-
Thread
Viele verschiedene Strings über USART ausgeben
Hallo, danke für Eure Tipps! printf_P(PSTR("Text")); hats gebracht.... :-) Gruß Tido
-
Thread
AVR-GCC: snprintf_PF
zu "strlen_PF" oder "strcpy_PF" usw, daß soetwas ohne Klimmzüge geht: [c] snprintf_PF(strOut,21,PSTR("key_val=%6i"),time); [/c] Viele Grüße Nicolas
-
Thread
uAC Consolenfunktionalität
String "%s" arbeiten, aber es ist einfacher nur uac_printf (textimram) anzugeben als uac_printf (PSTR ("%s"), textimram).
-
Thread
unterschied fprintf_p und fprintf
es sich wirklich um einen im ROM stehenden String handelt. Dies erledigt beispielsweise das Macro PSTR(). Der String wird dann auch nicht ins RAM kopiert. Er ist jedoch mit normalen C-Befehlen (Arrayzugrif etc.) nicht ohne weiteres ansprechbar, da diese auf die entsprechende Stelle im RAM zugreifen
-
Thread
Commando aus String suchen..
con_hell_stat(true); } else { sprintf_P(s_out_str, PSTR("hellxx (%d)-(%d)"), MIN_BL, MAX_BL); Serial.println(s_out_str); // 30.608 Bytes } } // if( !strcmp(serial_in_command, "hell??") ) memset(&serial_in_command
-
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
Wie kann ich diesen String über überprüfen?
== 0 ) { // mach was } oder: #include <avr/pgmspace.h> //... if ( strncmp_P( UBefehl, PSTR("REV:"), 4 ) == 0 ) { // mach was } Weiteres zu strncmp(_P) siehe avr-libc Dokumentation. Martin Thomas
-
Thread
ulrichradig.de 's LCD Code und 16x2 LCD
extern void lcd_print_str (char *Buffer); #define lcd_print(a,b,format, args...) lcd_print_P(a,b,PSTR(format) , ## args) //LCD_D0 - LCD_D3 connect to GND //Im 4Bit Mode LCD_D4-->PORTx.0 ........ LCD_D7-->PORTx.3 //LCD_RS --> PORTx.4 | LCD_RW --> PORTx.5 | LCD_E --> PORTx.6 | PORTx.7-->NotConnect
-
Thread
Problem mit SDCC
*buf) { int i; sscanf_flash (buf, FLASH_STR ("%i"), &i); return i; }[/c] Das PSTR aus avr/pgmspace.h verwendet PROGMEM, das formal im Generic Space liegt. Daher wird auch ein eigenes FLASH_STR verwendet, das in __flash allokiert, so dass -Waddr-space-convert keine Warnung wirft.
-
Thread
__flash Variable als Parameter
von PROGMEM nach __flash umschreiben will. I.d.R. bekommt man zu viele Warnungen, zum Beispiel für PSTR, das ja formal immer noch im Address-Space "generic" liegt.
-
Thread
eeprom_write_block und Fleury urat lib Problem
pgmspace.h> #include <avr/eeprom.h> #include "uart.h" #define PRINT(string, ...) printf_P(PSTR(string), ##__VA_ARGS__) uint8_t Vdata[3]; uint8_t eedata[] EEMEM = { 18, 3, 72 }; int putchar__(char c, FILE *stream) { uart_putc(c); return 0; } FILE mystdout = FDEV_SETUP_STREAM(putchar
-
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
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
Wie String in PROGMEM mit printf ausgeben?
Format-String handelt sondern eben um einen Parameter hierfür. Ich stelle mir sowas wie: printf_P(PSTR("Das ist der String im ProgMem: %S\r\n"),ProgMemString); vor. Also z.B. ein spezieller Formatbezeichner. Besten Dank im Voraus!
-
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
Nokia 6100 Display Atmel Mega8
sorry muß heisen: glcdPrint("Dein Text hier", 0) für RAM, und glcdPrint(PSTR("Dein Text hier"), 1) für FLASH. Gruß Hagen
-
Thread
RS485 von ms - immer noch Einschaltprobleme
dass am Log genau abgelesen werden kann, welche Codeabschnitte warum durchlaufen wurden. Benutze PSTR, PROGMEM und die _P Funktionen um RAM zu sparen. Wenn die Strings nicht in den Flash Speicher passen, dann musst du dich Schrittweise an den Kern des Problems heran tasten, anstatt alle Debug Meldungen
-
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
AVR: Endlosschleife erkennen
) { return; } i++; if(i == 0) a++; if(a == 0) { uart_putstring(PSTR("ardy assert fehler: "),false); uart_putw_dec(err); } } while ( true ); } [/c] "err" wird vom Hauptprogramm mitgegeben und gibt mir einen Hinweis auf die Codestelle im Hauptprogramm
-
Thread
AVR Tutorial Frage: Lesen vom Flash
string_im_ram gleich "Hallo Welt" ist. */ oder wenn true bleiben soll return !strcmp_P (string_im_ram, PSTR ("Hallo Welt")); dann können die von mir/dir engefügten Kommentare auch raus Die nachfolgende Funktion liefert 0 zurück, wenn string_im_ram gleich "Hallo Welt" ist. Mit strcmp (String Compare)
-
Thread
LCD-Ansteurung
Hauptprogramm: [c] int main(void) { LCD_init(LCD_2_LINES+LCD_5x8_FONT); LCD_write_P(PSTR("Hallo")); LCD_command(LCD_SET_DDRAM_ADDRESS+0x40); LCD_write("Quentin"); } [/c]
-
Thread
Mehrfache if.Verkleinern
s" #define PAR_FMT "%" STR(PAR_SIZE) "s" // .. cmd_data.args = sscanf_P(buf, PSTR(CMD_FMT PAR_FMT "%g"), cmd_data.cmd, cmd_data.par, &cmd_data.val); [/c] sscanf sieht zwar eleganter aus gegenüber strtok, erfordert aber deutlich mehr Gehirnschmalz, um es auch sicher zu machen.
-
Thread
Vektor speichern
int millisec); void OSCCAL_calibration(void); int main(void) { PGM_P statetext = PSTR("KRAIS_SAEGER"); uint8_t input, buttons; uint8_t last_buttons = KEY_NULL; uint8_t vektor[20]; Initialization(); timer0_init() ;//10ms der schritt sei(); for (;;)
-
Thread
Strings ins Progmem und nicht ins SRAM
Oh ja. PSTR ist die Lösung. Wer lesen kann ist klar im Vorteil
-
Thread
avrgcc: verteilte Array-Initialisierung
anschauen, was für ein Bohei vor jedem Aufruf veranstaltet wird. [c] cmd_data.args = sscanf_P(buf, PSTR(CMD_FMT CMD_FMT "%g"), cmd_data.cmd, cmd_data.par, &cmd_data.val); 4890: 2e e6 ldi r18, 0x6E ; 110 4892: 3c e0 ldi r19, 0x0C ; 12 4894
-
Thread
WinAVR hilfe zu \r\n und Optimierung
eben an \r nicht automatisch ein \n angehangen wird. Also noch einmal: [c] while(1) { puts_P(PSTR("\r\nAVR>")); get_command(&cmds, &cmdl); cmdp = cmds; switch(*cmdp++) ... } Die Zeile puts_P(...) gibt das besagte AVR> aus. Die Absicht dahinter ist, dass man bei den ganzen Kommandos und deren
-
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
Speicher erweitern AT-MEGA
Da werden Sie geholfen... Ich verwende den GCC (glatt vergessen anzugeben). Das Macro PSTR("Das ist der Teststring") legt den String im Programmspeicher ab. Dann gibt es in der LIB alle üblichen string-Funktionen (pgmspace.h) mit der Endung _P für den Programmspeicher, beispielsweise die
-
Thread
strncmp_P <-> memcpy
Hallo zusammen, was ist der unterschied zwischen dem Aufruf if (strncmp_P(File_Name,PSTR("cam.jpg"),7) == 0) und if ( memcmp(File_Name, "cam.jpg",7) == 0)
-
Thread
Probleme mit Schleifen
1,1); } } while(1) { //Headline DrawCenteredText (0, PSTR("Minesweeper")); //Markieren if ((get_button(GREEN)==1) && (markierer[x][y]==0) && (flag==0) && (selected[x][y]==0)) { flag=1; markierer