witam, mam problem postaci:
za pomocą pętli while (i-- >0) realizuje opóźnienie...
teraz gdy wystąpi przerwanie pierwsze w momencie gdy jest przetwarzana pętla while (i-- > 0) to zmienna i ma taką samą wartość po wykonaniu funkcji obsługi przerwania jak przed, jak się domyślam jest to spowodowane tym, że wartość zmiennej i wędruje na stos co moim zdaniem nie powinno mieć miejsca w przypadku zmiennych typu volatile (dodatkowo optymalizacja w kompilatorze jest wyłączona), czy ktoś z szanownych forumowiczów zna sposób na rozwiązanie powyższego problemu? dodam że interesuje mnie dokładnie taki sposób realizowania opóźnienia jak zaprezentowałem, liczniki i inne tego typu rzeczy nie wchodzą w grę ponieważ już wszystkie wykorzystałem do innego celu... pozdrawiam
volatile int i;
ISR (INT0_vect) {
/* obsługa przerwania */
i-=10;
}
int main(void) {
/* ustawienie wartości początkowych zmiennych, włączenie przerwań itp */
while(1) {
/* kod w c */
while (i-- > 0) asm("nop");
/* kod w c */
}
}
za pomocą pętli while (i-- >0) realizuje opóźnienie...
teraz gdy wystąpi przerwanie pierwsze w momencie gdy jest przetwarzana pętla while (i-- > 0) to zmienna i ma taką samą wartość po wykonaniu funkcji obsługi przerwania jak przed, jak się domyślam jest to spowodowane tym, że wartość zmiennej i wędruje na stos co moim zdaniem nie powinno mieć miejsca w przypadku zmiennych typu volatile (dodatkowo optymalizacja w kompilatorze jest wyłączona), czy ktoś z szanownych forumowiczów zna sposób na rozwiązanie powyższego problemu? dodam że interesuje mnie dokładnie taki sposób realizowania opóźnienia jak zaprezentowałem, liczniki i inne tego typu rzeczy nie wchodzą w grę ponieważ już wszystkie wykorzystałem do innego celu... pozdrawiam
