-
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
[AVR] __flash conversion warning
printf_P und printf angeguckt. Kam da jetzt aber nicht wirklich weiter. Allerdings habe ich mir dann mal PSTR genauer angesehen. Letzendlich will ich mein Zeugs ja in den Flash schreiben. Aber nicht mehr über PSTR und dem PROGMEM sondern über __flash. Über https://www.mikrocontroller.net/topic/382907 und PSTR bin ich jetzt auf folgendes hinaus: [code] #define XSTR(X) ({static const __flash char __s[] = (X); &__s[0];}) [/code]
-
Thread
sprintf bringt nach Compilierung im Relaese Mode nur "?" als Wert
eeName, sizeof(eeName)); // LiIon Voltage if(Flags116 & FMLiIon_alarm) { strcat_P(Text,PSTR("-> ")); } sprintf(U_array_fl[LiIon],"%4.2f",((double)mVLiIon/1000)); strcat_P(Text,PSTR("Backup battery: ")); strcat(Text,U_array_fl[LiIon]); strcat_P(Text,PSTR("V\n")); // Main Battery Voltage if(Flags116 & FMmb_alarm) { strcat_P(Text,PSTR("-> ")); } strcat_P(Text,PSTR("Main battery: ")); sprintf(U_array_fl[Akku],"%5.1f",((double)MainBatValue/1000)); strcat(Text,U_array_fl[Akku]); strcat_P(Text,PSTR("V\n")); SMS_Send
-
Thread
Array vom PROGMEM aufs Display
wie wär's mit PSTR ? [c] #include <avr/pgmspace.h> strcpy_P (buffer, PSTR("TestString")) [/c]
Rainer B. schrieb im Beitrag #4669931: > wie wär's mit PSTR ? Ja danke, das funktioniert. Wie soll da einer draufkommen .... Ich hab es mir vorher im Header-File angeschaut und bin nicht drübergestolpert.
-
Thread
Suche ein 28 Pin Mikrocontroller mit mehr als 32 kBit Flash Speicher
32k Flash benötigt? > Riesige Lookup-Tabellen? Nein. Aber viele Display Nachrichten. Die mit PSTR in denn Flash kopiert werden.
Jan H. schrieb im Beitrag #4634771: > Nein. Aber viele Display Nachrichten. Die mit PSTR in denn Flash kopiert > werden. Falls viele Nachrichten sich nur in Parametern unterscheiden, kann man diese als Variablen übergeben. Oder Du schließt noch nen 24C512 an.
-
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
[Erklärungsbedarf] countdown-demo.zip
int8_t mm = seconds / 60; int8_t ss = seconds % 60; lcd_printInt(mm, 2); lcd_print_P(PSTR(":")); lcd_printInt(ss, 2); } [/c] Doch wie gesagt scheiterte es bei der Durchsicht von countdown.c und die 2 Zeilen, die dafür sorgen, dass nun meine neue sec_16 ebenfalls runtergezählt wird
-
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
#define Ich bekomme ein Makro nicht hin.
\r",84, 84);[/c] Also irgendwas im Stile von: [c]#define my_printf( bla bla tiny_printf(PSTR( bla bla[/c] ... eben ohne das lästige PSTR( ... und das schlimme: die schließende Klammer nach dem String. Bin ich zu dämlich oder geht das wirklich nicht ?
[c]#define my_printf(str,...) (tiny_printf(PSTR(str) , ## __VA_ARGS__))[/c] Der Trick mit dem ", ##" funktioniert nur im GCC, bewirkt aber dass der Aufruf auch mit 0 Argumenten funktioniert, siehe: https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html
-
Thread
ATMega328, komisches Verhalten bei fast vollem Speicher
[c] //fuer den Zugriff auf den Flashspeicher #include <avr/pgmspace.h> ... screen_print_p(PSTR("(Speed restored)"); ... //funktion zum Schreiben von Strings aus dem Flash void screen_print_p(const char* stringFromFlash) { register char zeichen; while( zeichen = pgm_read_byte(stringFromFlash
Hmmm, mit screen_locate(1, 2); screen_print_p(PSTR("(Speed restored)")); funktioniert das Ding wiederum. Krank! Gruß, Sebastian
-
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
GPS NMEA Libary für Atmega32
0) while (*p++ != ',') ; // if (strlen(sentence)>=99) { // printf_P(PSTR("sentence zu lang: %d\n%s\n"),strlen(sentence),sentence); // } strncpy (result, p,100); result[99]=0; p = result; while (*p && *p != ',' && *p != '*' && *p != '\r')
chksum[2]=0; csnum=strtol(chksum, NULL, 16); if (csnum!=value) { printf_P(PSTR("NMEA CS ! %s %02x\n"),chksum,value); return; } oldLat = gpspos.lat; oldLon = gpspos.lon; gpspos.lat=atof(readFieldByNumber(data, 2)); d=gpspos.lat/100
-
Thread
Speicherort Übergabeparamter
erwägen, String im Programmspeicher statt im RAM abzulegen. Bei AVR geht das zum Beispiel so: puts_P(PSTR("Hallo")); In diesem Fall ein Zeiger auf den Programmspeicher (=Flash, nicht RAM) übergeben, in dem der Text steht. Und weil der Zeiger in einem anderen Adressrau liegt, muss man die Funtkion puts_P
-
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
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
LCD an ATmega644 (später ATmega8) mittels TWI/I2C (Anfängergerecht)
true); //lcd_gotolc(0,0); //lcd_print(string1); lcd_gotolc(0,0); lcd_print_P(PSTR("I2CLCD V0.12")); _delay_ms(3000); lcd_command(LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKINGOFF); } Leider funktioniert die nicht so wie gehofft. Ich bekomme kryptische Zeichen auf
-
Thread
Arduino SD Card Modul
// use uppercase in hex and use 0X base prefix cout << uppercase << showbase << endl; // pstr stores strings in flash to save RAM cout << F("SdFat version: ") << SD_FAT_VERSION << endl; if (DISABLE_CHIP_SELECT < 0) { cout << F( "\nAssuming the SD is the only SPI device
----- void loop() { // read any existing Serial data while (Serial.read() >= 0) {} // pstr stores strings in flash to save RAM cout << F("\ntype any character to start\n"); while (Serial.read() <= 0) {} delay(400); // catch Due reset problem uint32_t t = millis(); // initialize
-
Thread
AVR-Attiny: sprintf() mit Progmem
sprintf_P [c] sprintf_P(buffer, PSTR("Hallo Welt, %d"), i); [/c] http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html
-
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
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
AVR - IDE Festplatte liefert immer Fehler beim lesen
LBA-Mode gesetzt wurde? Läuft bei mir so ab: [pre]uint8_t pata_init () { uart_putstring ( PSTR ( "INFO: PATA init start" ), true ); while ( ( !pata_rdy() ) & pata_bsy() ) {} /*set drive 0 to LBA mode*/ write_io_register ( PATA_RW_DEVICE_HEAD_REGISTER, ATA_LBA_DRIVE_0 );
-
Thread
Struct mit String im Flash Zugriff
jedoch, dass z.B. die Lib-Funktionen alle /ohne/ AS-Qualifier geschrieben sind und Literale wie in PSTR keine AS-Qualifier haben (dürfen). Daher gibt es auch kein AS-Äquivalent zu PSTR. Somit ist es kaum möglich, Code zu schreiben, der AS verwenden und diese Warnung /nicht/ produziert. Grund ist
gegriffen haben, dass es darauf nun auch nicht mehr ankommt. ;-) >> Dass es kein Äquivalent zu PSTR() gibt, ist allerdings in der Tat >> schade. > > hmmm, folgendes scheint zu gehen, ganz analog zu PSTR: Danke!
-
Thread
Elm-Chans FFT-Routinen verstehen?
0b00000010; /* PE1:<conout>, PE0:<conin> in N81 38.4kbps */ TCCR1B = 3; /* clk/64 */ xmitstr(PSTR("\r\nFFT sample program\r\n")); for(;;) { xmitstr(PSTR("\r\n>")); /* Prompt */ rcvrstr(pool, sizeof(pool)); /* Console input */ cp = pool; switch (*cp++) { /* Pick
default : /* Unknown command */ xmitstr(PSTR("\n???")); } } } [/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
#define Konstante in String einbauen
Die Ausgabe [c] #define LCD_CHAR 126 ... // Ausgabe LCD_string_P(PSTR("Zeichen: ")); LCD_data(LCD_CHAR); [/c] könnte ich doch auch so schreiben [c] LCD_string_P(PSTR("Zeichen: \126")); [/c] Kann ich auch beide irgendwie vereinigen (ohne sprintf)? [c] #define LCD_CHAR 126 ... // Ausgabe irgendwie so? LCD_string_P(PSTR("Zeichen: \" LCD_CHAR)); [/c] ??? Danke karl
-
Thread
Thread wird nach NutSleep() nicht mehr geweckt
UartReceiveMessage, arg) { NutThreadSetPriority(50); ... for (;;) { printf_P(PSTR(" ------ Thread: UartRxMsg \n")); ... } NutSleep(50); } [/c]
-
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
Problem bei negativen Temperaturen mit Temperatursensor DS18S20
Temperatur in String uart_puts(Buffer); // String zur Uart uart_puts_P(PSTR(" Grad Celsius\r\n")); // Ausgabe der Einheit } int main(void){ uart_init(); uart_puts_P(PSTR("\r\nProgrammstart\r\n")); // Startmeldung // Testausgabe siehe Datenblatt
25 Grad Celsius PrintTemp2Uart(0xFF, 0x92); // -55 Grad Celsius uart_puts_P(PSTR("Fertig\r\n")); // Endemeldung for(;;); }[/c] Gruß Rene
-
Thread
AX8 Softcore Problem.
schleierhaft. Dafür hat der AVR spezielle Instruktionen bzw. Opcodes. Da muss man doch mit _flash und PSTR arbeiten. Duke
-
Thread
Wie feststellen in C, ob Zahl grade oder ungrade?
deutlich mehr drin: [c] int isodd(int a) { char buf[7]; int n; n = snprintf_P(buf,6,PSTR("%i"),a); return buf[--n]=='1'; } [/c] So versteht es selbst ein Grundschüler.
-
Thread
ARM Cortex-M0: re-enter Interrupt
seconds++; if ( ! (seconds % 60)) { seconds = 0; minutes++; } sersendf_P(PSTR("%su:"), minutes); if (seconds < 10) serial_writechar('0'); sersendf_P(PSTR("%su\n"), seconds); // Be busy sometimes. if ( ! (seconds % 5)) delay_ms(2000); }
seconds++; if ( ! (seconds % 60)) { seconds = 0; minutes++; } sersendf_P(PSTR("%su:"), minutes); if (seconds < 10) serial_writechar('0'); sersendf_P(PSTR("%su\n"), seconds); if ( ! (seconds % 5)) { SCB->ICSR = SCB_ICSR_PENDSVSET_Msk; //
-
Thread
ATmega128 RS232 Komunikation
Enable interrupts sei(); //---------------End of Initalisation--------------- printf_P(PSTR("...")); printf_P(PSTR("Running")); printf_P(PSTR("BaudRateRegister set to %u\n"),BaudRateRegister); printf_P(PSTR("Wait")); //Start of infinate while loop while(1){ if (bufferflag == 1){ printf_P(PSTR("Got instruction")); bufferflag = 0; //Reset the buffer flag to say its been processed bufferlocation =0; //Restart the buffer location } } //End of infinate while loop