Forum: Compiler & IDEs fdevopen funktioniert nicht immer


von Pure (Gast)


Lesenswert?

Guten Morgen,
ich habe eine Frage, warum funktioniert fdevopennicht immer?
Ich habe ein Projekt in dem folgendes ohne Probleme funktioniert.
1
//sprintf (bufferr, "IN=%02x %d %d \n\r", AuxInput,Data_Array_Messwert[0],Data_Array_Messwert[1]);
2
      //uputs_(bufferr);

jedoch

vor der main loop
1
fdevopen(uputs_, NULL);

dann in im Programm
1
  //uputs_("Hallo\n\r");

das nicht mehr.

Verwende das Atmelstudio 7

Danke

von Dirk B. (dirkb2)


Lesenswert?

Pure schrieb:
> ich habe eine Frage, warum funktioniert fdevopennicht immer?

Was soll das heißen?

Gibt es eine Fehlermeldung vom Compiler?
Passiert einfach nichts?
Stürzt das System ab?

Pure schrieb:
> in dem folgendes ohne Probleme funktioniert.

Der Code ist auch auskommentiert.

von Kaj (Gast)


Lesenswert?


von Pure (Gast)


Lesenswert?

Dirk B. schrieb:
> Passiert einfach nichts?

Ja genau es passiert nichts.

Dirk B. schrieb:
> Der Code ist auch auskommentiert.

Ja beim Test war es einkommentiert.

Kaj schrieb:
> Einfach mal in die Doku gucken? Rueckgabewert der Funktion pruefen?

Ok das kann ich probieren.

von Rolf M. (rmagnus)


Lesenswert?

Pure schrieb:
> Dirk B. schrieb:
>> Der Code ist auch auskommentiert.
>
> Ja beim Test war es einkommentiert.

Dann zeig doch bitte den Code, der nicht wie erwartet funktioniert hat 
und nicht irgendwas anderes. Und mit deinem uputs_("Hallo\n\r") benutzt 
du das Device auch gar nicht. Also hat das Problem nichts mit dem zu 
tun, sondern mit uputs_() selbst.

von Markus F. (mfro)


Lesenswert?

... wenn Du den FILE pointer, der bei fdevopen() (hoffentlich) 
zurückgeliefert wird, nicht auffängst - wie willst Du dann auf den 
Stream schreiben?

Beitrag #6028964 wurde vom Autor gelöscht.
von Pure (Gast)


Lesenswert?

Guten Abend
Diese Kombi funktioniert


int uart1_putc(  char data)
{
    unsigned char tmphead;


    tmphead  = (UART1_TxHead + 1) & UART_TX_BUFFER_MASK;

    while ( tmphead == UART1_TxTail ){
        ;/* wait for free space in buffer */
    }

    UART1_TxBuf[tmphead] = data;
    UART1_TxHead = tmphead;

    /* enable UDRE interrupt */
    UART1_CONTROL    |= _BV(UART1_UDRIE);
  return (1);
}/* uart1_putc */

fdevopen(uart1_putc, NULL);


Diese Kombi funktioniert nicht

void uputs_( uint8_t *s )
{
  while( *s )
    s_sputchar( *s++ );
}
fdevopen(uputs_, NULL);


Kann mir jemand den Grund erklären?

von Markus F. (mfro)


Lesenswert?

Pure schrieb:
> Kann mir jemand den Grund erklären?

klar.

Dokumentation nicht gelesen, nicht verstanden oder nicht dran gehalten.

von Kaj (Gast)


Lesenswert?

Pure schrieb:
> Kann mir jemand den Grund erklären?

Kaj schrieb:
> Einfach mal in die Doku gucken? Rueckgabewert der Funktion pruefen?
>
> 
https://www.microchip.com/webdoc/AVRLibcReferenceManual/group__avr__stdio_1gab599ddf60819df4cc993c724a83cb1a4.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.