> Vilken av alla mina deadlines skall jämföra med?
Jämföra ?
Varje "deadline" är en räknare som räknar ner mot noll.
När en deadline = 0, så har du "nått deadline". Gör det som skall göras och återställ aktuell deadline = nästa intervall.
> om jag nollställer tickräknaren
Alltså wTicks ? Den behövs inte alls, så vitt jag kan förstå...
> Dessutom så tar den inte hänsyn till tidsförskjutningen.
Vilken tidsförskjutning ?
> Låt säga att jag missar min deadline med 2 ticks,
Du *kan* inte missa en deadline ! Alla deadlines kollas i "ticks-ISRen". Det är ju just det som är fördelen !
> Eftersom jag inte har koll på hur längesedan jag nådde min deadline, kan jag inte kompsensera för detta när jag sätter min nya deadline. Min periodiska funktion kommer att bli 2 ticks förskjuten i tiden vilket kan bli en ganska grov föskjutning i slutändan.
Men, varje "ticks" går ju bara 16 gr/sek. Du har alltså ca 62.500 instruktionscykler (vid 4 Mhz) på dig att komma från ISR'en till anrop av din funktion.
Hur sätts de nya deadline ? Är det ett fast intervall för varje deadline ? I så fall är det väll bara att ladda om deadline-räknaren i ISR'en !? Om inte så kommer ju de två "extra" ticksen hur som heslt att räkna ner deadline räknarna två extra steg och det är bara att lägga till det när det är dags att beräkna en ny deadline.
Så när du sätter en ny deadline så ser du ju om det har gått ett eller ett par ticks extra sedan förra deadline "gick ut" genom att deadline har blivit -1 eller -2. Plussa bara på ditt nya deadline, så kommer det att kompesneras automatiskt. Du behöver faktiskt inte ha någon speciell kod som kollar om du har missat ticks, additionen kommer att fixa det automatiskt.
Men, hela detta resonemang kan ju falla p.g.a någon egenhet i din applikation som jag inte känner till. Jag kan bara gå på vad du har berättat hittills...
