scanf abbrechen

Gast #1968908
Lesenswert?

wie komm ich an den source code von scanf? ich dachte mir ich sende ein 
printf, damit scanf abbrechen kann;) ich muss rausfinden ob scanf auf 
den receive interrupt wartet...kann man den nicht manuell setzen oder 
so?

was meinst du mit "in Ordnung"?

ich werde wohl meine eigene empfangsroutine schreiben müssen...
#1968945
Lesenswert?

Gerald schrieb:
> wie komm ich an den source code von scanf? ich dachte mir ich sende ein
> printf, damit scanf abbrechen kann;) ich muss rausfinden ob scanf auf
> den receive interrupt wartet...kann man den nicht manuell setzen oder
> so?

Du zäumst das Pferd immer noch falsch auf.

>
> was meinst du mit "in Ordnung"?

geprüft, für gültig befunden.
Eine empfangene Eingabe, die wegen Timeout abgebrochen wurde, ist nicht 
in Ordnung.

> ich werde wohl meine eigene empfangsroutine schreiben müssen...

Das ist der Weg.
Wenn du den String komplett hast, kannst du ihn ja mit sscanf zerlegen. 
Aber scanf macht hier ganz einfach zuviel: Auf Benutzereingabe warten 
UND zerlegen.
Und das ist nun mal meistens zu unflexibel für einen Produktionseinsatz.
Gast #1969002
Lesenswert?

wenn ich übers keyboard in den serial_modus gehe dann wartet er mit 
scanf auf serielle daten... ich will nun das scanf abbrechen/serial 
modus beenden, wenn der user exit drückt. das ist alles;)

auf wie viele zeichen wartet eigentlich das scanf?
scanf ("%s",&str); ...hier wartet scanf auf einen mit \0 terminierten 
string?
und bei scanf ("%i",&int_value); bzw. scanf("%X",&hex_value) ??

woher weiss ich ob scanf den FIFO verwendet?

ich könnte dann ja das putchar modifizieren und sscanf aufrufen?
char putchar (char c)  {
  while (!ASCx_TIC_IR);
  ASCx_TIC_IR = 0;
  return (ASCx_TBUF = c);
}
Gast #1969010
Lesenswert?

weil man sotwas nicht mit scanf macht, gibt es auch keine Möglichkeit es 
abzubrechen.

lege ein Puffer an char[MAX_LEN]
lese die daten mit read bis zu einem Ende oder meintwegen einem Timeout. 
Schon hast du den string da.
Gast #1975745
Lesenswert?

hi,

ich initialisiere meine serielle schnittstelle wie folgt:

 void init_rs232 (void)
   {
  P3_P10 = 1;
  DP3_P10 = 1;
  DP3_P11 = 0;
  ALTSEL0P3_P10 = 1;    // Connect P3.P10 with ASC interface

  ASC0_TIC = 0x80;
  ASC0_RIC = 0x00;
  ASC0_BG  = 0x04;
  ASC0_CON = 0x8011;
  ASC0_CON_S0FDE = 1;    // 0 = fraction divider disabled, 1 = enabled
  ASC0_FDV = 0x76;    // Baudrate
  }

danach sende ich daten an die serielle schnittstelle...der datentransfer 
ist beendet, dann erste rufe ich die funktion _getkey auf!
warum empfängt er dann über ASC0_RBUF den wert 0x000A ?? muss ich vor 
dem _getkey aufruf irgendwas initialisieren?

lg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren