// Versuch zur Beschleunigung der Verschiebung von HPOS, VPOS, Triggerlevel und Triggerpos.: // Eine Priorisierung zwischen den Klassen kann nur vom Top-Level, also aus TomCat realisiert // werden. Ohne erhebliche Beschleunigung der gesamten Grafik bleibt nur übrig das Feedback // für den Anwender zu verbessern. //TomCat ändern zu: while (0 == 0) { //irq_temp = HW_Device.Read_IRQ(); //HW_Device.Reset_the_Watchdog(); // Reset the WatchDog // If a position-wheel ist turned, only refresh signs to give a faster feedback if (HW_Device.Rotary_Interface()) { Screen.refresh_signs(); HW_Device.TransferPlanes(); nr_delay(25); } else { HW_Device.Keyboard_Interface(); HW_Device.Handle_ADC(); Screen.ProcessSignalData(); Screen.DrawSignals(1); HW_Device.TransferPlanes(); HW_Device.Transfer_USB_Data(); Flash.Write_Config_Flash(); } } return 0; // Rotary_Interface in hardware_t in bool ändern, Rückgabewert wird in bool shift_s gemerkt: bool Hardware::Rotary_Interface(void) { bool shift_s = 0; if (Rotary_Changed == 0) return shift_s ; // dort auch Rückgabe = 1 wenn Verschiebung: if ((Rotary_Switch & 0x00000001) == 0x00000001) { ResetTimer(); ON_Rotary_Position(); shift_s = 1; } // ON Trigger Position else if ((Rotary_Switch & 0x00000002) == 0x00000002) { ResetTimer(); ON_Trigger_Level(); shift_s = 1; } else if ((Rotary_Switch & 0x00000004) == 0x00000004) { ResetTimer(); ON_Main_Wheel(); } else if ((Rotary_Switch & 0x00000008) == 0x00000008) { ResetTimer(); ON_Timebase(); } else if ((Rotary_Switch & 0x00000010) == 0x00000010) { ResetTimer(); ON_Zero_Channel_2(); shift_s = 1; } else if ((Rotary_Switch & 0x00000020) == 0x00000020) { ResetTimer(); ON_Voltage_Channel_2(); } else if ((Rotary_Switch & 0x00000040) == 0x00000040) { ResetTimer(); ON_Voltage_Channel_1(); } else if ((Rotary_Switch & 0x00000080) == 0x00000080) { ResetTimer(); ON_Zero_Channel_1(); shift_s = 1; } else if ((Rotary_Switch & 0x00000100) == 0x00000100) { ResetTimer(); ON_Zero_Channel_4(); shift_s = 1; } else if ((Rotary_Switch & 0x00000200) == 0x00000200) { ResetTimer(); ON_Voltage_Channel_4(); } else if ((Rotary_Switch & 0x00000400) == 0x00000400) { ResetTimer(); ON_Voltage_Channel_3(); } else if ((Rotary_Switch & 0x00000800) == 0x00000800) { ResetTimer(); ON_Zero_Channel_3(); shift_s = 1; } // ... Rotary_Steps = 0; return shift_s ; } // refresh_signs wird am Ende von display_t eingefügt und ruft eigentlich nur DRAWSIGNS auf. // Es bietet aber auch genutzten Raum für Anpassungen: //Guido Test void Display::refresh_signs(void) { DRAWSIGNS(); ClearPlane = 0xE0; UpdateMarkerPlane = true; }