Forum: Mikrocontroller und Digitale Elektronik Problem mit Variablendeklaration


von ace1001 (Gast)


Lesenswert?

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)

}

von Harry (Gast)


Lesenswert?

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

von ERDI - Soft (Gast)


Lesenswert?

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?

von ace1001 (Gast)


Lesenswert?

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);

 }

von Ralf (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.