Bug bei bedingter Bewertung? Kategorie: Programmierung C (von Wolfgang - 11.02.2009 16:57) | ||
| ||
Hallo, ich nutzt zur Zeit Beta 1.98 mit C-Compiler Float-Variablen benenne ich zur Unterscheidung von Integers mit einem führenden "f" Ich lasse in einer Interrupt-Routine jede Sekunde eine Regel-Routine laufen, die als Ergebnis in der Float-Variablen "fDAC_neu" einen neuen Stellwert liefert, der (nach Begrenzung auf das Intervall 0..65536) per SPI-Schnittstelle in einen externen 16-Bit-DAC geschrieben wird. Dazu kopiere ich fDac_neu in die Integer-Vaiable "DAC_Wert"und schicke die per SPI raus - das funktioniert! Interrupt-Routine: ... fDAC_neu = MITTE + fProp +fInteg + fDblInteg; // Berechnung eines neuen Regel-Wertes if (fDAC_neu>65535.0) fDAC_neu=65535.0; if (fDAC_neu<0.0) fDAC_neu=0.0; // Begrenzung DAC_Wert = fDAC_neu; // Wandlung nach Int Port_WriteBit(SYNC, Low); // Selektieren des externen DAC SPI_Write(DAC_Wert >> 8); // 2 Byte per SPI aussenden SPI_Write(DAC_Wert & 0x00FF); Port_WriteBit(SYNC, High); // De-selektieren des DAC ... Nun wollte ich optional den DAC auf einem vom Hauptprogramm vorzugebenden Wert einfrieren, der in der Integer-Variable "man_DAC" abgelegt ist. Zu diesem Zweck habe ich eine Byte-Variable "Tune_Flag" eingeführt, die im Hauptprogramm auf entweder "True" (->Regeln) oder "False" (-> Einfrieren) gesetzt werden kann, wobei definiert ist: #define False 0 #define True 1 In der Interrupt-Routine habe ich dann die Zuweisung DAC_Wert = fDAC_neu; // Wandlung nach Int ersetzt durch DAC_Wert = (Tune_Flag)? fDAC_neu : man_DAC; Falls Tune_Flag==True, so geht das falsch: die Regelschleife 'spinnt' - es wird weder der Wert fDAC_neu noch der Wert man_DAC verwendet! (bei Tune_Flag==False geht es richtig: man_DAC wird verwendet). Dasselbe gilt, wenn ich die Bedingung ausformuliere zu "(Tune_Flag==True)? Was ist falsch? | ||
Antwort schreiben Antworten: Re: Bug bei bedingter Bewertung? (von PeterS - 11.02.2009 17:47) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum