Einfach Binär Ausgabe am UART

Gast #4740503
Hallo,

ich wollte gerne ein 8-Bit wert Binär ausgeben, habe folgenden
Code erstellt, ist der so gut oder gibt es da was besseres?
1
USART_Transmit(' ');
2
USART_Transmit(49-!(line & (1<<7)));
3
USART_Transmit(49-!(line & (1<<6)));
4
USART_Transmit(49-!(line & (1<<5)));
5
USART_Transmit(49-!(line & (1<<4)));
6
USART_Transmit(49-!(line & (1<<3)));
7
USART_Transmit(49-!(line & (1<<2)));
8
USART_Transmit(49-!(line & (1<<1)));
9
USART_Transmit(49-!(line & (1<<0)));
10
USART_Transmit(10);
11
USART_Transmit(13);

line ändert sich durch die Ports.

Gruß

Bernd
Gast #4740506
Der Code ist super so. Ich würde nichts ändern.

Zumindest solange ich nicht mehr über das Problem weiss, weil das 
komplett vergebene Zeit wäre.
Gast #4740509
Wenn damit von der USART das gesendet wird, was du möchtest,
ist das (wie mein Vorgänger schon schrieb) voll OK.

Wenn nicht, musst du das mit "line" und "Port" und ...
mal genauer erklären.
#4740535
Am schnellsten ist Dein Code, wenn Du jegliche Sprünge und Schleifen 
vermeidest.
Ob das sinnvoll ist, steht auf einem anderen Blatt.
Die UART wird dadurch nicht schneller.
Muss es schneller werden?

Erklär doch mal Dein Problem. Und zwar wirklich das Problem. 
Vollständig!


Gruß

Jobst
Gast #4740536
Bernd schrieb:
> ok, was Rechnet in dem Mikrocontroller schnell?

Das ist ziemlich egal. Die Ausgabe kostet die Zeit.

Bernd schrieb:
> ist der so gut oder gibt es da was besseres?

Viele Empfänger könnten mit deinem eigenwilligen Zeilenabschluss 
Probleme haben. Zumindest in der Windows-Welt ist meist <CR><LF> üblich 
und nicht umgekehrt. Aber es kann natürlich sein, dass dein Empfänger 
sein eigenes Süppchen kocht.
Gast #4740918
hi, mag sein, doch der Code mit
1
USART_Transmit(line & (1<<7)?'1':'0');
2
USART_Transmit(line & (1<<6)?'1':'0');
3
USART_Transmit(line & (1<<5)?'1':'0');
4
USART_Transmit(line & (1<<4)?'1':'0');
5
USART_Transmit(line & (1<<3)?'1':'0');
6
USART_Transmit(line & (1<<2)?'1':'0');
7
USART_Transmit(line & (1<<1)?'1':'0');
8
USART_Transmit(line & (1<<0)?'1':'0');

ist Langsamer als
1
USART_Transmit(49-!(line & (1<<7)));
2
USART_Transmit(49-!(line & (1<<6)));
3
USART_Transmit(49-!(line & (1<<5)));
4
USART_Transmit(49-!(line & (1<<4)));
5
USART_Transmit(49-!(line & (1<<3)));
6
USART_Transmit(49-!(line & (1<<2)));
7
USART_Transmit(49-!(line & (1<<1)));
8
USART_Transmit(49-!(line & (1<<0)));

das ist wesentlich schnell in der Ausführung auf dem µC

Gruß

Bernd
Persönliche Seite #4740969
Bernd schrieb:
> hi, mag sein, doch der Code mit
>
> USART_Transmit(line & (1<<7)?'1':'0');
> (...)
>
> ist Langsamer als
>
> USART_Transmit(49-!(line & (1<<7)));
> (...)
>
> das ist wesentlich schnell in der Ausführung auf dem µC

Wie kommst Du zu dieser Erkenntnis?

Das mit Abstand langsamste überhaupt ist der Aufruf von 
USART_Transmit(). Das braucht nämlich so lange wie das Senden eines 
Zeichens über die serielle Schnittstelle. Bei 9600 Baud also etwa 1 
Millisekunde. Das dürfte gut das tausendfache von dem sein, was der Rest 
braucht.


Daß hingegen der Ausdruck
1
line & (1<<7)?'1':'0'

langsamer sein soll als das hier
1
49-!(line & (1<<7))

das bezweifle ich. Was soll da langsamer sein?

Und vor allem, was soll da in Relation zur Ausführungsdauer von 
USART_Transmit "langsamer" sein?
Gast #4740980
ja, das die Anzeige Langsam ist, ist klar. Aber wenn ist zwei µC einer 
mit den Zeile mit ? und der Andere mit - Zeile an einer 
Spannungsversorgung
start. Kann der mit - mehr Zeile in das Terminal bringen, und beim 
tausch der Programmierung ist der zweite dann schneller.
Angehängte Dateien:
Gast #4741237
in dem ich die beiden µC an jeweils einem COM Port habe und in zwei 
Terminals die anzeige mache. Über die Pipes die Zeilen zähle.
Die Controller werden mit einem FET beide eingeschaltet.
1
+\
2
  |
3
  FET---<--- PowerON Signal
4
  |
5
  *--[CPU1]--[RS232]--PCcom1
6
  |    |
7
  |   ---
8
  |
9
  *--[CPU2]--[RS232]--PCcom2
10
       |
11
      ---
getauscht habe ich alles schon C2 an Com1 und C1 an Com2, auch die 
Stromversorgung von C1 und C2 gegenseitig. Und da die µC gesockelt sind
auch diese gegenseitig getauscht.
Es ist immer der Mega mit dem Code 49-!(line & (1<<7)) schneller.
Und es ist ja alles andere Identisch.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.