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



Teraz jest 13 kwi 2026, o 04:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 7 paź 2015, o 19:21 
Offline
Użytkownik

Dołączył(a): 27 cze 2015
Posty: 60
Pomógł: 0

Ciąg dalszy moich rozważań nad C :)
Zrobiłem sobie taki programowy PWM:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wszystko jest ok, działa jak należy, ale mam pytanie co do while(1) w funkcji glownej. Czemu jak usunę while(1) to dioda się nie ściemnia? Na początku dałem pwm1=50 właśnie wewnątrz funkcji while(1) ponieważ myslałem że inaczej nie będzie program działał, ale się myliłem, bo działa i jak jest wewnątrz while jak i przed.

Mógłby mi ktoś wytłumaczyć "mechanizm" działania tego while(1) na końcu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:27 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

bez while(1) program się wykonuje tylko 1 raz ,
dlatego ci nie działa ...
While(1) to po prostu nieskończona pętla powodująca ciągłe wykonywanie main()
tak na szybciora :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:31 
Offline
Użytkownik

Dołączył(a): 20 lip 2015
Posty: 83
Pomógł: 6

while(1) to nieskończona pętla, która zapobiega wykonaniu programu do końca a w rezultacie zatrzymaniu się pracy mikrokontrolera.

Jeżeli tego nie dasz, program zakończy się i mikrokontroler "stanie" w rezultacie przerwanie nie będzie zgłaszane.

Można to prównać do stacyjki w aucie, przekręcasz o 1 krok stacyjki, włączasz zapłon (inicjalizacja, te twoje instrukcje przed while(1)), ale dopiero przekręcenie kluczyka do oporu powoduje załączenie silnika ( while(1) ) i pracę pojazdu :) Analogia w tym taka, że jeżeli nie zapalisz samochodu, nie pojedziesz (nie zgłosisz przerwania chęci poruszania się :P )


Pozdro ;)


EDIT: aj, aj ubiegłeś mnie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:32 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27453
Lokalizacja: Szczecin
Pomógł: 1045

shark31 napisał(a):
Czemu jak usunę while(1) to dioda się nie ściemnia?

Kolega posiada Bluebooka ? .... chyba tak ? to proszę sobie zajrzeć do rozdziału o PODSTAWACH C ... Tak jak pisze kolega wyżej ... program kończy swoje działanie czyli zachowuje się prawidłowo ... Warto więc poczytać o tych podstawach, i że cały program w C to tylko i wyłącznie funkcje a jedna z nich (ta główna) ;) nigdy nie może się skończyć jeśli program ma działać.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:32 
Offline
Użytkownik

Dołączył(a): 27 cze 2015
Posty: 60
Pomógł: 0

No to tez mniej wiecej zrozumialem juz z bluebooka, ale myslalem ze trzeba umieścić pwm1 wewnatrz tej funkcji aby wartość była wpisywana "na okrągło". Czy może dzięki while(1) cala main() jest wykonywana na okrągło? Nawet inicjalizacja itp. tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27453
Lokalizacja: Szczecin
Pomógł: 1045

shark31 napisał(a):
Nawet inicjalizacja itp. tak?

ABSOLUTNIE nie ;) z jakiej racji ?

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


koniec

i tego się trzymaj

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:34 
Offline
Użytkownik

Dołączył(a): 27 cze 2015
Posty: 60
Pomógł: 0

Przeczytałem ten rozdział kilka razy:) Po prostu czasami zostaje jakas mała niejasność i pewnie jeszcze nie raz o takie coś zapytam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27453
Lokalizacja: Szczecin
Pomógł: 1045

shark31 napisał(a):
ale myslalem ze trzeba umieścić pwm1 wewnatrz tej funkcji aby wartość była wpisywana "na okrągło"


A po co? skoro wystarczy raz wpisać - jeśli oczywiście sam nie chcesz aby się zmieniała w trakcie

------------------------ [ Dodano po: kilkunastu sekundach ]

shark31 napisał(a):
Po prostu czasami zostaje jakas mała niejasność i pewnie jeszcze nie raz o takie coś zapytam.

Po to jest to forum

a kto pyta - nie błądzi ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:35 
Offline
Użytkownik

Dołączył(a): 20 lip 2015
Posty: 83
Pomógł: 6

shark31 napisał(a):
Czy może dzięki while(1) cala main() jest wykonywana na okrągło? Nawet inicjalizacja itp. tak?



Nie, wykonywane są tylko instrukcje wewnątrz funkcji while oraz ewentualne instrukcje z przerwań

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


warunek musi zostać spełniony, żeby pętla wykonała się. 1 jest synonimem true, zatem po wpisaniu while(1) wpisujesz tak naprawdę while(true) co skutkuje tym że warunek jest zawsze spełniony i pętla wykonuje się nieskończoną ilość razy


EDIT: Kurczę, jaki ja jestem powolny :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2015, o 19:40 
Offline
Użytkownik

Dołączył(a): 27 cze 2015
Posty: 60
Pomógł: 0

Dobra, ekstra. Wyobraziłem sobie to więc git:) Dzięki za pomoc i czas na przetworniki ADC.



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: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO