Hallo alle zusammen, habe wieder mal ein "kleines" problem. die variablen Y_Temp und X_Temp wird initialisiert, aber die variable int ergebnis nicht!!!! wenn ich es debugge, dann sprint der cursor drüber, ohne den wert zu übernehmen!!!! kann mir bitte jemand sagen, woran es liegen könnte? es kann sein, dass ich in den settings vom compiler (verwende µVision 3 von Keil) was verstellt habe, weiss es aber nicht genau. benutzt das keilboard und den C167CS-LM) hoffe es kann mir jemand helfen... bin für jede antwort dankbar! danke LG wolfgang void auswertung (void) { int Y_Temp = 0x0000; int X_Temp = 0x0000; int ergebnis = 0x0000; X_Temp |= (readback[1]<<8) & 0xff00; X_Temp |= (readback[0])& 0x00ff; Y_Temp |= (readback [3]<<8) & 0xff00; Y_Temp |= (readback [2]) & 0x00ff; ergebnis = atan(Y_Temp/X_Temp) }
Also ich hätte die Zuweisung int ergebnis = 0x0000 wegoptimiert, weil man sie nicht braucht. Vielleicht macht Dein Compiler das ja auch?. Viele Grüsse Harry
Mich wunderts ja schon, dass der compiler nicht meckert, da bei der letzten Zeile (ergebnis = .....) das Semikolon fehlt. Zudem ist eine Initialisierung der Variablen auf 0 wirklich nicht notwendig. Auch der X und Y Variablen nicht, da da ja gleich was reingeschrieben wird. Übrigens: Wor wird dein Array readback[] initialisiert?
hallo erdi, das readback feld ist global und hier werden die werte reingeschrieben, die ich zur auswertung benötige. ja das intialisieren ist nicht notwendig, aber warum macht er es trotzdem nicht wenn ich es debugge. hab da noch eine funktion, wo er es nicht macht aber es wichtig ist. wenn in der Variable ucTemp = 0x80 steht dann soll gelesen werden und wenn ucTemp = 0x00. aber beim debuggen springt der cursor immer drüber, ohne es zu initialisieren!!!!!!! danke für deine bzw. eure hilfe. mfg wolfgnang void SSC_read (int iAdresse, int iNumber_of_data) { unsigned char ucTemp; ucTemp = 0x80; // uctemp = 1000 0000 -> hier wird festgelegt, dass gelesen wird, // da in RW command 1 steht (siehe Spec) ucTemp |= ((iAdresse<<3) & 0x78); // hier wird der Parameter iAdresse (Start der Adresse) der ucTemp- // Variable übergeben. Zuvor wird iAdresse um 3 Stellen nach rechts verschoben // und mit 0x78 (1111 000) UND- Verknüpft. Die OODER- Verknüpfung ist deshalb // notwendig, damit die Bits mit 1 gesetzt werden. ucTemp |= (iNumber_of_data & 0x07); // hier wird der Parameter iNumber_of_data (wieviele Adressen ab der // Startadresse gelesen werden sollen) UND verknüft mit 0x07 (111). SSCTB = ucTemp; // Übergabe der ucTemp Variable an das SCCTB (SSC transmit buffer) Register, // welche über die SSC clock an den TLE 5010 getakt wird. // Die OODER- Verknüpfung ist deshalbnotwendig, damit die Bits mit // 1 gesetzt werden. while (SSCBSY == 1); }
Ich kenne das Problem: Es liegt wahrscheinlich an deinen Makros. Ich versuche gerade, Makros zu generieren, mit denen ich einzelne Bits in Chars setzen bzw. löschen kann. Mein Aufbau entspricht deiner Funktion Auswertung, und nachdem ich die Makros umgeschrieben habe, wurde auch der letzte Wert vor dem ersten Makroaufruf initialisiert. Guck mal nach deinen Makros. Ach ja... kann mir jemand funktionierende Makros für die Bitmanipulationen geben? Meine funktionieren trotz intensivem "Probieren" immer noch nicht, und ich weiss nicht, woran es liegt heul Gruß Ralf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.