ganz intuitiv ohne große Tests: müsste es nicht auch so gehen? bef_struct bef_tab[] = { {PSTR("led"), led}, {PSTR("?"), help}, {PSTR(""), NULL} Um Antwort eines wissenden wird gebenten!!!
die oben genannte parat gehabt (was soviel heisst wie: es gibt keine andere). Bei Verwendung von PSTR kommen u.a. folgende Fehler: test.c:299: error: braced-group within expression allowed only inside a function test.c:299: error: initializer element is not constant Ohne PSTR und PROGMEM direkt
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)
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
lcd_ausgabe(1,ausgabetext); _delay_s(1); lcd_ausgabe(2,Text); _delay_s(1); strcpy_P(ausgabetext,PSTR("blubb")); lcd_ausgabe(1,ausgabetext); _delay_s(1); lcd_ausgabe(2,PSTR("blubbb")); _delay_s(1); lcd_ausgabe(2,"blubbb"); while (1) //Endlosschleife, damit das Programm nicht beendet
(c); } }/* lcd_puts_p */ [/c] lcd.h: [c] #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) [/c] Das benutze ich so: [c] lcd_puts_P("TESTSTRING"); [/c] Bei Fragen nochmal fragen
folgendes: In der while Schleife: [C] ... getDirEntry(0, c++, &dir, 1); uart_puts(PSTR("\n\ngetDataDir: \"")); uart_puts_R(dir.Name); uart_puts(PSTR("\"")); } [/C] Und dann zählst du in der Ausgabe mal wieviele Leerzeichen hinter dem in dir.Name enthaltenem String
erst mal weitere fehler geben. Bei mir hört es früher schon auf und zwar hier: printf_P(PSTR("Phase 3\n")); // Erst mal warten, nic initialisiert sich delay(100); printf_P(PSTR("Phase 4\n")); // Aktivierungssequenz schicken activate_3c5x9_nic(); printf_P(PSTR("Phase 5\n")); // read the mac address of this card from eeprom address 10,11, and 12 st = readLoop(10); printf_P(PSTR("node %02X-"),st); // Every nic i have seen has "00" in the
(PSTR(" ")); uart_puts_p(PSTR("Pot location for 300mA = ")); print16(voltage_300); uart_putsl_p(PSTR(" ")); uart_puts_p(PSTR("Setpoint for 300mA = ")); print16(pwm_300); uart_putsl_p(PSTR("----------------------------")); uart_putsl_p(PSTR(" ")); uart_putsl_p(PSTR(" ")); b = 0; uart_putsl_p(PSTR("Pot linearity check")); uart_putsl_p(PSTR("Move the POT and check the current on the meter")); uart_putsl_p(PSTR("Press <N> to continue"));
komisches Problem beim Programmieren meines atmega32. Wenn ich eine bestimmte Anzahl an Strings mit dem PSTR() Makro in den Flashspeicher lade, startet der AVR beim Ausgeben des letzten Strings neu. Das ist reproduzierbar, also wenn ich einen String auskommentiere kann ich dafür einen neuen Einfügen. So habe
Grafikeinheit und MMC-Reader) eh abbricht. Auf jeden Fall ist es einfach so dass anscheinend zu viele dieser PSTR() strings vorhanden sind. Hat jemand Erfahrungen mit diesem Problem?
*/ cli(); memcpy(timedate,TimeDate,sizeof(timedate)); SREG=sreg; fprintf_P(&DevLCD,PSTR("%02u:%02u %02u.%02u.%02u"), timedate[0],timedate[1],timedate[2],timedate[3],timedate[4]); ... } Wahrscheinlich erscheinen die Warnungen im Zusammenhang mit der Verwendung von Zeigern
(oder _P) versehen sind. Von einigen Bibliotheken werden Makros definiert, die "automatisch" ein PSTR bei Verwendung einer Funktion einfügen. Ein Blick in den Header-File der Bibliothek zeigt, ob dies der Fall ist. Ein Beispiel aus P. Fleurys lcd-Library: // Ausschnitt aus dem Header-File lcd.h der
PRG RDB(addr) pgm read byte(addr) Deprecated: Use pgm read byte() in new programs. 5.5.2.10 #define PSTR(s) ({static char c[] PROGMEM = (s); c;}) Used to declare a static pointer to a string in program space. 5.5.3 Function Documentation 5.5.3.1 void ∗ memcpy P (void ∗ dest, PGM VOID P src, size t n) The
abzulegen. Alle anderen Methoden wie prog_char etc. haben // irgendwo einen Hund drin. char *ps1 = PSTR("Messung %5u: %3u (%5u)\r"); char *ps2 = PSTR("Zu hoch\r"); register WORD k, kOld; /* UART Control Register laden. Wir verwenden (noch) keine Interrupts. Vorerst wollen wir nur mal senden, also wird
character string in the program memory. Version1: • The creation of a character string: Char *LINE1 = PSTR(„The first line of my LCD display“); This definition files the sentence in the program memory and leads the pointer back, that points to the first sign of the character string. • The reading of a sign
character string in the program memory. Version1: • The creation of a character string: Char *LINE1 = PSTR(„The first line of my LCD display“); This definition files the sentence in the program memory and leads the pointer back, that points to the first sign of the character string. • The reading of a sign
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.
MyString[] = PROGMEM "Hello World!\n\r" //String im Flash // oder direkt als Parameter mit dem PSTR() Macro sendString_P(PSTR("Ich komm aus dem Flash!\n\r")); // im FLASH //--------------------------------------------------------- // Für Strings im FLASH braucht es eigene Funktionen // für