-
Thread
ATMega Flash wird langsam knapp. Upgrade o. Plattformwechsel?
PSTR wird doch schon benutzt.
Programmtext eigentlich beschreibst und zu welchem Zeitpunkt es eine Wirkung hat. Wenn Du im Programmtext PSTR hinschreibst und das Programm kompilierst, dann erzeugt der Compiler für _diese_ Variable, vor der PSTR steht, _keinen_ Code, der sie in das RAM kopiert. PSTR wirkt sich auf den Code aus und der Code
-
Thread
Flash Speichers des ATMega328P ist voll? Mit 12,7 kb??
allgemeinen Effizienzfanatiker ;-) [c] void tempSavePage(void) { lcd_clear(); lcd_printlc_P(1, 1, PSTR("Settings Page 1/2")); lcd_printlc_P(2, 1, PSTR("Delay Temperatur")); lcd_printlc_P(3, 1, PSTR("Speichere....")); _delay_ms(750); uint8_t writer = 0x00; switch (basicTempTime) (
(1, 1, PSTR("Settings Page 1/2")); lcd_printlc_P(2, 1, PSTR("Delay Temperatur")); lcd_printlc_P(3, 1, PSTR("Speichere....")); _delay_ms(750); uint8_t writer; if (basicTempTime < 2500) { writer
-
Thread
SSD1306/1309 Library zum Darstellen von Text auf OLED Displays
TCNT1 = 0; TCCR1B = 1 << CS10; lcd_gotoxy(0,7); lcd_puts_p(PSTR(" ")); lcd_gotoxy(0,7); lcd_puts_p(PSTR("Refresh: ")); lcd_puts(time); lcd_puts_p(PSTR("ms")); //_delay_ms(1000); } return 0; /* never reached
Compiler-Flags setzen). [c] ... // irgendwo im Code, bei dem Text gedruckt werden soll lcd_puts_p(PSTR("Wäre doch alles so\r\n")); lcd_puts_p(PSTR("einfach.")); ... [/c]
-
Thread
SD Karte mit FatFs über SPI an Atmega, wie kann man die Schreibgeschwindigkeit maximieren?
Erweiterung xprintf(PSTR("2. f_size start %lu\n"),f_size(&file1)); // Wie groß ist die Datei? xprintf(PSTR("2. f_tell start %lu\n"),f_tell(&file1)); // Wo liegt der Filepointer? xprintf(PSTR("lseek expand %d\n"),f_lseek
xprintf(PSTR("6. f_size nach truncate %lu\n"),f_size(&file1)); xprintf(PSTR("6. f_tell nach truncate %lu\n"),f_tell(&file1)); xprintf(PSTR("Timer ende%d\n"), Timer*10 ); xprintf(PSTR("f_sync2 rc=%d\n"), f_sync
-
Thread
Webpage Webserver
, PSTR("<td><""a href""=\"/888/1\">AN/AUS</""a></td>")); > > PS: Kann endlich mal jemand diese "Der Beitrag scheint Spam zu > enthalten" meldungen ausschalten? HTML code wird hier doch sowiso nicht >
/c] Bei Soetwas: Constantin schrieb im Beitrag #4071235: > plen = fill_tcp_data_p(buf, plen, PSTR("<td bgcolor='#A9ED61'><form > method=get><input type=submit name=6 > value='ausschalten'></form></td>\r\n")); Staddessen immer so schreiben: > plen = fill_tcp_data(buf, plen, PSTR("<td bgcolor
-
Thread
MMC/SD-Karte mit FAT16 an AVR
uart_puts_p(PSTR("partition open \n")); /* open file system */ struct fat_fs_struct* fs = fat_open(partition); if(!fs) { uart_puts_p(PSTR("opening filesystem
{ uart_puts_p(PSTR("fat_get_dir_entry_of_path\n")); struct fat_dir_struct* dd = fat_open_dir(fs, &directory); if(!dd) { uart_puts_p(PSTR("opening
-
Thread
Progmem zuweisungen
RAM. Ich arbeite mit dem ATmega32. Gibt es noch andere Möglichkeiten ausser: 1) PrintString(PSTR("Hallo")); oder 2) #define PrintString(__pstr,x) PrintString_P((PSTR(__pstr)),x) PrintString("Hallo"); Danke für alle Hilfe. :)
Header-File als Schnittstelle liefern: void PrintString (uint8_t *String); anstatt: #define PrintString(__pstr,x) PrintString_P((PSTR(__pstr)),x) Ist das irgendwie hinzubekommen? :)
-
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
struct und PSTR
Adressen die Struktur zu füllen! Bemerkenswerterweise erwischt es den avr-gcc bei der Makroexpansion von PSTR. Da spuckt er Fehler aus. Ich probiere am besten auch gleich mal ne neue avr-libc aus. - cl
prog_char *x; uint8_t i; }; struct _xyz x[] = { {PSTR("Hallo, World"), 2}, {PSTR("Blah"), 4} }; }
-
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
Lebensdauer von lokalen Variablen
Hier haut das nicht hin mit dem Makro, gibt nur Müll auf der seriellen.... nehme ich das PSTR weg ist alles wieder gut. /* Setze 9600 baud */ SIM800_SendAT(PSTR("AT+IPR=9600\r\n"),"OK"); /* Meldungen abschalten */ SIM800_SendAT(PSTR("AT+CCWA=0\r\n"),"OK"); /* Echo abschalten */ SIM800_SendAT(PSTR("ATE0\r\n"),"OK"); da ich gut 100 dieser Sequenzen haben sind das die größten Ram Fresser.
-
Thread
Probleme mit pgmspace. ATMega1284P hangt sich durch strcpy_P auf
mehrmals geraten das ich die String nicht mehr im RAM ablegen soll sondern mit den "_P" Funktion und PSTR sowie PROGMEM in den Flash auslagere. Das habe ich auch immer bis jetzt getan(Außer Serielle Nachrichten die nur zur Temporären Überprüfung waren wurden ohne _P und PSTR verwendet). Nur jetzt
erhöht ändert aber nix. Wenn ich das strcpy_P aus dem Case Fall 1 entnehme(Also strcpy_P(preIpStr, PSTR("IP"));) und im Case Fall 2 es stehen lasse(strcpy_P(preIpStr, PSTR("GW"));) dann funktioniert der Code wieder. Gibt es eine Limitierung bei PSTR/pgmspace? Der RAM ist noch nicht Ansatz weiße
-
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
sprintf gibt zu viele hexadezimale Ziffern aus
Probier doch mal folgende Aufrufe aus: [c] sprintf_P(buffer, PSTR("Wert: 0x%08lX"), 0x7fffUL); sprintf_P(buffer, PSTR("Wert: 0x%08lX"), 0x8000UL); sprintf_P(buffer, PSTR("Wert: 0x%08lX"), 0x10000UL); sprintf_P(buffer, PSTR("Wert: 0x%08lX"), 0x12345678UL); sprintf_P(buffer, PSTR("Wert: 0x%08lX"), 0x12348765UL); sprintf_P(buffer, PSTR("Wert: 0x%08lX"), 0x80000000UL); sprintf_P(buffer, PSTR("Wert: 0x%08lX"), 0xffffffffUL); [/c] Werden da auch immer die höherwertigen 16
-
Thread
AVR: fprintf_P String im Progmem
flash void testprint(constflash char *e) { // Mal mit stdout probieren: fprintf_P(stdout,PSTR("Out1:lalala")); // Funktioniert fprintf_P(stdout,PSTR("%s"),"Out2:lalala"); // Funktioniert fprintf_P(stdout,PSTR("%s"),PSTR("Out3:lalala")); // Funktioniert nicht
,PSTR("Out3:lalala")); [/c]
-
Thread
AVR PSTR mit gegebenem String nutzen
Hallo, ich versuche, einen einer Funktion als Parameter übergebenen String mit dem Makro PSTR aus der <avr/pgmspace.h> im Flash eines AVR Microcontrollers zu speichern. Als Fehlermeldung bekomme ich (in Microchip Studio) "invalid initializer". Sobald man PSTR einen String der Form "...
Martin schrieb im Beitrag #7764869: [c]> void func (const char *str) > { > lcd_writeProgrString (PSTR(str)); > } [/c] 1) PSTR ist nur auf String-Literale anwendbar. str ist kein String-Literal. 2) PSTR kann nur innerhalb von Funktionen und Methoden verwendet werden. Punkt 2) ist gegeben,
-
Thread
Funktionszeiger
do { for( i = 0; i < NrEntries; ++i ) lcd_set_cursor(1,LINE2);lcd_puts_p(small_font,PSTR("MENÜPUNKT 1")); lcd_set_cursor(1,LINE3);lcd_puts_p(small_font,PSTR("MENÜPUNKT 2")); lcd_set_cursor(1,LINE4);lcd_puts_p(small_font,PSTR("MENÜPUNKT 3")); lcd_set_cursor(1,LINE5);lcd_puts_p(small_font,PSTR("MENÜPUNKT 4")); lcd_set_cursor(1,LINE5);lcd_puts_p(small_font,PSTR("Exit - Taster 3")); if(PIND&(1<<PIND2)){Auswahl=1;} if(PIND&(1<<PIND3)){Auswahl=1;} if(PIND&(1<<PIND4))
-
Thread
String aneinander reihen
für Ausgabe von unsigned int reichen itoa(Zahl1, string, 10); buf[0] = '\0'; strcat_(buf, PSTR("Drehzahl: ")); strcat(buf, string); strcat_P(buf, PSTR(" U/min ")); strcat_P(buf, PSTR(" Spannung: ")); itoa(Zahl2, string, 10); strcat(buf, string); strcat_P(buf, PSTR("Volt
Ausgabe von unsigned int reichen itoa(Zahl1, string, 10); buf[0] = '\0'; strcat_P(buf, PSTR("Drehzahl: ")); strcat(buf, string); strcat_P(buf, PSTR(" U/min ")); strcat_P(buf, PSTR("Spannung: ")); itoa(Zahl2, string, 10); strcat(buf, string); strcat_P(buf,
-
Thread
#define mit 2 Werten
anweisung aussehen damit ich diesen Funktionsaufruf bewerkstelligen kann. T6963cPutStringXY_P(0,2, PSTR("Ti:")); Im define sollen die Werte 0,2 sein. Wenn ich es so probiere #define wert (0,2) und dann die Funktion aufrufe mit T6963cPutStringXY_P(wert, PSTR("Ti:")); bekomme ich Fehlermeldungen
umzubenennen hilft auch nicht weiter so schon eher #define _CALL_ T6963cPutStringXY_P(0, 2, PSTR("Ti:")) //#define _CALL_ T6963cPutStringXY_P(5, 7, PSTR("Ti:")) //wahlweise auszukommentieren
-
Thread
Rückgabewerte von va_list auf einem Arduino Mega2560
*diagnostic.h* [c] #include <avr/pgmspace.h> #define error(msg, ...) \ error_loc_P (PSTR(__FILE__), __LINE__, PSTR(msg), __VA_ARGS__) extern void error_loc_P (const char *fname, int line, const char *fmt, ...); [/c] *diagnostic.c* [c] #include <stdarg.h> #include <stdio.h>
const char *fmt, ...) { va_list args; va_start (args, fmt); fprintf_P (stderr, PSTR ("\n%S:%d: error: "), fname, line); vfprintf_P (stderr, fmt, args); fprintf_P (stderr, PSTR ("\n\n")); va_end (args); }[/c] *main.c* [c] #include "diagostic.h" int main (void
-
Thread
Überlauf?
Hilfsmakros und "Ersatz"-Funktionen. Ein Beispiel ist zum Beispiel der Funktionsaufruf ala "printf_P(PSTR("%u"), MyVal);" Zu beachten ist hier das PSTR() Makro, was den String per Sections vom Linker in den Flash-Bereich legt. Weiterhin das Suffix _P was für "Progmem" (denke ich mal) steht. Dieser Funktion
automatically storing string constant in program memory */ #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) [/c]
-
Thread
Strings direkt in Funktion eintragen
) den String im Flash liegen zu lassen. Aber nicht beim avr gcc, dort muss man das zu Fuß über PSTR("") machen.
Laufzeit des Programms aus dem Flash-Speicher gelesen werden, Zugriff erfolgt wie unter 2: ...PSTR("BlaBla")... rhf
-
Thread
Unterschied #define und Funktion?
später tretminenartig für Probleme sorgen... > Ich kann leider kein C++, aber wie kriegst du das PSTR() da rein? Kommt drauf an wie das mit dem PSTR funktioniert... Im Zweifelsfall immer im Usercode (vergessen resultiert ja hoffentlich in einem Compiler-Error), denn da gehört die Speicherart sowieso
definiert sind, möchte man Makros lieber gleich ganz verbieten. >> Kommt drauf an wie das mit dem PSTR funktioniert... Im Zweifelsfall >> immer im Usercode (vergessen resultiert ja hoffentlich in einem >> Compiler-Error), denn da gehört die Speicherart sowieso hin. > > #define PSTR(s) ((const PROGMEM
-
Thread
Größe einer char wird überschritten?
Mehrere Pakete : if ( bfill.emit_p(PSTR( "Etwas Text" )) ) { bfill.emit_p(PSTR( "Mehr Text" )) ) ; } else { bfill.emit_p(PSTR( "Fehlercode 1" )) ) ; return -1; } Ich bin leider nur "Hacker" , kein Programmierer ..
Hau Wech schrieb im Beitrag #5712251: > Mehrere Pakete : > > if ( bfill.emit_p(PSTR( "Etwas Text" )) ) { > bfill.emit_p(PSTR( "Mehr Text" )) ) ; > } else { > bfill.emit_p(PSTR( "Fehlercode 1" )) ) ; > return -1; > } > > > Ich bin leider nur "Hacker" , kein Programmierer
-
Thread
GCC: --fmerge-constants ?
> Bei Flash-Strings, die per PSTR angelegt werden, funktioniert > das Zusammenlegen grundsätzlich nicht Wie kommt das? Gibts einen Grund, warum das nicht geht? Oder ist das einfach im avr-gcc nicht implementiert?
So, um die Disskusion mal wieder auf Thema zu lenken: So is das Macro PSTR definiert: [c] # define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];})) [/c] Aus meiner naiven Sicht, müsste es für den Compiler möglich sein, zu erkennen, da sind Konstanten
-
Thread
USART in Funktion
PSTR einsetzt, so dass du es nicht vergessen kannst. Sozusagen die Komfortversion, so wie usart_writePC die Komfortversion von usart_write_P0 ist. [C] #define Licht_P(x,y) Licht( PSTR(x), y ) [/C]
sein. Ins Flash kannst du den String aber nur bei seiner 'Entstehung' verschieben. Also muss das PSTR mit dem String-Literal mitwandern. Dort wo das String-Literal ist, muss auch das PSTR sein.
-
Thread
UART-Interrupt haengt das Programm auf (Atmega8)
(PSTR("** **\n\r")); uart_puts_P(PSTR("** 1 Starte Blinklicht **\n\r")); uart_puts_P(PSTR("** 2 Starte Nightrider **\n\r")); uart_puts_P(PSTR("** e Stop Programm **\n\r")); uart_puts_P(PSTR("** **\n\r")); uart_puts_P(PSTR("***
-
Thread
SD-Karten Initalisierung - ACMD41 gibt nur 0x01 zurück
SPI_CLK)|(1<<SPI_MOSI); MMC_DDR&=~(1<SPI_MISO); // POWER OFF #if MMC_DEBUG printf_P(PSTR("\nMMC: Start...\n")); printf_P(PSTR("\nMMC: Power Off...")); #endif PORTC&=~(1<<PC4); MMC_PORT&=~(1<<MMC_CS); _delay_ms(1000); // POWER ON #if MMC_DEBUG printf_P(PSTR(
0x00; cmd[2] = 0x00; cmd[3] = 0x00; cmd[4] = 0x00; cmd[5] = 0x95; #if MMC_DEBUG printf_P(PSTR("MMC: Send CMD0...\n")); #endif // Command CMD 0 RES should be 0x01 for IDLE STATE res=255; while(res!=1) { res=send_cmd(1); #if MMC_DEBUG printf_P(PSTR("MMC: CMD0
-
Thread
Switch mit Vergleichsoperatoren Marke Eigenbau
c] if (position >= 10000) //100er Stelle lcd_puts_p(numbersbig,PSTR(".")); else if (position >= 1000) //10er Stelle lcd_puts_p(numbersbig,PSTR("./")); else if (position >= 0) //1er Stelle lcd_puts_p(numbersbig,PSTR
,PSTR("/")); [/c]
-
Thread
I2C Real Time Clock/Calendar (DS1337
uint8_t bin){ for(uint8_t i= 0; i< 8; i++){ if(bin & (0b10000000 >> i )){ lcd_print_P(PSTR("1")); }else{ lcd_print_P(PSTR("0")); } } } [/c] Hat Jemand für mich hier noch eine Bahnbrechende Idee, wo ich mich da vertue? Grüße Oekel
) { //____hh:mm:ss____ lcd_gotolc(line, 5); lcd_printInt(hours, 2, true); lcd_print_P(PSTR(":")); lcd_printInt(minutes, 2, true); lcd_print_P(PSTR(":")); lcd_printInt(seconds, 2, true); } [/c] Ergibt eine korrekte sekündliche Anzeige auf dem 7-Segment, jedoch bleiben die
-
Thread
Probleme mit TM7705 an Arduino nano3
,SPE); // SPI deaktiv schalten AD7705_CS_HIGH(); // CS hi nach Schreiben SPI USART_Tx_msg(PSTR("data_h:")); // Meldung ausgeben USART_Tx_int(data_h); USART_Tx_msg(PSTR("\n")); // Meldung ausgeben USART_Tx_msg(PSTR("data_l:")); // Meldung ausgeben USART_Tx_int(data_l); USART_Tx_msg(PSTR("\n")); // Meldung ausgeben data= ((((unsigned int)data_h) << 8) | (unsigned int)data_l); USART_Tx_msg(PSTR("\nADC-Wert: ")); // Meldung ausgeben USART_Tx_int(data); USART_Tx_msg(PSTR(
-
Thread
Wie ermittle ich die Position eines Zeichens?
subtrahieren. So müsstest du an den Index des Zeichens kommen. [C] char str[]="Hallo;Leute"; char* pstr; int index; pstr = strchr(str, ';'); index = str - pstr; [/C]
[c] char str[]="Hallo;Leute"; char* pstr; int index; pstr = strchr(str, ';'); index = str - pstr; [/c] Das Problem liegt in der letzten Zeile, das ergibt nämlich negative Werte. Angenommen, die Adresse, an der str beginnt, wäre 10
-
Thread
usart xmega probleme
,PSTR("\033[C"));uart1_puts(out) #define POSITION(Ze, Sp) sprintf_P(out,PSTR("\033[%d;%dH"),Ze,Sp);uart1_puts(out) #define CLEAR sprintf_P(out,PSTR("\033[2J"));uart1_puts(out) #define
sprintf_P(out,PSTR("\033[36m"));uart1_puts(out) #define FORECOLOR_WHITE sprintf_P(out,PSTR("\033[37m"));uart1_puts(out) #define BACKCOLOR_BLACK sprintf_P(out,PSTR("\033[40m"));uart1_puts(out) #define BACKCOLOR_RED
-
Thread
ATmega328/P ADXL345 i2c Sampling Rate SD-Karte
// set device address and write mode uart_puts_p(PSTR("WRITE ADDRESS\n")); i2c_write(0x2D); // write address = POWER_CTL of ADXL uart_puts_p(PSTR("SET MEASUREMENT BIT ON D3\n")); i2c_write((1<<3)); // Set
(((int)buff[5]) << 8) | buff[4]; itoa(x, s, 10); uart_puts(s); uart_puts_p(PSTR(" \t")); itoa(y, s, 10); uart_puts(s); uart_puts_p(PSTR(" \t")); itoa(z, s, 10); uart_puts(s); uart_puts_p(PSTR("\n")); if (m_flag == DO_MEASUREMENT
-
Thread
Einfacher Webserver (ermicro), wie CSS cachen lassen?
("Last-Modified: Di, 05 Jan 2016 11:30:00 GMT\r\n")); strcpy_P((char *)buf,PSTR("\r\n")); strcat_P((char *)buf,PSTR("<html>\r\n")); strcat_P((char *)buf,PSTR("<head>\r\n")); strcat_P((char *)buf,PSTR("<LINK rel=\"stylesheet\" h r e f=\"mystyle.css?v=1\" type=\"text/css\">\r\
: Di, 05 Jan 2016 11:30:00 GMT\r\n")); strcat_P((char *)buf,PSTR("\r\n")); strcat_P((char *)buf,PSTR("body {\r\n")); strcat_P((char *)buf,PSTR("background: #666;\r\n")); strcat_P((char *)buf,PSTR("}\r\n")); ... if (send(sockreg,buf,strlen
-
Thread
uart ausgabe: Speicherverständnis
Frank M. schrieb im Beitrag #4275606: > uart_puts_P (PSTR("B üblicherweise ist uart_puts_P ein Macro und setzt das PSTR selbst ein. Du meinst vermutlich uart_puts_p().
Georg G. schrieb im Beitrag #4275628: > blicherweise ist uart_puts_P ein Macro und setzt das PSTR selbst ein. > Du meinst vermutlich uart_puts_p(). Wie gesagt, ich benutze die lib von Peter. Darin gibt es folgendes Macro: [c]#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))[/c]
-
Thread
AVR Texte im SRAM, Überlauf??
> Das PSTR(xxx) liefert mir ja einen Pointer auf den Text im Flash zurück, > oder irre ich mich da? [c] #define PSTR (s) ((const PROGMEM char *)(s)) [/c] Used to declare a _static_ pointer to a string
. Das PSTR ist nur ein Makro, dass dir erlaubt Texte 'on the fly' in den Flash zu verlagern. Also in Fällen wie lcd_writetext( PSTR( "Dies ist ein Text" ) ); Normalerweise würde "Dies ist ein Text"
-
Thread
Daten aus dem Flash
TEXT3 im Flash gespeichert sein. // Ausgabe void printLCD (PGM_P texte[3]) { printf_P(PSTR("%s"), texte[0]); printf_P(PSTR("%s"), texte[1]); printf_P(PSTR("%s"), texte[2]); } // Funtionsaufruf ??? printLCD(texte); [/c] was ist noch falsch?
>void printLCD (PGM_P texte[3]) Eher so void printLCD (PGM_P texte[][6]) > printf_P(PSTR("%s"), texte[0]); printf_P(PSTR("%s"), &texte[0]); MfG Falk
-
Thread
Zeichenkette ausgeben
oder zumindest ein zeichen. Wenn du unbedingt printf nutzen willst dann so: sprintf_P(help,PSTR("%c \r\n"),buffer);
Peter II schrieb im Beitrag #2648795: > sprintf_P(help,PSTR("%c \r\n"),buffer); ;-) mein Gott. Es gibt Tage da steht man besser nicht auf. Heute ist eindeutig so ein Tag danke
-
Thread
Kam Reset durch Watchdog
den Grund des Resets aus * * @return none */ void printBootReason(void) { printf_P(PSTR("Reset: ")); if (mcusr_mirror&(1<<WDRF)) { printf_P(PSTR("Watchdog ")); } if (mcusr_mirror&(1<<BORF)) { printf_P(PSTR("Brownout ")); } if (mcusr_mirror&(1<<EXTRF)) { printf_P(PSTR("External ")); } if (mcusr_mirror&(1<<PORF)) { printf_P(PSTR("Power-on ")); } if (mcusr_mirror==0) printf_P(PSTR("unknown ")); printf_P(PSTR("\n")); }
-
Thread
Atmel Studio 6.2 - sprintf() - Problem
collect2.exe 0 0 16x2 LCD Error 1 undefined reference to `PSTR' E:\Ei...D\Debug\16x2 LCD.c 1 1 16x2 LCD
>> strcpy_P(buf,PSTR("Linie 2")); > Damit erhalte ich dann folgende Fehler: > undefined reference to `PSTR' Hast du denn die include Datei avr/pgmspace.h eingebunden? http://www.nongnu.org/avr-libc/user-manual/group
-
Thread
1Wire-Bus SEARCH ROM missverstanden?
1) { dcount = scan_bus(roms, ONEWIRE_SEARCH_ROM); if (dcount == 255) { uart_string_P(PSTR("Error, no device found!" CR)); uart_string(CR); } else { uart_string_P(PSTR("Scan finished, ")); uart_int(dcount); uart_string_P(PSTR(" devices found." CR CR)); for (i
rc = ds18B20_read_temp(&x); // read result if (rc) { uart_string_P(PSTR("CRC error!" CR)); } else { uart_string_P(PSTR("T Raw: ")); uart_int(x); uart_string_P(PSTR(" = ")); int32_t Temp = (int32_t) x * 625; // caclulate
-
Thread
printf druckt falsch aus dem FLASH
probier mal printf (" %s \n\r", PSTR(x)); Du willst einen String ausgeben, deshalb %s, sowie einen Pointer der aber im Flash liegt, dieser muss erst mittels PSTR "konvertiert" werden. Da der AVR Flash und Ram getrennt hat, braucht
Falls der Formatstring in PROGMEM stehen soll printf_P(PSTR("Hallo aus dem Progmem %d mal.\n"), 73); Falls ein String-Parameter im PROGMEM steht printf(" %S %d %S\n", PSTR("Hallo aus dem Progmem\n"), 73, PSTR("mal")); Beachte "%S" statt "%s" im Format
-
Thread
Strings in Flash: only initialized variables can be placed into program memory area
place data in program memory into // a custom code section prefixed my ".progmem." // #define CxxPSTR __attribute((section(".progmem.menudata"))) const char Menu0[] CxxPSTR = "Settings"; const char Menu1[] CxxPSTR = "Calibrate Hi"; const char Menu2[] CxxPSTR = "Calibrate Lo"; const char Menu3[] CxxPSTR = "°C to Shutdown"; const char Menu4[] CxxPSTR = "°C to Start Fan"; const char * const MainMenu[5] CxxPSTR = { Menu0, Menu1, Menu2, Menu3, Menu4 }; const uint8_t menuMax = 4
-
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
Mehrsprachig programmieren für AVR
ein define) aktiviert werden können. Hat da jemand ein fertiges, bewährtes Makro das auch mit PSTR() umgehen kann?
Wenns nur wenige, vorher feststehende Sprachen sind: [c] #if deutsch # define TEXT(de,en) PSTR(de) #else # define TEXT(de,en) PSTR(en) #endif // später: puts(TEXT("Hallo Welt","Hello World")); [/c]
-
Thread
Arduino RAM sparen mit PROGMEM und strcpy_P()
ist # Grad Celsius", wo dann # durch die Zahl ersetzt wird, könntest zu auch das tun: ausgeben_P(PSTR("Die Temperatur ist ")); ausgeben(zahl); ausgeben_P(PSTR(" Grad Celsius")); Das würde noch viel weniger RAM belegen.
Grad Celsius", wo dann # durch die Zahl > ersetzt wird, könntest zu auch das tun: > > ausgeben_P(PSTR("Die Temperatur ist ")); > ausgeben(zahl); > ausgeben_P(PSTR(" Grad Celsius")); [c] #include <Streaming.h> void setup() { Serial.begin(9600); Serial << F("Start: ") << __FILE__ << endl
-
Thread
Atmega32U4-Board: USB-Ausgabe in Betrieb nehmen
im main.c steht: initialization(); // fuer UART, Pins, I2C etc. while (1){ outs(USART,PSTR("\nTest...")); // Meldung ausgeben in Schleife outs(USB,PSTR("\nTest...")); // Meldung ausgeben in Schleife } die Ausgabe auf den USART klappt, die auf USB (Zeile darunter) nicht. weiter
> outs(USB,PSTR("\nTest...")); Der String liegt im Flash, wegen PSTR. [c] while (*str) { // get next char, bis /0 outc(USB,*str++); //send char } [/c] Hier liest du Zeichen
-
Thread
Zugriff string Konstante im PROGMEM eleganterer, einfacherer Weg?
Guck dir mal den PSTR-Makro an.
PSTR( "Alfons" ); [/C] Danke! Gruß AVRli...
-
Thread
PSTR() und String zusammensetzten?
Hallo, im C-Code für einen Atmel Mega328P muss ich einen String auf einen PSTR() und einen String zu einen String zusammensetzten. Gibt es dafür bereits eine elegante Prozedur? Bisher mache ich das so ... [c] // ... // const char *data // const char text[6]