Im moment habe ich ein Problem, mit dem ich nicht klar komme. Über Uart
empfange ich 3 Byte (ohne \0), die Zahlenwerte enthalten. Diese Werte
möchte ich Variablen zuweisen, was aber irgentwie nicht geht.
eine kleine Testschleife sieht im moment so aus:
1
while(1)
2
{
3
USART0_Gets(MotorData);//Funktioniert
4
//USART0_Puts(MotorData); //Funktioniert auch
5
uint8_ttest=MotorData[1];// geht nicht
6
USART0_putchar(test);// geht auch nicht
7
}
Wenn ich die Daten als array wieder Ausgebe, Funktionierts wunderbar.
Also stehen ja Daten im array, nur wenn ich ein arrayelement einer
Variablen zuweise geht nix. Was hab ich übersehen ?
Was heißt "geht nicht"? Was passiert? Wie ist "MotorData" deklariert?
Wie sehen die "3 Byte (..) die Zahlenwerte enthalten" aus?
Was vermutest Du, sollte USART0_putchar() ausgeben, wenn Du einen
beliebigen Wert zwischen 0 und 255 übergibst?
Womit überprüfst Du die von dieser Funktion ausgegebenen Werte?
putchar schickt immer 0 auf die Leitung. MotorData ist als uint8_t
initialisiert mit 3 Elementen.
Ich erwarte im moment das putchar mir den wert des 2 arrayelemnts als
echo auf die leitung schickt. Mit Puts werden die korrekten 3 Bytes als
echo ausgegeben.
Nachprüfen kann ich es nur mit meinem logicanalyzer, was bissher auch
gut Funktionierte :)
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_ttest=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
da könntest du recht haben stefan. ich bin nur von dem logicanalyzer
ausgegangen. wenn ich die 3 bytes sende fängt er am letzten empfangenen
an sie zurückzusenden.
etwa so:
lesen -> --- --- --- ---
echo -> --- --- --- ---
daher ging ich mal davon aus das die 3 bytes erst mal empfangen werden.
nehme ich jetzt die putchar funktion und lass die senden siehts so aus:
lesen -> --- --- --- ---
echo -> ------------------
ich probier mal die MotorData[0] aber noch aus wie du gesagt hast.
Nichts gegen Logic Analyzer.
Aber am einfachsten testet man eine UART indem man sie mit einem
Terminal verbindet und nachsieht, ob das was man am Terminal tippt auch
wieder zurückkommt bzw. wie das Programm darauf reagiert.