mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Variablendeklaration


Autor: ace1001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

}

Autor: Harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ace1001 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

 }

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.