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



Teraz jest 4 kwi 2026, o 19:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 6 sty 2016, o 19:08 
Offline
Nowy

Dołączył(a): 02 lis 2015
Posty: 4
Pomógł: 0

Cześć, mampewien problem z makrami, potrzebuję pomocy bardziej doświadczonej osoby.
mam 8 czujników DS18B20 i 8 diod
jeśli temperatura jest za wysoka to dioda mruga co 0.5s
jeśli za niska - świeci światłem ciągłym
jeśli ok - nic się nie dzieje
sprawdzanie i mruganie mam załatwione wewnątrz takiej konstrukcji
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

pomiar_temp[][] to bufor do odczytu temperatury
wcześniej instrukcja sprawdza, czy temp jest za niska (-1), ok (0) czy za wysoka (1) i daje wartość w 4 kolumnie
diody mam na LED_1, LED_2, ..., LED_8
pytanie brzmi, jak te if'y zastąpić makrem LED_(x)?

Zrobiłem takie cudo, ale kompilator krzyczy mi, że LED_(i) to niezdefiniowana funkcja...
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 19:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Mieszasz kod dla preprocesora (czyli wykonywany przed kompilacją) z kodem dla kompilatora.
i jest zmienną kodu w C. Więc preprocesor robi z tego LED_i.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 7 minutach ]

Jak potrzebujesz koniecznie mieć gdzieś indziej zdefiniowane LEDy, to możesz zrobić tablicę LED[] i w niej przypisywać wartości.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 20:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

Nie wiem dlaczego tak w stronę makr ciągniecie. Od makr należy uciekać jak najdalej. Wiadomo, że nieraz ułatwią wiele, ale mają jedną podstawową wadę - nie są sprawdzane przez kompilator (np. zgodność typu). Zamiast makr należy stosować funkcje - po to one są.
Fragment:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

a funkcje obsługi LEDów robisz osobno, np.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zaletą jest, że można dowolnie podłączyć LED (port, pin, sposób sterowania itp.), kompilator sprawdza poprawność, w funkcji wywal_blad() możemy zdefiniować co ma się dziać w programie, gdy w jakimś nieprzewidzianym przypadku zmienna i wyjdzie poza dopuszczalny zakres. Łatwo też będzie zmienić, gdy zamiast zapalania diody będziemy chcieli jeszcze coś obsłużyć (np. dodać efekt dżwiękowy) - wystarczy zmodyfikować zapal_led(). Oczywiście lepiej nazwę wtedy zmienić, np. na: reakcja_temp_za_wysoka() - taka nazwa pozwala też łatwo rozczytać się w kodzie i znaleźć błąd w złym przypisaniu funkcji w danej sytuacji.
Aha, być może ciało funkcji zapal_led gasi, a nie zapala, ale to już sam wiesz. Wiem, że użyłem makr, ale tylko tych, które definiują porty, piny itp. Tego się raczej nie przeskoczy, jeśli chce się zachować czytelność kodu. :D Zresztą zaleca się używanie definicji zastępujących wartości liczbowe, np. zamiast 3.14 lepiej użyć
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

gdyż, jeśli będzie potrzeba zwiększyć jej dokładność to wystarczy zrobić to w definicji a nie w wielu miejscach programu, gdzie jej użyliśmy. Podobnie jeśli przyjdzie zmienić typ można zapisać:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 20:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Napisałem:
Cytuj:
Jak potrzebujesz koniecznie mieć gdzieś indziej zdefiniowane LEDy, to możesz zrobić tablicę LED[] i w niej przypisywać wartości.
więc nie zgodzę się z:
Cytuj:
Nie wiem dlaczego tak w stronę makr ciągniecie.
Zamiast funkcji robisz tablicę:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 22:10 
Offline
Nowy

Dołączył(a): 02 lis 2015
Posty: 4
Pomógł: 0

Czasem proste rozwiązania są na wyciągnięcie ręki, wystarczy tylko spojrzeć z ciut innej strony :) dziękuję za pomoc :)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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