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



Teraz jest 31 mar 2020, o 10:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 28 paź 2018, o 20:20 
Offline
Nowy

Dołączył(a): 22 wrz 2014
Posty: 5
Pomógł: 0

Cześć wszystkim,
do tej pory jedynym prockiem, jakim się bawiłem była ATmega8. Tam nie mam problemów z ustawieniem timera2 w tryb CTC. Per analogia spróbowałem w ATtiny2313, ale ni diabła nie chce mi zacząć działać. Kod wygląda tak:

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


Program powinien tykać co ok 1 ms, i za każdym tyknięciem zrzucać do 0 TimerLED, gdzie przy 0 powinna dioda zmienić stan. Jednak dioda jest cały czas zgaszona. Czy problem leży w ustawieniach bitów timera0, czy zrobiłem jakiś inny, głupi, błąd, którego nie mogę znaleźć?

Z góry dziękuję na pomoc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 paź 2018, o 20:26 
Offline
Tech-support
Avatar użytkownika

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

no dobra,
przerwanie gdzie jest tam jest, ale jest.
cialo funkcji 'timers_init' jest gdzie jest ale jest.
a gdzie jest wywołanie tej funkcji?


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 paź 2018, o 21:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 870
Lokalizacja: Trójmiasto
Pomógł: 164

Tak wogule to zastanawia mnie zasadność ubierania takich rzeczy jak inicjalizacja timera w ciało funkcji.
Funkcja jest to przydatny twór w momencie gdy jakiś fragment kodu jest wykonywany wiele razy w całym programie więc by go nie powielać zasadne jest wyodrębnienie go jako funkcję i później tylko wywoływanie. Natomiast inicjalizacja jest zestawem instrukcji wykonującym się raz jedyny w czasie życia programu więc po co go obciążać instrukcjami skoków i odkładaniem danych na stosie?
Inaczej sprawa się ma gdy robimy sobie bibliotekę wówczas innej metody nie ma by z czeluści biblioteki zainicjować jakieś peryferia...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2018, o 00:32 
Offline
Nowy

Dołączył(a): 22 wrz 2014
Posty: 5
Pomógł: 0

Niniejszym pozwolę sobie zasadzić największego face-palma świata. Po wprowadzeniu zmian zaproponowanych przez Daro69 i zubika wszystko działa OK, dziękuję bardzo. Ech, czemuż to ja taki nieuważny jestem...
A co do wyodrębniania inicjalizacji timerów jako funkcji? Kopiowałem ją z programu, który napisałem pewnie jakoś ze 4 lata temu, a w ciągu tych 4 lat przez 3 nie ruszyłem mikroklocków w ogóle - zajmowałem się innymi rzeczami. Dopiero kilka dni temu wróciłem, bo mam nowe pomysły na ich wykorzystanie w połączeniu z Raspberry Pi. W każdym razie w tamtym programie miałem tę funkcję w oddzielnym pliku, który zajmował się timerami, zarówno tym sprzętowym, jak i opartymi na nim programowymi, także stąd był pomysł ubrania w funkcję.
Jeszcze raz dziękuję a pomoc, jak zwykle błąd banalny a siedzi się i się szuka nie wiadomo gdzie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2018, o 09:44 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 931
Lokalizacja: Kraków
Pomógł: 83

xentis napisał(a):
Tak wogule to zastanawia mnie zasadność ubierania takich rzeczy jak inicjalizacja timera w ciało funkcji (...) Natomiast inicjalizacja jest zestawem instrukcji wykonującym się raz jedyny w czasie życia programu więc po co go obciążać instrukcjami skoków i odkładaniem danych na stosie?
Wdaje mi się, że chodzi o czytelność kodu. A funkcję zawsze można ustawić jako inline - wtedy zawartość funkcji jest wstawiona w miejscu wywołania, więc nie ma skoków i dodatkowych elementów na stosie (no chyba, że się mylę?)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2018, o 11:13 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2058
Pomógł: 97

Dokładnie tak jak mówi kolega. Ja też tak wolę, kod jest dla mnie czytelniejszy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2018, o 19:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 119
Lokalizacja: Cinisi
Pomógł: 12

micky napisał(a):
Dokładnie tak jak mówi kolega. Ja też tak wolę, kod jest dla mnie czytelniejszy.


super sprawa jesli inicjalizujemy kilka np 5-10-15 peryferii mikrokontrolera to takie uplatanie w funkcje ma sens bo kod jest o niebo czytelniejszy moim zdaniem. Mozna np postarac sie, jesli jest taka potrzeba, napisac funkcje z parametrami do ustawien timerow, gdzie dalej podczas dzialania programu potrzebna jest zmiana ustawien timera lub tym podobne. Tak tez moim zdaniem przy optymalizacji kodu trzeba miec na uwadze czy ten jeden czy kilka/kilkanascie skokow podczas inicjalizacji da nam cokolwiek, to dzieje sie tak blyskawicznie ze raczej przy projektach innych niz automotive lub przemyslowych nie bedzie to miec kompletnie znaczenia, a jak juz kolega wyzej pisal, kod wiele przyjemniejszy dla oczu.
Pozdrawiam

_________________
sig off :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2018, o 07:59 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 931
Lokalizacja: Kraków
Pomógł: 83

Dodam jeszcze, że korzystając z generatora kodu dla STM (BuceMX) inicjalizacja każdego peryferium jest w osobnej funkcji. I kod wynikowy jest dużo bardziej czytelny niż upchnięcie wszystkiego w funkcji main.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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