Peter II schrieb:
> Dr. Sommer schrieb:
>> Und deswegen, Kinder, wurde der Debugger erfunden...
>
> ein Debugger ist wenig hilfreich, wenn man gar nicht versteht wie
> Binärdaten gesendet werden.
Ich bin mir gar nicht sicher, ob er das überhaupt will.
Ich interpretiere mal frei
> Jetzt hab ich mir gedacht lass ich mir den Header in Binär über UART
> am PC schicken, dann seh ich ja warums net geht.. aber das is
> irgentwie nicht so einfach.
Ich denke, er denkt über Debug-Möglichkeiten nach.
Er will sich am PC (in einem Terminalprgramm) die 8 Bytes aus der CAN
Nachricht in Bitform anzeigen lassen (um zu erkennen, welche Bits gestzt
sind und welche nicht).
D.h was er wirklich will, ist sich die Daten die er vom CAN bekommt,
aufgedröselt in 0-en und 1-en in Textform anzeigen lassen.
Ist wie gesagt nur meine Interpretation. Vielleicht liege ich auch
komplett falsch, die Fragestellung bzw. das Erraten wonach eigentlich
gefragt wird, ist zumindest für mich nicht ganz eindeutig. AUf jeden
Fall dürfte aber wieder der Fall vorliegen, dass nach etwas gefragt
wird, was schon von der Idee her der komplett falsche Ansatz ist.
Wenn ich richtig liege, dann würde ich mir erst mal eine kleine
Hilfsfunktion bauen. Eine Funktion, die 1 Byte aufgedröselt in Bits in
Textform ausgibt.
1 | void transmit_uint8_string_USART0( uint8_t value )
|
2 | {
|
3 | char str[9];
|
4 | utoa( value, str, 2 );
|
5 | transmit_string_USART0( str );
|
6 | }
|
Die Funktion gibt den Byte-Wert in seiner Binärdarstellung in Textform
aus.
Damit sollte es dann eigentlich recht leicht sein, die gewünschte
Funktionalität, nämlich alle Bytes einer CAN-Msg in lesbarer Form aufs
Terminal zu kriegen, bzw. darauf aufbauend sich weitere Hilfsfunktionen
zu machen, die nicht nur 1 Byte ausgeben können, sondern dasselbe mit
einem 16 Bit Wert bzw. einem 32 Bit Wert zu machen
1 | void transmit_uint16_string_USART0( uint16_t value )
|
2 | {
|
3 | transmit_uint8_string_USART0( value >> 8 );
|
4 | transmit_uint8_string_USART0( value );
|
5 | }
|
6 |
|
7 | void transmit_uint32_string_USART0( uint32_t value )
|
8 | {
|
9 | transmit_uint16_string_USART0( value >> 16 );
|
10 | transmit_uint16_string_USART0( value );
|
11 | }
|
Wenn ich jetzt richtig liege, dann 'vereinfacht' sich damit die
ursprüngliche Aufgabenstellung zu einem simplen
1 | transmit_string_USART0( "Id = " );
|
2 | transmit_uint32_string_USART0( msg.id );
|
3 | transmit_string_USART0( "\n" );
|
um die gewünschte Einsicht in das per CAN Empfangene zu erhalten.