ATNEL tech-forum
https://forum.atnel.pl/

Pętla While a inne zadania w programie
https://forum.atnel.pl/topic18355.html
Strona 1 z 1

Autor:  Qume [ 7 maja 2017, o 22:26 ]
Tytuł:  Pętla While a inne zadania w programie

Cóż, nie wiedziałem jak dokładnie zatytułować wątek więc napisał jak napisałem...

Mikrokontroler to Atmega32 taktowana zewnętrznym kwarcem 8MHz
Mam taki oto szkielet programu w którym w pętli Do zagnieżdżona jest pętla While

Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wiadomo, że jeśli warunek nie jest spełniony to program cały czas krąży w pętli while.

Równocześnie z pętlą while program wykonuje inne zadania - m.in.:
- obsługa wyświetlacza
- zwiększanie pięciu liczników (co sekundę)
- pomiar i uśrednianie ADC na jednym kanale
Te 3 zadania wykonuję w przerwaniu od TIMER0 - co 1 sekundę

Wszystko działa, ale nadszedł czas na modyfikację programu.
Musiałem dodać obsługę klawiatury oraz...komunikację przez UART...
Dodałem obsługę tych dodatkowych instrukcji w przerwaniu od timera0 i działa, ale wydaje mi się, że za dużo tego się dzieje w tym przerwaniu.

Pytanie do Was:
Jak usprawnić cały program i urządzenie żeby trochę odciążyć ilość tych operacji w tym przerwaniu?

Czy dodanie kolejnego przerwania od TIMER2 i wrzucenie tam niektórych funkcji coś pomoże?
Chciałbym zwiększyć częstotliwość taktowania do 16MHz - czy to dobry pomysł?

Czy jest jakaś inna możliwość usprawnienia działania takiego programu?

Autor:  Jarecki [ 8 maja 2017, o 07:16 ]
Tytuł:  Re: Pętla While a inne zadania w programie

Generalnie w przerwaniu powinieneś ustawić tylko flagę na 1 a w pętli głównej sprawdzać jej stan i gdy jest równy 1 wtedy wykonujesz wszystkie zadania jakie teraz masz w przerwaniu. Jeżeli przerwania jest zgłaszane co sekundę to tych zadań w pętli głównej może być naprawdę dużo :)

Autor:  grzeniu 73 [ 8 maja 2017, o 09:18 ]
Tytuł:  Re: Pętla While a inne zadania w programie

Na zwykłym IF Then możesz się pozbyć pętli while. Co do przerwań to tak jak wyżej napisane.

Autor:  Qume [ 8 maja 2017, o 16:27 ]
Tytuł:  Re: Pętla While a inne zadania w programie

Jarecki napisał(a):
Generalnie w przerwaniu powinieneś ustawić tylko flagę na 1 a w pętli głównej sprawdzać jej stan i gdy jest równy 1 wtedy wykonujesz wszystkie zadania jakie teraz masz w przerwaniu. Jeżeli przerwania jest zgłaszane co sekundę to tych zadań w pętli głównej może być naprawdę dużo :)


Chciałbym tak zrobić jak piszesz bo to by było super rozwiązanie (czasem je stosuję w innych programach bez pętli while), ale jak wspominałem pętla główna u mnie do załączenie podświetlenia i od razu skok do pętli while a z pętli while do pętli Do program "wyskakuje" tylko na chwilę i to w różnych odstępach czasu.
Na początku co 10 sekund a potem nawet co 30 minut... - tyle trwają procesy które wykonują się w pętli while.

Jeszcze jedno pytanie odnośnie Bascomowego symulatora.
Czy spotkał się ktoś z tym, że symulator krąży sobie tylko w pętli Do Loop a nie skacze do przerwań od timera?
Mam właśnie taki przypadek.
Próbowałem nawet na innym programie - pętla Do robi coś tam a w przerwaniu powinien się zwiększać jakiś tam licznik (zmienna Word) i niestety w symulatorze nic się z tą zmienną nie dzieje...Dlaczego?

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/