-
Thread
Probleme mit meinem LCD-Display
(LCD_DISPLAYON | LCD_CURSORON | LCD_BLINKINGON); lcd_light(true); lcd_printlc_P(1, 1, PSTR("Hello World")); } [/c] Die Lib ist angehängt Ein I2C Scanner sagt, es ist 0x3F, aber es funktioniert nicht Durch die Verschiebung um 1 Bit vermute ich mal 0x7E, aber das funktioniert auch
-
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
Was passiert, wenn man als Funktionsparameter statt einem prog_char* ein char* übergibt?
Strings steht. Beispiel: In ff.c hatte ich ein paar Variablen per Uart anzeigen lassen: [c]xprintf(PSTR("ff_Test_pdrv=%d\n"), fs->pdrv); xprintf(PSTR("ff_Test_stat=%d\n"), stat); xprintf(PSTR("f_mount: vol=%d\n"), vol); xprintf(PSTR("f_open > find_volume res:%d\n"), res); xprintf(PSTR("f_open > end:%d\n"), res);[/c] In der Main habe ich ebenfalls ein paar Ausgaben mit PSTR und auch ein paar mit einem normalen String machen lassen: [c] int variable = 44; xprintf("zeile %d \n", 1); //=1 xprintf("%s \n","String"); //332 xprintf("%d \n", 1); //_mount: vol=1 xprintf(
-
Thread
Arduino/C - sprintf_P() - Ersetzender String im Flash
strings im flash gibt es den format string %S, also grosses statt kleines s. Eventuell könnte man PSTR statt F verwenden.
-
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
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
[Glaskugel] Funktionsaufruf lässt Controller hängen
if (leadingZeros) { for (uint8_t i = getDigitCount(value); i < c; i++) lcd_print_P(PSTR("0")); } lcd_print(str); } //- Print string to cursor position void lcd_print(char *string) { while(*string) { lcd_putchar(*string++); } } //- Put char to atctual cursor
-
Thread
Strings im Flash ablegen, oder nicht?
[c] uart_output("Dies ist eine Test-Ausgabe aus dem RAM"); [/c] vs. [c] uart_output_P(PSTR("Dies ist eine Test-Ausgabe aus dem Flash")); [/c] Option #2 braucht letztendlich sogar mehr Flash, wenn man es kompiliert. Das macht vermutlich auch Sinn, weil der String ja in beiden Fällen im
das Flash im RAM-Adressbereich sichbar ist. Auf diesen Devices kann man auf __flash und PROGMEM / PSTR etc. ohne Overhead verzichten. [c]const int i = 2; __attribute((noinline,noclone)) int readi (const int *pi) { return *pi; } int main (void) { return readi (&i); }[/c] Zunächst
-
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
Leuchtdioden LEDs Beleuchtungsstärke für Taglicht
müsstest Du nochmal präziser stellen. Die Beleuchtungsstärke hat die Einheit Lux, also lm/m², also (Pstr * vLamda) / m². Es geht hier also um die Lichtmenge die pro Fläche fällt, also um klassische Beleuchtungsaufgaben und nicht um Signalzwecke. Für reine Signalzwecke ist da ein extrem kleiner Bruchteil
-
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
[AVR] Strings im Flash mit __flash
%S Und wenn du die _P-Variante benutzt, muss natürlich der Formatstring selber auch ins Flash: PSTR("%S") S. R. schrieb im Beitrag #5010181: > Außerdem nutze ich ja kein PROGMEM... Für die Funktion spielt es keine Rolle, auf welche Weise du den String ins Flash befördert hast.
-
Thread
avr-gcc: __DATE__ formatieren / "initializer element is not constant"
zu kürzen. Ich erstelle ja immer einen Standardstring mit folgendem Format sprintf_P(c_str, PSTR("%04d/%02d/%02d_%02d:%02d:%02d"), year, month, day, hour, minute, second); nicht besser? =" JanFebMarAprMayJunJulAugSepOctNovDec"; oder ="ErrJanFebMarAprMayJunJulAugSepOctNovDec";
Serial.println(); Serial.print(F("Nach der Umformatierung:")); char buf[20]; sprintf_P(buf, PSTR("%04d/%02d/%02d_%02d:%02d:%02d"), BUILD_YEAR(), BUILD_MONTH(), BUILD_DAY(), BUILD_HOUR(), BUILD_MINUTE(), BUILD_SECOND()); Serial.println(buf); } void loop() { // put your main code here
-
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
#define Fehler
STM32 hat/braucht kein PROGMEM. Du kannst da das PSTR vermutlich einfach so definieren: #define PSTR(s) (s) Außerdem ist __c ein für die Standard Library reservierter Bezeichner, de darfst du in deinem Code nicht verwenden. Hoffentlich hast du den
PSTR sieht für den STM wie folgt aus: [c] #define PSTR(s) ((const char *)(s)) [/c] Wie schon richtig angemerkt kennt der ARM kein Progmem. Demenstprechend muss man ggf. auch PROGMEM wegdefinen.
-
Thread
Atmel SAM25W I2C und WIFI
switch (u8MsgType) { case M2M_WIFI_RESP_CON_STATE_CHANGED: { tstrM2mWifiStateChanged *pstrWifiState = (tstrM2mWifiStateChanged *)pvMsg; if (pstrWifiState->u8CurrState == M2M_WIFI_CONNECTED) { } else if (pstrWifiState->u8CurrState == M2M_WIFI_DISCONNECTED) { printf
-
Thread
C Programmierung
Wörter ersetzt? unsigned int Replace2(char *pStr, char replace, char newChar) was wäre den pSTR , replace , newChar? newChar = ersetzendes Wort replace = zu ersetzendes Wort pSTR = ? Vielen Dank schon einmal für die Mühe
Dich. Falls Du es verstanden hättest, würdest Du sehr wahrscheinlich so etwas: > was wäre den pSTR , replace , newChar? > newChar = ersetzendes Wort > replace = zu ersetzendes Wort nicht fragen. Denn es würde klar sein, das char nur für ein einzelnes Zeichen steht und ergo, der Parameter newChar
-
Thread
avr-gcc wie gehts richtig mit PSTR
MAX_BL); sprintf_P(s_out_str, "hellxx (%d)-(%d)", MIN_BL, MAX_BL); oder sprintf_P(s_out_str, PSTR("hellxx (%d)-(%d)"), MIN_BL, MAX_BL); oder sprintf(s_out_str, PSTR("hellxx (%d)-(%d)"), MIN_BL, MAX_BL); ??? welche Version ist richtig, funktioniert und spart SRAM? Ich versuche alle Möglichkeiten
Maximum von 30.720 Bytes) Falls du hoffst Flash zu sparen mit der Verwendung oder dem Weglassen von PSTR, dann geht das natürlich nicht. Der String muss in jedem Fall im Flash gespeichert werden. Mit PSTR kann man nur verhindern, dass er nicht _zusätzlich_ noch im SRAM liegt.
-
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
Probleme bei der Ansteuerung MAX7219 mit 8x8 Dot Matrix
display.stopTransfer(); sendMessage_p ( ADDR_BROADCAST, rx.myAddress, PSTR ( "led" ) ); uartPuts ( uint8ToAh ( ( char* ) buffer, displayData ) ); uartPuts_p ( PSTR ( "\r" ) ); uartWaitTXEmpty(); [/code] Besten Dank shcon mal für die Bemühungen.
-
Thread
HT16K33 schnelltest LED Blink :P
der ganze block nur zur Sicherheit, um das Device abziehen zu können. lcd_printlc_P(1, 1, PSTR("TEST AN")); lcd_light(true); lcd_printlc_P(2, 1, PSTR("TEST ")); HT16K33_ClearDisplay(0); HT16K33_ClearDisplay(1); HT16K33_ClearDisplay(2); HT16K33_ClearDisplay(3); HT16K33_ClearDisplay(4); wait_10ms(500); lcd_printlc_P(1, 1, PSTR("TEST ")); lcd_light(false); lcd_printlc_P(2, 1, PSTR("TEST AUS")); HT16K33_FillDisplay(0); HT16K33_FillDisplay(1); HT16K33_FillDisplay(2); HT16K33_FillDisplay
-
Thread
HC-SR04________
< ICIE1); TCCR1B |= (1 << CS10); } ISR(TIMER1_CAPT_vect){ lcd_gotoxy(10,0); lcd_puts_p(PSTR(" ")); TCCR1B &= ~(1 << CS10); TIMSK1 &= ~(1 << ICIE1); } ISR(TIMER1_OVF_vect){ TIMSK &= ~(1 << ICIE1); lcd_gotoxy(10,0); lcd_puts_p(PSTR("Timeout! ")); } void setUpAvr
set sleepmode set_sleep_mode(SLEEP_MODE_IDLE); // init display lcd_init(); lcd_puts_p(PSTR("Distance: ")); } /* main.c end */ /* main.h beginn */ #ifndef main_h #define main_h #ifndef F_CPU #define F_CPU 1000000UL #endif #include <avr/io.h> #include <avr/sleep.h>
-
Thread
Fehler bei snprintf_P(.) Arduino ESP8266
Debug Meldungen generieren: [c] void setRelay(uint8_t power) { snprintf_P(log, sizeof(log), PSTR("Test")); addLog(LOG_LEVEL_INFO, log); snprintf_P(log, sizeof(log), PSTR("Power: %d"), power); addLog(LOG_LEVEL_INFO, log); . . . [/c] Obwohl die Syntax vielfach, auch unter der Verwendung
(log, sizeof(log), PSTR("Test")); ^ sonoff:752: error: cannot convert 'double (*)(double)' to 'const char*' for argument '2' to 'void addLog(byte, const char*)' addLog
-
Thread
JSON parsen mit AVR
strlen zusammen mit Makro oder Inline-Funktion. [c]#define strncmpf(S, STR) \ strncmp_P (S, PSTR (STR), strlen (STR)) bool func (const char *str) { if (!strncmpf (str, "abc")) return true; return false; }[/c] Ein Problem ist, dass es wegen PSTR keine Inline-Funktion sein
\ match_len = strlen (STR); \ match = ! strncmp_P (S, PSTR (STR), match_len); \ match; \ }) bool func (const char *str) { bool match; size_t match_len; if (MATCH (str, "
-
Thread
Arduino - Speicheroptimierung?
im Quelltext steht. als Parameter zu s(n)printf gehts z.B. nicht, da könnte man auf snprinf_P und PSTR ausweichen, wenn man auch noch die letzten Bytes rausquetschen will. Wolfram F. schrieb im Beitrag #4878840: > link für eine sparsamere SD Library Leider nicht, bin länger nicht mehr mit Arduino
-
Thread
I2C-LCD von sainsmart - keine Anzeige
lcd_init(); lcd_light(true); lcd_print(string1); lcd_nextline(); lcd_print_P(PSTR("I2CLCD V0.11")); // always set all three parameters (ON/OFF) when using this command lcd_command(LCD_DISPLAYON | LCD_CURSORON | LCD_BLINKINGON); _delay_ms(1000); lcd_command(
-
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
Bootloader-Test; großes Hex-File erzeugen
probates Mittel, mit wenig Aufwand viel Speicher zu verbrauchen, ohne tausend mal [c] uart_puts(PSTR("kjhkjhkjhkhkjh")); [/c] zuschreiben? Grüße, Alex
-
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
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
Neue 8-Bit Tinys vorgestellt: 417/814/816/817 Gesperrt
avr-gcc v7 folgendermaßen: [c]extern const char __attribute__((__progmem__)) str[]; const char* pstr (int i) { return &str[i]; } char get (int i) { return str[i]; }[/c] Übersetzt mit -Os -mmcu=avrtiny [avrasm] pstr: subi r24,lo8(-(str+16384)) sbci r25,hi8(-(str+16384))
-
Thread
Asuros fahren nicht
data Pointer to string */ void SerPrint_p(const char *data); #define SerPrint_P(_str) SerPrint_p(PSTR(_str)) /**************** Print Funktionen Floting Point printf.c ********/ /*! * \~english * \brief Send a Float value converted to a string to UART * \param wert float value * \param vorkomma
-
Thread
Erste UART-versuche AVRStudio meckert rum
einen String aus dem ROM ueber die RS-232 aus. Bsp.: rs232_putromstring(PSTR("Hallo Welt") -------------------------------------------------- */ void rs232_putromstring(const unsigned char *dataPtr) { unsigned char c; for (c=pgm_read_byte(dataPtr); c; ++dataPtr