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 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/ |