-
Thread
GCC, WinAVR, AVR-Studio 4.18: String im Flashspeicher
Hallo Gerd. Ich denke du suchst nach dem, was PSTR() tut. Siehe http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga05ca900ebf7cd121be73c654d9ccb3eb Aber Achtung, die Verwendung klappt nur in den oberen 64K des Flashs zuverlaessig
#define F PSTR
-
Thread
String im Flash speichern
AVR? [C] snprintf_P( tempstr, BUFFER_SIZE-1, PSTR("Receive %d voltage of channel 0"), Voltages[0]); [/C] http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Strings_lesen http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Vereinfachung_f.C3
entsteht, wenn das dritte Argument ein Define-String ist. snprintf_P( tempstr, BUFFER_SIZE-1, PSTR("Receive %d voltage of channel 0"), G_ERROR); #define G_ERROR "undefined channel"
-
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
Kritischen Pfad für den Datenspeicher herausfinden?
kopiert. Schreib die Funktion als lcd_string(const __flash char *) und ruf sie mit lcd_string(PSTR("123456789")) auf. Nun bleibt der String im Flash und braucht kein RAM.
Bibliothek Funktionen anbietet, die direkt aus dem Programmspeicher lesen. ( meist sb lcd_stringP( PSTR("Hallo"));) Gruß Roland
-
Thread
Anzahl der zeichen in String angeben Printf %S
Sooo.. SR ist der string wo ich nur 4 Zeichen ausgeben möchte.. printf_P(PSTR("%-2d %s %-7lu %-2.1f %s %d\r"), address, NA_STRING, system_GetSerialNumber() == 0xFFFFFFFF ? 0 : system_GetSerialNumber(), system_GetHardwareRevision(),
, GetTotalNumberOfErrors()); Mein Ansatz war jetzt: char shortSR[4] = SR; printf_P(PSTR("%-2d %s %-7lu %-2.1f %s %d\r"), address, NA_STRING, system_GetSerialNumber() == 0xFFFFFFFF ? 0 : system_GetSerialNumber(), system_GetHardwareRevision(),
-
Thread
" in String Konstante verwenden? Gesperrt
angeben, wie stellt man das an weil es sind ja gleichzeitig die "Begrenzer"? strcpy_P(buf_main, PSTR("Das ist "der" Test...")); Danke für jeden Hinweis. Grüße AVRli...
strcpy_P(buf_main, PSTR("Das ist \"der\" Test..."));
-
Thread
Frage zur verwendung von strncat
5 ; i++ ) { { strncat(S2, S1[i], 24); /* the next word attach the rear */ strncat_P(S2, PSTR(" "), 24); /* insert space*/ } } ich möchte , dass S2 so aussieht: FF AA BB CC danke
+ ) > { { > strncat(S2, S1[i], 24); /* the next word attach the rear */ > strncat_P(S2, PSTR(" "), 24); /* insert space*/ > } > } > ich möchte , dass S2 so aussieht: FF AA BB CC In Textform oder sollen ersten 4 Bytes von S2 so aussehen? du musst erst mal damit anfangen zwischen
-
Thread
Aus '\n' wird '\0'
CooCox bei. Und so sieht sie aus: [c] /** * @brief Outputs a string on stdout. * * @param pStr String to output. */ signed int puts(const char *pStr) { return fputs(pStr, stdout); } /** * @brief Implementation of fputs using the DBGU as the standard output. Required * for printf(). * * @param pStr String to write. * @param pStream Output stream. * * @return Number of characters written if successful, or -1 if the output * stream is not stdout or stderr. */ signed int
-
Thread
zu wenig RAM ?
#include <avr/pgmspace.h> Statt sprintf() nimmst du dann sprintf_P() sprintf_P(zeit,PSTR("%2i.%2i.%2i %2i:%2i:%2i\t"),y,m,d,h,min,sek); Texte dann mit PSTR("text") umgeben.
-
Thread
Variablen uint16_t hat falsche Werte
sind da nunmal begrenzt. Also Strings kurz halten und brav im Flash liegen lassen via PROGMEM bzw. PSTR
Beitrag #3129795: > Also Strings kurz halten und > brav im Flash liegen lassen via PROGMEM bzw. PSTR ... oder die ganze Sache noch etwas intelligenter (und fauler :-) angehen. [C] void printStars( uint8_t number ) { uint8_t i; for( i = 0; i < number; i++ ) uart_putc( '*' ); }
-
Thread
Flash Speicher wird eng HILFE?
Hi, ich verwende hier ein [c] lcd_puttext(strcpy_P(string20, PSTR("Hello world !"))); [/c] Welches nur Flash-Platz benötigt. Der string20 ist ein "Unversalstring", den ich nach Bedarf nutze ... Damit habe ich gute Erfahrungen gemacht ... Gruß Andreas
lcd_puts_S(prog_char *)" gleichzeitig zur Verfügung zu haben, dann entfällt z.B. bei [c]lcd_puts_S(PSTR("blub"))[/c] die Initialisierung des Strings im RAM. Das wirkt sich üblicherweise positiv auf den RAM- und den Flash-Verbrauch aus. Vierter Punkt: Solche unnötigen Animationen sind doch einfach
-
Thread
gcc gibt Fehlermeldung, auf anderem PC nicht
initialisiert sein */ fdevopen(Send_char_via_USART, NULL, 0); /* string aus dem FLASH */ printf_P ( PSTR("-----------------------------------------\r\n")) ; printf_P ( PSTR( "* START * " __DATE__" " __TIME__ "\r\n")) ; /* HAUPTSCHLEIFE: Run forever */ for (;;) { } /* Ende for (;;) */
-
Thread
Empfangenen asci string als c-code ausführen
zuweisen. Also etwas so [c] char *left, *right; parseInput(&left, &right); if(strcmp_P(left, PSTR("period")) == 0) period = atoi(right); else if(strcmp_P(left, PSTR("andereVariable")) == 0) andereVariable = atoi(right); else uart_puts("Fehler: Variable nicht vorhanden!\n"); [/c
-
Thread
ks0108-atmega32
ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(15,10); // Print some text ks0108Puts_P(PSTR("KS0108-Treiber")); // a nice little round rect ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK); // Once again :) // Select a font ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(5,30); // Print some text ks0108Puts_P(PSTR("http://www.apetech.de\nmailto:me@apetech.de")); while(1); } auf dem datenblatt ist das lcd mit dem lpt verbunden und dabei ist reset fest auf 5V, das wäre dann doch quasi activ high, oder?
-
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.
-
Thread
flash struct mit flash string pointern auslesen
geschoben wird b) Der ganze Ausdruck als die Adresse von "c-im_Flash" evaluiert. Sieh dir an, wie zb PSTR in pgmspace.h definiert ist. [C] # define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];})) [/C] da muss schon etwas mehr Aufwand getrieben werden, um etwas inline ins Flash zu
String angelegt! Das müsste doch dann [C] const ST_BYTE_RESLV g_stCmdBase[] PROGMEM = { { PSTR( "+" ), GSM_CmdExt0 }, [/C] lauten. Also einen String, statt einem einzelnen Character.
-
Thread
string an Funktion übergeben - Problem Speicherverbrauch RAM
welchen Speicher er zeigt. Normalerweise geht man vom RAM aus. Sparen kann man so: [c] puts_P(PSTR("Hallo")); [/c] PSTR sagt dem Compiler, dass dieser String NICHT ins RAM kopiert werden soll. Da puts jedoch nicht aus dem Programmspeicher lesen kann (da er über andere Maschinen-Befehle angesprochen
-
Thread
UART Problem mit Fleury Lib
stehen: [c] /* * Transmit string from program memory to UART */ uart_puts_P(PSTR ("String stored in FLASH\n")); [/c] ^^^^^^ ^ Gruß Carsten
stehen: Tut er. uart_puts_P ist bei Fleury ein Makro #define uart_puts_P(x) uart_puts_p( PSTR(x) )
-
Thread
AVR startet neu beim Lesen von Strings im Flashspeicher
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?
-
Thread
Wie Strings aus dem PROGMEM holen
mit kleinem p) übergeben wird. Gemacht ist es so [C] #define LCD_printf_P(x) LCD_printf_p( PSTR(x) ) [/C] Das PSTR Makro sorgt dafür, dass der konstante Text im Flash bleibt.
-
Thread
AtMega ehwiges Fuse Thema 16 Mhz Quarz
automatically put a string constant into program memory */ #define uart1_puts_P(__s) uart1_puts_p(PSTR(__s)) /**@}*/ #endif // UART_H [/code] gruß daniel
im RAM. Du kannst mit der Lib aber auch Texte aus dem Flash ausgeben. Das sollte mit uart1_puts_p(PSTR("STRING IM FLASH")) gehen. cu Georg
-
Thread
AVR Flash jenseits der 64kB
wieder Inline-Assembler Makros. Richtig? Nö, eigentlich nicht. Außer du brauchst Äquivalente zu PSTR bzw. FSTR. Die __flashN und __memx Adressen können alle via __memx zugegriffen werden, und __memx verdaut auch RAM-Adressen, ist allerdings aufwändiger mit seinen 3-Byte Adressen. Eine Linkerskipt-Erweiterung
Inline-Assembler Makros. Richtig? > > Nö, eigentlich nicht. Außer du brauchst Äquivalente zu PSTR bzw. FSTR. Falsch gedenkt: Auch für Äquivalente zu PSTR / FSTR braucht man natürlich /kein/ Inline-Asm.
-
Thread
KS0108_Library
ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(15,10); // Print some text ks0108Puts_P(PSTR("KS0108-Treiber")); // a nice little round rect ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK); // Once again :) // Select a font ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(5,30); // Print some text ks0108Puts_P(PSTR("Hallo")); while(1); }[/c] Hätte da jemand noch eine Idee was ich tun bzw wie ich am besten anfange bin bissel ratlos.
-
Thread
itoa in sprintf
nicht ist? Das _P ist die Kennung dafür, dass das ein Makro ist, welches seinerseits wieder ein PSTR auf das erste Argument einfügt. Keine ahnung ob das heute noch gebräuchlich ist. Ich habs das erste mal bei P.Fleury gesehen.
? > > Das _P ist die Kennung dafür, dass das ein Makro ist, welches > seinerseits wieder ein PSTR auf das erste Argument einfügt. > Keine ahnung ob das heute noch gebräuchlich ist. Ich habs das erste mal > bei P.Fleury gesehen. Halt. Kommando retour. Stimmt nicht. Ist kein Makro. Gute
-
Thread
AVR "verhakt" sich
folgendes ab: [c] if (!(ok = smbatt.Read(SMC_VOLTAGE, &u_ist))) continue; sprintf_P(str, PSTR("%-12s: %i mV\r\n"), "U Ist", u_ist); uart_puts(str); [/c] Dieser Block steht öfters (ca. 13 mal) nacheinander, nur eben mit anderen Registern (SMC_VOLTAGE...). Am Ende dieses Blocks wird geregelt
Werner schrieb im Beitrag #2357325: > sprintf_P(str, PSTR("%-12s: %i mV\r\n"), "U Ist", u_ist); > uart_puts(str); Wie ist "str" definiert?
-
Thread
Problem mit Binärübertragung - minicom dran schuld?
{ if (i%16 == 0) { // Adressen alle 16Byte anzeigen uart_puts_p(PSTR("\n")); uart_putdw_hex(i); uart_puts_p(PSTR(": ")); } // Zeichen einlesen uint8_t c = uart_getc(); // Ausgeben, wenn druckbar if (c > 0x1F && c <
-
Thread
Arduino delay(ms) in ISR?
die liegt dann im RAM. Am besten sieht man das IMO bei Strings. Es gibt bei den AVRs ja das Makro PSTR(string). Hinter PSTR verbirgt sich aber nur eine Anweisung für den Compiler den String nicht ins RAM zu kopieren, was er sonst machen würde, sondern ihn im Flash zu lassen.
-
Thread
delay auf atmega für onewire
zusammen, daher habe ich folgendes gemacht ------ #include <avr/delay.h> . . . printf_P (PSTR("=> start 5sec\r\n")); _delay_us(5000000); printf_P (PSTR("=> stop 5sec\r\n")); ------ das sollte doch 5 sec pause machen, oder? auch die quellen von http://www.siwawi.arubi.uni-kl.de/avr_projects
-
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
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
Erweiterter NEC IR Empfänger
get_nec_data(); if (necdata != IRNEC_NOREC) { set_cursor(0,0); lcd_pstring (PSTR ("NEC: ")); if ((((uint8_t)(necdata >> 8) & 0xff) ^ (uint8_t)(necdata & 0x00ff)) != 0xff) { lcd_pstring (PSTR ("error")); } else {
-
Thread
Librarys einbinden - glcd (Ks0108) Test
ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(15,10); // Print some text ks0108Puts_P(PSTR("KS0108-Treiber")); // a nice little round rect ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK); // Once again :) // Select a font ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK); // Set a position ks0108GotoXY(5,30); // Print some text ks0108Puts_P(PSTR("http://www.apetech.de\nmailto:me@apetech.de")); while(1); } Fragen: 1:include Wie muss der #include Befehl aussehen? Hier steht bei mir noch: #include "ks0108.h" Reciht das "ks0108
-
Thread
ADC Programm
einen long: unsigned int Vin = ADC*3300L/1024; // Result in mV und zur Ausgabe: printf_P(PSTR("Vin = %d.%03dV\r\n"),Vin/1000,Vin%1000); Man beachte das dezente 'L' hinter '3300'.
@Rolf Das mit div() scheint interessant zu sein: printf_P(PSTR("Vin = %d.%03dV\r\n"),div(Vin,1000)); ist fies, könnte aber zum erhofften Ergebnis führen, da der struct gleich wieder exakt in der gewollten Reihenfolge auf den Stack kommt. Aber das nur am Rande
-
Thread
assembler-routinen in C++: function-names
lcd.o mprintf.o uuprintf.o unter KDevelop übersetzt. In avrthermometer2.c steht u.a: const char pstr1[] PROGMEM = "Temp = %\000C "; extern void uuprintf_P(char *s, const char *ff, uint16_t n); ... int main(void) { ... char A[20]; uuprintf_P(A, pstr1, (uint16_t) ScratchPad[0]>>1)
-
Thread
Löscher einzelner Werte auf einem Graphikdisplay
ks0108SelectFont(Arial8, ks0108ReadFontData, BLACK); ks0108GotoXY(28,20); // Angabe Position ks0108Puts_P(PSTR(" ")); // Ausgabe P ks0108GotoXY(30,20); ks0108Puts(Buffer); [/c] Leider wird bei dem nächsten Lauf der alte Messwert nicht überschrieben. Einzelne Pixel bleiben weiter sichtbar. Nach ca 5 bis 10 Durchlauf ist nur noch ein schwarzer Fleck auf dem Display. [c] ks0108Puts_P(PSTR(" ")); // Ausgabe P [/c] Mit dieser Zeile wollte ich eigentlich den alten Messwert löschen, geht aber nicht. Das ganze Display kann ich auch nicht löschen und jedesmal neu schreiben.Die
-
Thread
Arduino mit "ethercard" Library
basteln. Da gibt es einen Befehl mit dem man per HTTP Webseiten abrufen kann... ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback); Diesen Befehl will ich nutzen um eine Variable per HTTP GET an meinen Server zu übertragen. Funktioniert auch technisch wenn ich z.B. einen String eingebe... ether.browseUrl(PSTR("/script.php?daten="), "test", website, my_callback); ...ich bekomme anstelle von "test" jedoch keine Variable hin. Arduino 1.0 gibt mir immer eine Fehlermeldung aus: invalid conversion from 'int
-
Thread
optimierung und itoa
Strings [c] lcd_text( (u8*) "Ex Interval:"); [/c] in "ExI" o.Ä. Saubere Lösung: pgmspace.h, PSTR, lcd_text_P.
> lcd_text( (u8*) "Ex Interval:"); > [/c] > in > "ExI" o.Ä. > > Saubere Lösung: pgmspace.h, PSTR, lcd_text_P. genau, PROGMEM für diese Konstanten verwenden, dann landen die im Flash. Dann ggf. den Pointer drauf holen und weiterverwenden: char *pText = .... Strings sind - wie mein Vorredner
-
Thread
Strings in .data sichtbar machen per avr-nm
Hallo! Angenommen ich verwende auf dem AVR printf("foo") statt printf_P(PSTR("foo")), dann wird der const char* ja im Flash ablegt, dann aber von der startup-Routine in die .data-Sektion kopiert (die im SRAM liegt). Wenn ich mir das mit avr-size ansehe, sehe ich da auch den
Ja, ich hatte das mit den durch PSTR generierten Symbolen verwechselt, die bekommen einen Namen. Die .data-Symbole haben keinerlei Debug- Information, davon übernimmt der Assembler keinerlei symbolische Information in die Objektdatei
-
Thread
Strings mit AVR - aber richtig
strcpy (str, gut); strcpy (nstr, ngut); } void get_f_str (char *str, char *nstr, char* pstr) { strcpy_P (str, (const char*) f_gut); strcpy_P (nstr, (const char*) f_ngut); strcpy_P (pstr, p_gut); } int main(){} [/code] *Ausgabe von nm:* [code] 0000002c T f_gut 00000026
-
Thread
Wiefiel Platz ist in einem AVR Mega16?
..... if(Flags & DebugFlag){ // Schleife für Debugging durch Flag aktivieren uart_puts_p( PSTR("neuer String empfangen") ); ... // Variablenwert ausgeben } [/C] und der Text "neuer String empfangen" belegt dir keinen Speicher im SRAM mehr. richtig schön wird das dann noch mit einem Makro [C] #define uart_puts_P(s) uart_puts_p(PSTR(s)) [/C] denn dann brauchst du nur noch in [C] uart_puts( "neuer String empfangen" ); [/C] den Funktionsaufruf ändern zu [C] uart_puts_P( "neuer String empfangen" ); [/C] und der String
-
Thread
AVR variablen gültigkeit & zugriff
restTime(); //now we can display the rest Time lcd_write_int16(rstTimeHour); lcd_write_string(PSTR(":")); lcd_write_int16(rstTimeMin); lcd_write_string(PSTR(":")); lcd_write_int16(rstTimeSek); }//end of void displayRestTime() //- - - - - - - - - - - - - - - - - - - - - -
-
Thread
string Konstanten mit fprintf ausgeben
auch direkt im Flash anlegt. Beispiel. [c] void fun(const char* str); void fun_p(const char* pstr); #define fun_P(x) fun_p(PSTR(x)) const char PROGMEM str1[]="hallo"; // erzeugt Flashkonstante fun("hallo"); // legt Kosntante im Datensegment (+flash) an fun_p(str1); // benutzt flashkonstanten
-
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
PORT-PINS als Jumper AVR (Ethernut 2)
PB0 PORTB &= ~(_BV(1)); // set Pin PB1 to low /*...*/ if(bit_is_set(PINB,0)) { fputs_P(PSTR("HIGH"),stream); } else { fputs_P(PSTR("LOW"),stream); } /*...*/
-
Thread
Variable auf LCD ausgeben
geht nicht: ks0108Puts_P(PSTR( Buffer2 )); da kommt ks0108Test.c:76: error: invalid initializer
Klar. PSTR liefert einen Pointer auf einen konstanten String im FLASH. Ich sehe in deinem geposteten Code die Definition buffer2 nicht. Aber ich könnte wetten, dass zu 99,9999% buffer2 kein Pointer auf einen
-
Thread
-
Thread
frage zu sizeof() in c
builtin_constant_p (x) ? !strcmp_P(id,x) : !strcmp(id,x)) \ ) #define match(x) match_(PSTR(#x)) #define Match(x) if(0); match(x) Hier werden Ausschnitte aus dem String als byte oder eventuall auch als word/dword (optimiert, nicht hier) verglichen. Wenn es jetzt einen Error geben würde
) wird in ein if(0); else if(id[0]=='e'&&id[2]=='a'&&6==len&&id[len-2]=='l'&&!strcmp_P(id,PSTR("enable"))) umgewandelt. Das ist dann ziemlich optimiert, auch wenn es 200 Vergleiche sind. wird hingegen match_(foo) verwendet wo foo ein char* ist, dann wird if(0); else if(id[0]==foo
-
Thread
2 Dateien gleichzeitig öffnen (Roland Riegel LIB)
struct fat16_file_struct* fd1 = open_file_in_dir(fs, dd, "temp.txt"); if(!fd1) { uart_puts_p(PSTR("error opening1 ")); } //search file in current directory and open it struct fat16_file_struct* fd2 = open_file_in_dir(fs, dd, "temp2.txt"); if(!fd2) { uart_puts_p(PSTR("error opening2 "))
-
Thread
strstr?
strcpy(string, pos); } } Wird der Suchstring gefunden. Auch der Aufruf von StringReplace mit PSTR("#wm#") oder "#wm#" bringt nicht das gewünschte Ergebnis. Was mache ich hier falsch? Danke schonmal, Christian
der schon falsch ist. > Wird der Suchstring gefunden. Auch der Aufruf von StringReplace > mit PSTR("#wm#") oder "#wm#" bringt nicht das gewünschte Ergebnis. Hmm. Zumindest letzteres sollte funktionieren. Aendere doch mal die Funktion ob, so dass sie die die Strings iregendwo ausgibt, damit
-
Thread
Liste von Zeigern auf Strings im Flash
Wie würdet ihr das Problem lösen? Mit dreimal P... : PGM_P padressen[][10] PROGMEM = { PSTR("Broadcast"), PSTR("Zimmer 1") }; Oliver