Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Bug bei bedingter Bewertung? Kategorie: Programmierung C (von Wolfgang - 11.02.2009 16:57)
Ich nutze:
C-Control Pro Mega128
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)