Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 13:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 16 sty 2019, o 01:03 
Offline
Nowy

Dołączył(a): 29 lis 2016
Posty: 23
Pomógł: 0

Mam małą zagwozdkę z funkcją while, program nie działa mi tak jak bym tego oczekiwał i trochę się pogubiłem, bo nie jestem pewien gdzie jest błąd.
Jedna pętla while ma się zakończyć, gdy na pinach PA0 i PA1 mikrokontrolera Attiny2313 będzie stan niski, natomiast druga odwrotnie - gdy na obu pinach będzie stan wysoki. Wykombinowałem coś takiego, chyba coś za bardzo namieszałem? Oczywiście to nie cały program, tylko wycinki kodu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Te warunki będą użyte w funkcjach do sterowania mechanizmem wysuwu tacki - wysuwanie/wsuwanie do osiągnięcia skrajnego położenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2019, o 06:45 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

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

Poczytaj o algebrze Boola, o upraszczaniu funkcji boolowskich (w szczególności prawo de Morgana).


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2019, o 18:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

albo-
skoro masz wybrane PA0 i PA1, to może.

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


może?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2019, o 19:37 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Daro69 napisał(a):
albo-
skoro masz wybrane PA0 i PA1, to może.

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


może?


Tak też zapewne zadziała. Zwróć tylko uwagę, że w przypadku konieczności zmiany portu lub pinu w dalszej fazie programu trzeba będzie pamiętać, żeby odnaleźć ten fragment kodu i ręcznie zmienić liczbę 3 lub w ogóle zmienić ten fragment kodu w przypadku, gdy trzeba przenieść się z przyciskiem na inny port. A co jeśli trzeba by było (przy bardziej rozbudowanym programie) zmienić to w kilku miejscach? A jeśli wrócisz do modyfikacji kodu po dłuższej przerwie? Pewnie już nie będziesz pamiętał, gdzie właściwie kod trzeba będzie zmienić.

Lepszym rozwiązaniem byłoby przykładowo:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wtedy w razie potrzeby wystarczy zmienić PINA np. na PINB i/lub zmienić numer bitu, a kod sam się zmodyfikuje.

Ewentualnie (przy założeniu, że piny będą na pewno na tym samym porcie) rozwiązanie kolegi Daro69:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Być może wygląda to nieco bardziej skomplikowanie i trzeba się więcej napisać (ewentualnie nazwy makr można skrócić), ale jeśli w miarę rozwoju projektu trzeba będzie coś zmienić, to taki sposób pisania naprawdę procentuje.

Oczywiście nie ma takiego przymusu, będzie działać też z wpisaną "na sztywno" wartością 3, ale styl jaki przedstawiłem to taka "dobra praktyka". I proszę nie traktować moich uwag jako złośliwość czy wymądrzanie się ;) Moim zdaniem dobrze jest od początku uczyć się dobrych nawyków ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2019, o 20:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Tak, masz rację @andrews. :)
Poprawiłem w między czasie logikę w drugim "while", bo niepotrzebnie umieściłem tam '!'.
Nie ma adnotacji "edytowano", bo skorygowałem to zanim umieściłeś post.
(było - póki oba są w stanie niskim !( PINA & 3), zamiast póki nie są oba w stanie niskim ( PINA & 3).) sorka :?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2019, o 19:55 
Offline
Nowy

Dołączył(a): 29 lis 2016
Posty: 23
Pomógł: 0

Też przychylam się do pierwszej propozycji, bo dla mnie jest bardziej przejrzysta, ale wszystkim dziękuję za pomoc. Od razu zadziałało tak jak powinno :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO