Peter Lambertz schrieb:
> Hier mal die Funktionen.
Also auf der Basis der Funktionen würde ich das "Funktioniert" hier
1 | while (1)
|
2 | {
|
3 | USART0_Gets(MotorData); //Funktioniert
|
4 | //USART0_Puts(MotorData); //Funktioniert auch
|
5 | uint8_t test = MotorData[1]; // geht nicht
|
6 | USART0_putchar(test); // geht auch nicht
|
7 | }
|
stark bezweifeln. USART0_Gets kopiert alles, was gerade im Puffer ist
(egal wie viel), und terminiert es. Es gibt keinen Grund, warum das mit
jedem Schleifendurchlauf immer genau 3 Zeichen sein sollten. Im
Gegenteil, schon vom Timing her ist das extrem unwahrscheinlich. Was
wohl tatsächlich passiert, ist, dass in der "funktionierenden" Version
pro Schleifendurchlauf immer nur 0 bis 1 Wert gelesen und wieder
ausgegeben wird. Du siehst zwar in der Ausgabe die erwarteten 3 Werte,
doch entstand diese Ausgabe nicht in einem Durchlauf (und die Werte
standen auch nicht in MotorData[0-2]), sondern in vielen Durchläufen
(und der eine Wert stand dann immer in MotorData[0]). Und damit ist dann
auch klar, dass das
1 | uint8_t test = MotorData[1]; // geht nicht
|
2 | USART0_putchar(test);
|
immer eine 0 liefert.