-
Thread
Speicher voll durch Multiplikation
------------------------------------------------------ #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); // -------
------------------------------------------------------ #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
Pointer im Flash auf String im Flash
[C] char* foo_flash[] PROGMEM = { PSTR( "Menu1" ), PSTR( "Menu2" ) }; [/C] müste auch gehen, bin mir aber nicht 100% sicher Kennst du: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher
Karl heinz Buchegger schrieb: > [C] > char* foo_flash[] PROGMEM = { PSTR( "Menu1" ), > PSTR( "Menu2" ) }; > [/C] > > müste auch gehen, bin mir aber nicht 100% sicher Nein, das PSTR-Makro funktioniert nicht in Initialisierungslisten.
-
Thread
Fehlerursache bei Displayansteuerung eingrenzen
automatically storing string constant in program memory */ #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) /*@}*/ #endif //LCD_H [/c] Danke
-
Thread
WinApi CreateThread
des Api Mains: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASSEX wc; HANDLE hHandle1; DWORD ThreadId1=0; .... dann mache ich irgentwann das: hHandle1
-
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
Wie splitte ich ein Byte richtig auf?
void checkbyte(char c) { if (c & 0b11110000 == hw_GetTWIAddr() ) { printf_P(PSTR("Funktioniert")); printf_P(PSTR("%c"), c); } else printf_P(PSTR("Läuft nicht, falsche Adresse")); } die Funktion soll das byte was vom Uart des contrllers kommt (char c) aufsplitten
-
Thread
LCD an PortC
automatically storing string constant in program memory */ #define lcd_puts_P(__s) lcd_puts_p(PSTR(__s)) /*@}*/ #endif //LCD_H [/c] die avr-includes sind in der main.h
-
Thread
IRMP - Infrared Multi Protocol Decoder
*Aktualisierung* Die IRMP-Software kann unter [[IRMP]] --> Download heruntergeladen werden. Hallo zusammen, Anmerkung: Dieser Source entstand im Rahmen des Projektes "WordClock", siehe Artikel http://www.mikrocontroller.net/articles/Word_Clock bzw. Thread, der alles zum Auslösen gebracht hat: http://www.mikrocontroller.net/topic/156661 Da RC5 nicht nur veraltet, sondern mittlerweile obsolet ist und immer mehr die elektronischen Geräte der fernöstlichen Unterhaltungsindustrie in unseren Haushalten Einzug finden, ist es an der Zeit, einen IR-Decoder vorzustellen, der
-
Thread
Frage zu Pointern - Menu
Strings die neue Variable eintragen, um den String auch im Flash unterzubringen. Evtl. geht auch PSTR("Modus aendern") in der Initilisierung, aber ich glaube, das frisst der Compiler nicht. > Und diese Adresse gebe ich dann an meine > putsf Routine weiter, damit sie den Text ausgeben kann? Ja
-
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
ATMega644p: Kein Reset nach Programmiervorgang
rc_t nRC = RC_OK; // Line 1: Title display_format( 1, strcpy_P( (char *) &acBuffer[0], PSTR( "* PSU + DARC *" ))); // Line 2: Model display_format( 2, strcpy_P( (char *) &acBuffer[0], PSTR( ">%6s< by DG1SBG" )), PSU_MODEL ); // Line 3 Serial Nr and Version display_format( 3, strcpy_P( (char *) &acBuffer[0], PSTR( "# %s - %s")), PSU_SERIAL_NR, PSU_VERSION ); roger(); if( nDelayMilliSeconds > 0 ) _delay_ms( nDelayMilliSeconds ); return nRC; } ISR( TIMER1_COMPA_vect ) // Routine triggered
-
Thread
sprintf_P Vor und Nachteile
kann mir jemand erläutern wo die Vor und Nachteile dieser Varianten liegen. [c] sprintf_P(temp,PSTR("%d"),value); sprintf(temp,"%d",value); [/c] Ich weiß daß die erste Variante die Daten in den Programm-Flash legt. Und man spart RAM. Ist daher die erste Variante uneingeschränkt besser?
sprintf() nicht viel interessieren... Außerdem werden (hatten wir neulich gerade) mehrere gleiche PSTR- Literale nicht automatisch zu einem zusammengefasst, wenn man also 5x den gleichen Formatstring hat, den aber nicht in einer eigenen separaten Variablen (eigentlich natürlich Konstanten) verwaltet
-
Thread
Mithilfe von printf auf UART0 und UART1 Ausgaben machen (LPC2138)
stderr = &lcd_str; fprintf(stderr, "Hello world!\n"); for (;;) { printf_P(PSTR("Enter command: ")); if (fgets(buf, sizeof buf - 1, stdin) == NULL) break; if (tolower(buf[0]) == 'q') break; switch (tolower(buf[0])) { default: printf("Unknown
-
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: --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
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
S65 GLCD - wie farbige Icons mittels Font Editor?
gespeichert ist. Du kannst also feste Texte auch direkt aus dem FLASH zeichnen lassen: glcdDrawText(PSTR("Text im FLASH Speicher"), -1, 1); Das optimiert die Speicherverwaltung bei Textkonstanten da diese im Grunde immer im FLASH gespeichert werden aber normalerwiese zum Startup durch den WinAVR GCC
-
Thread
Text senden über UART im Interruptbetrieb
ausgangspuffer char *outbufferpos=&outbuffer[0]; //positionszeiger void send(char * pstr){ while ((1<<TXCIE0)& UCSR0B); //warten bis Senderoutine fertig ist outbufferpos=&outbuffer[0]; //Zeiger auf Anfang setzen while (*pstr!=0x00){ //prüfe auf String Ende *outbufferpos = *pstr; //kopiere Zeichen outbufferpos++; //zeiger incrementieren pstr++; } *outbufferpos=0x00; //String-Ende in Puffer schreiben outbufferpos=&outbuffer[0];
-
Thread
LCD 0 anzeigen uint16_t
X Wert schreiben lcd_gotoxy(32,60); // Auf LCD Position springen lcd_writestringP(PSTR(": Y Wert")); // String dahinter schreiben } } [/c] Ich hoffe das hilft weiter. Den Fehler habe Ich immer noch nicht gefunden :/ Mfg Elias
(32,60); // Auf LCD Position springen lcd_writestringP(PSTR(": Y Wert")); // String dahinter schreiben } [/C] Und noch eine Anmerkung: Schau dir deine Kommentare noch einmal an. Und dann beantworte mal die Frage: Was erzählt mir eigentlich der Kommentar
-
Thread
TWI AVR Problem bei Arbitrierung Multimaster Betrieb
= 1; //lcd_gotoxy(0,40); //lcd_writestringP(PSTR(" ")); TWDR = 0x06; //Adresse 3 _ write 0 TWCR = (1<<TWINT) | (1<<TWEN)| (1<<TWIE); //lcd_gotoxy(0,40); //lcd_writestringP(PSTR("Start gesendet"));
0x68: lcd_gotoxy(0,20); lcd_writestringP(PSTR("Aribitration lost")); break; case 0x78: lcd_gotoxy(0,20); lcd_writestringP(PSTR("Aribitration lost")); break; case 0xB0: lcd_gotoxy(
-
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
TWI bei mega644 läuft nicht
1<<TWEA) | (1<<TWIE); //Global Interrupt off lcd_set_cursor(0,LINE0); lcd_puts_p(small_font,PSTR("Slave init rdy")); //Kommt } void twi_get_data(void) { lcd_set_cursor(0,LINE1); lcd_puts_p(small_font,PSTR("Wait for rqst")); //Kommt while(!(TWCR & (1<<TWINT))); //Warten bis der
lcd_set_cursor(0,LINE3); lcd_puts_p(small_font,PSTR("DATA OKAY")); // Kommt } TWCR |= (1<<TWINT); lcd_set_cursor(0,LINE4); lcd_puts_p(small_font,PSTR("Get Data rdy")); //Kommt } ISR (TWI_vect) { twi_get_data(); } [/c]
-
Thread
PIC µC: PWM-aus & Port aus -> manchmal bleibt Port-Bit auf high hängen?
jemand so etwas schon mal gehabt oder eine idee?????????? Relais einschalten: ... STR1A=1; //PSTR1CON Register RELAIS_K1=1; //RC2 ... Relais ausschalten: ... STR1A=1; //PSTR1CON Register RELAIS_K1=1; //RC2 ...
-
Thread
Hilfe bei Code-Interpretation
Nachtrag: Dafür gibt es eigentlich seit ewigen Zeiten das Makro PSTR in der avrlibc. Oliver
-
Thread
PRINT oder ähnliches für XMEGA
irgendwo aus einem open-source Projekt übernommen habe. #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); Soweit zum Define
-
Thread
Nach Aufteilung Code um 6KB größer
{ lcd_draw_bmp(Achtung); lcd_set_cursor(30,LINE0+1); lcd_puts_p(normal,PSTR("Batteriespannung:")); lcd_set_cursor(46,LINE2+1); lcd_puts_p(normal,PSTR("niedrig !")); } if(result > BattMax) { lcd_draw_bmp(Achtung); lcd_set_cursor(30,LINE0+1); lcd_puts_p(normal,PSTR("Batteriespannung:")); lcd_set_cursor(42,LINE2+1); lcd_puts_p(normal,PSTR("zu hoch !")); } if(result >= BattMin && result <= BattMax) { lcd_set_cursor(22
-
Thread
PSTR und SRAM-Speicher
hat. Kann also irgendwie nicht sein? Hat jemand eine bessere Idee? Jetzt möchte ich außerdem mit PSTR() einen Großteil der (String-)Meldungen in den Flash auslagern. Die meisten Meldungen sehen aber aus wie USART_TransmitStr("depp."); Dazu will ich mir eine USART_TransmitStr_P(PSTR("depp.")); schreiben