-
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
-
Thread
KS0108 Atmega16/32 - nur streifen
ks0108ReadFontData, BLACK); // Set a position //ks0108GotoXY(15,10); // Print some text //ks0108Puts_P(PSTR("test")); // a nice little round rect //ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK); // Once again :) // Select a font //ks0108SelectFont(SC, ks0108ReadFontData, BLACK); // Set
-
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
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
Dez-Hex Umwandler
'6') {cbf_put(rx_buf, '1'); cbf_put(rx_buf, '0');} else {return parse_error(tx_buf, '?', PSTR("Y")); }
-
Thread
strcmp_P
Leider habe ich da meine Probleme. Mit diesem Befehl funktioniert es. gleich = strcmp_P(string,PSTR("Measure")); Versuche ich aber so geht es nicht. gleich = strcmp_P(string,COMMAND1); ich hab natuerlich den String im Flash ueber PROGMEM initalisiert. const char PROGMEM COMMAND1[] =
-
Thread
Flyback-Trafo: Verwirrung beim Proximity-Effekt bei parallelgeschalteten Wicklungen
www.weewave.mer.utexas.edu/MED_files/MED_research/Intrcncts/Skin_Effect_Ldr/MTT_96_poster/MMT_96_skn_crct_pstr.pdf Da kannste dir seinen parametrisierbaren Subcircuit bauen. Dann setzt du den koppelfaktor auf 1 und setzt die Streuinduktivitäten via dem Modell händisch ein. Zusätzlich lohnt es sich das
-
Thread
Externe Interrupts INT0 und INT1 deaktivieren
lcd_set_cursor(56,30); // Cursor wird auf Position gesetzt lcd_puts_p(small_font,PSTR("Initialisierung")); // Ausgabe des Wortes for(i=2;i<=56;i++) // Füllen der Progressbar { _delay_ms(35); lcd_fill_rect (57,40,i,4,BLACK); } GPS_available
-
Thread
Suche Kühlkörper mit gute Wärmeleitung für viele LEDs
ProLight Opto PACG-110FWL-BCGP auf jeweils 1,5A. Macht laut dem Datenblatt etwa 520W Pel und etwa 220W Pstr laut dem Spektraldiagramm und der Lumenangabe. Alles gerechnet bei eher schlechten 60°C Casetemperatur (bei COBs gibt es in der Regel keine Chiptemp.-Angaben). Macht also 300W Abwärme verteilt auf
-
Thread
Projekt: SerialComCNC Serielles Frontend für CNC GRBL mit ATMega
, PSTR("ty.txt=\""), 8) == 0) { tft.setCursor(15, 75); tft.setTextColor(ILI9341_YELLOW, ILI9341_BLUE); tft.print("Y: "); tft.print(serialBuffer + 8); } else if (strncmp_P(serialBuffer
, PSTR("tf.txt=\""), 8) == 0) { tft.setCursor(15, 150); tft.setTextColor(ILI9341_GREEN, ILI9341_BLACK); tft.print("FEED: "); tft.print(serialBuffer + 8); } } [/c] Gruß, Wolfram
-
Thread
printf bei Handy-SMS Code aus Artikel geht nicht?
Ichbinimflash[] PROGMEM = "%s"; printf_P(Ichbinimflash); ?????? [/c] Oder einfach so: [c]printf_P(PSTR("at+cclk?\r\n"));[/c] > (Kennt jemand eigentlich mal so eine Art Dokumentation zu diesen > merkwürdigen printf-Funktionen? Ich weiß eigentlich gar nicht genau, was > die machen...?!) http://
-
Thread
Atmega168/328: interner Temperatursensor
; // andere Initialisierungen lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_puts_p(PSTR("Temperatur: ")); char valueToPrint[5]; for(;;){ // insert your main loop code here dtostrf(ADC*1100.0/1024.0-314.0+25.0, 5,
-
Thread
gets problem
(zeittemp[4]-'0'); sek=(zeittemp[6]-'0')*10+(zeittemp[7]-'0'); sek--; sprintf_P(zeittemp,PSTR("%2i:%2i:%2i"),h,min,sek); myprintf("%s",zeittemp); myprintf("\n\n"); } [/c] zeittemp ist 19 Byte groß. Epmpfang ist auch aktiviert: #define UART0_CONFIGURE1 UCSRB= (1<<RXCIE
-
Thread
Mal wieder Probleme mit UART
char *text); //Damit Strings aus dem Flash gelesen werden #define uart_put_s_P(__s) uart_put_s_p(PSTR(__s)) [/c]
-
Thread
Register variablen unterschied?
OK: void main (void) { uart1_puts_p(PSTR("TestString")); do {} while(1); } So sieht der rest des Codes aus. Also ich rufe dir Funkton nur einmal auf um etwas über die Uart auszugeben und zwar aus dem Programmspeicher
-
Thread
XMega bleibt "hängen"?
über Interrupts ausgegeben, sondern relativ straight forward: Meine Debugfunktion ist diese hier (PSTR für das ablegen der Strings im PROGMEM): #define Debug_Str(_str) ( dputsP (PSTR(_str)) ) die Funktion dputsP sieht folgendermassen aus: inline void dputsP (const char * str) { while (pgm_read_byte
-
Thread
ATMega1284P + EA-DOGL128 mit Library von Jan M.
lcd_init(); while (1) { lcd_put_string_P(FONT_FIXED_8, NORMAL, PSTR("Hallo Welt")); } } Das ganze programmiere ich im Atmel Studio 7 und bekomme leider einen compilierfehler: Undefined reference to ´font_fixed_8px` Zu der Library gehört noch der Ordner
-
Thread
SPI Geräte stören sich gegenseitig. ILI9341 regiert auf ENC28J60 Befehle. Was tun
entfernt bis ich denn Fehler gefunden habe: Folgender Code: [code] plen=fill_tcp_data_p(buf, plen, PSTR("Temperatur Sensor Außen: <font color='red'>Can't find Temp Sensor</font>!<br/>")); [/code] Das Problem ist das <font color='red'>. Wenn ich dieses aus dem Code entferne dann läuft das Display normal
-
Thread
avr-libc: relocation truncated to fit
Pferdefuß ist, daß das eine bestimmte Version der avr-libc in gcc vorausetzt -- was aber mit dem PSTR-Fix ja auch schon de facto der Fall ist. Ein -mavr-libc wäre ja nur dann sinnvoll, wenn es standardmässig aktiviert ist.