XRay117
13.01.2014, 08:50
Hallo alle Zusammen,
Vorneweg -> ich bin Neu in diesem Forum und bin mir nicht ganz sicher, ob ich das Thema im Richtigen Bereich erstellt habe. Aber Ich denke Ihr werdet mich zur Not schon korrigieren, oder ich dezent darauf hinweisen!
Mein Problem ist mehr ein grundsätzliches Verständnisproblem beim Programmieren. Und zwar habe ich jetzt mehrere Roboter von Arexx und mit den bereits definierten Funktionen aus den bereitgestellten Libraries ist es kinder einfach zu programmieren. Da mich aber
der Hintergrund genauer interessierte, wollte ich mir die Funktionen im Detail angucken und da stolpere ich bereits über die Funktionsweise von Sleep und mSleep:
Vorneweg mal der Code wie Ich ihn betrachte:
ISR(TIMER2_COMP_vect)
{
delay_timer++;
if(ms_timer++ >= 10) { // 10 * 100µs = 1ms
// 16bit Stopwatches:
if(stopwatches.watches & STOPWATCH1)
stopwatches.watch1++;
if(stopwatches.watches & STOPWATCH2)
stopwatches.watch2++;
if(stopwatches.watches & STOPWATCH3)
stopwatches.watch3++;
if(stopwatches.watches & STOPWATCH4)
stopwatches.watch4++;
if(stopwatches.watches & STOPWATCH5)
stopwatches.watch5++;
if(stopwatches.watches & STOPWATCH6)
stopwatches.watch6++;
if(stopwatches.watches & STOPWATCH7)
stopwatches.watch7++;
if(stopwatches.watches & STOPWATCH8)
stopwatches.watch8++;
ms_timer=0;
}
}
void sleep(uint8_t time)
{
for (delay_timer = 0; delay_timer < time;);
}
void mSleep(uint16_t time)
{
while (time--) sleep(10);
}
Mein Problem an der ganzen Sache ist, dass nach meinem (beschränkten) Programmierwissen die for-Schleife in der sleep Funktion ja quasi endlos ist. Schließlich wird delay_timer ja nicht inkrementell erhöht...
Sofern Ich das mitgekriegt habe treten dann wohl diese Interrupt Service Routinen (ISR) auf, um das ganze zu Unterbrechen oder?
Allerdings weis ich nicht, warum und wann genau diese auftritt? Für mich ist das ganze irgendwie nicht klar. Vielleicht erbarmt sich von euch jemand und kann mir dabei weiterhelfen und mir den Funktionsaufbau genauer erklären. Ich weis auch, dass ich diese Funktion einfach nur
wie bisher verwenden könnte, allerdings will ich einen genaueren Einblick in die Sache.
Ich danke euch bereits
Grüße
Vorneweg -> ich bin Neu in diesem Forum und bin mir nicht ganz sicher, ob ich das Thema im Richtigen Bereich erstellt habe. Aber Ich denke Ihr werdet mich zur Not schon korrigieren, oder ich dezent darauf hinweisen!
Mein Problem ist mehr ein grundsätzliches Verständnisproblem beim Programmieren. Und zwar habe ich jetzt mehrere Roboter von Arexx und mit den bereits definierten Funktionen aus den bereitgestellten Libraries ist es kinder einfach zu programmieren. Da mich aber
der Hintergrund genauer interessierte, wollte ich mir die Funktionen im Detail angucken und da stolpere ich bereits über die Funktionsweise von Sleep und mSleep:
Vorneweg mal der Code wie Ich ihn betrachte:
ISR(TIMER2_COMP_vect)
{
delay_timer++;
if(ms_timer++ >= 10) { // 10 * 100µs = 1ms
// 16bit Stopwatches:
if(stopwatches.watches & STOPWATCH1)
stopwatches.watch1++;
if(stopwatches.watches & STOPWATCH2)
stopwatches.watch2++;
if(stopwatches.watches & STOPWATCH3)
stopwatches.watch3++;
if(stopwatches.watches & STOPWATCH4)
stopwatches.watch4++;
if(stopwatches.watches & STOPWATCH5)
stopwatches.watch5++;
if(stopwatches.watches & STOPWATCH6)
stopwatches.watch6++;
if(stopwatches.watches & STOPWATCH7)
stopwatches.watch7++;
if(stopwatches.watches & STOPWATCH8)
stopwatches.watch8++;
ms_timer=0;
}
}
void sleep(uint8_t time)
{
for (delay_timer = 0; delay_timer < time;);
}
void mSleep(uint16_t time)
{
while (time--) sleep(10);
}
Mein Problem an der ganzen Sache ist, dass nach meinem (beschränkten) Programmierwissen die for-Schleife in der sleep Funktion ja quasi endlos ist. Schließlich wird delay_timer ja nicht inkrementell erhöht...
Sofern Ich das mitgekriegt habe treten dann wohl diese Interrupt Service Routinen (ISR) auf, um das ganze zu Unterbrechen oder?
Allerdings weis ich nicht, warum und wann genau diese auftritt? Für mich ist das ganze irgendwie nicht klar. Vielleicht erbarmt sich von euch jemand und kann mir dabei weiterhelfen und mir den Funktionsaufbau genauer erklären. Ich weis auch, dass ich diese Funktion einfach nur
wie bisher verwenden könnte, allerdings will ich einen genaueren Einblick in die Sache.
Ich danke euch bereits
Grüße