Gast
#2459555
hi, ich hab mit meinen kollege ein "taskmanager" erstellt der soll alle 20ms abgearbeitet werden und wenn er länger als 20 ms braucht soll eine LED aufleuchten. das problem ist das selbst wenn wir alles auskommentiert haben oder die tasks leer lassen die 20ms anscheinend überschritten werden. TCCR2A = (1<<WGM21) |(0<<WGM20) | (0<<COM2A1) | (1<<COM2A0) | (1<<CS22) | (1<<CS21) | (1<<CS20) ; OCR2A= 76; int task_state = 0; uint8_t Led_status=0; while (1) { { //*********** Taskmanager alle 20ms*************************** ocr2a >> "75" switch (task_state) { case (0): { } break; case (1): { } break; case (2): { } break; case (3): { } break; case (4): { } break; default: { } break; } if (task_state == 4) { task_state = 0; } else { task_state ++; } if (bit_is_set(TIFR2,OCF2A)) { PORTB |= (1<<PB4); //FEHLER: Task Dauert zu lang! } while (bit_is_clear(TIFR2,OCF2A)) // Warte bis Timer Compare Match Flag gesetzt ist { //irgendwas unkritisches tun (idle-Task) } TIFR2 |= (1<<OCF2A); //Timer Compare Match Flag rücksetzen } } return 0; }