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



Teraz jest 28 mar 2024, o 22:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 45 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 4 paź 2017, o 20:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Witajcie kolejne moje pytanie tym razem do rozdziału o Wyświetlaczach LCD nie spotkałem się wcześniej w książce z takim zapisem makr jak poniżej, czy możecie mi objaśnić jak to działa?

co to znaczy PORT(x) ? i czemu dodaje się (S) SPORT(x) ? ;)

Kod:
#define PORT(x) SPORT(x)      // co daje taki zapis?
#define SPORT(x) (PORT##x) // co daje taki zapis?

#define PIN(x)  SPIN(x)    // co daje taki zapis?
#define SPIN(x) (PIN##x)
// co daje taki zapis?

Dziękuje Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2017, o 20:56 
Offline
Użytkownik
Avatar użytkownika

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

są to makra które ułatwiają konfigurowanie biblioteki. Np tak jak w rozdziale od LCD:
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 wygodny sposób dla użytkownika widać co jest na jakim porcie i pinie bo zamiast litery A można wpisać dowolną inną literę portu a za numerek dowolny inny numer pinu danego portu, a dzięki tym makrom preprocesor poskleja litery i numerki z odpowiednimi nazwami np PORT oraz literę A sklei w gotowe do przełknięcia przez kompilator PORTA .

No ale Mirek opisał to dokładnie w rozdziale o LCD, poczytaj dokładnie ten rozdział.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2017, o 21:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

W tym wątku masz dokładnie wyjaśnione jak to dziala topic105.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2017, o 21:57 
Offline
Moderator
Avatar użytkownika

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

jacekk232 napisał(a):
W tym wątku masz dokładnie wyjaśnione jak to dziala topic105.html


ZDECYDOWANIE również polecam ten wątek

_________________
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: 5 paź 2017, o 16:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

co to jest sport() ?
skąd się to wzięło jeśli jest to jakieś polecenie to gdzie szukać listy takich poleceń preprocesora z opisem co z czym się je?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2017, o 16:52 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
co to jest sport() ?
skąd się to wzięło jeśli jest to jakieś polecenie to gdzie szukać listy takich poleceń preprocesora z opisem co z czym się je?


ale jakie polecenie ? toż hmmm czy kolega wie jak działa #define ?

toż SPORT() to własnie makro tworzone za pomocą #define równie dobrze możesz sobie tam wpisać
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
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: 5 paź 2017, o 16:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Wiem jak działa dyrektywa #define , zastanowiło mnie skąd się wzięło w kodzie sport() jakie ma znaczenie.

#define nazwa zastępowana spacja nazwa zastąpiona



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2017, o 17:29 
Offline
Użytkownik
Avatar użytkownika

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

Odpowiedź Mirka została wstawiona, jak jeszcze pisałem... może to coś pomoże

To nie jest polecenie. Możesz tam wpisać cokolwiek. Tłumaczył to dobrze Mirek w wątku, do którego odwołują się koledzy wyżej.
Używasz tego makra, żeby można było w łatwy sposób określić pin, do którego podłączasz... coś.
Pisząc samo
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i używając później w programie makra w stylu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
otrzymałbyś
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
czyli błąd.
Spróbuję jeszcze raz wyjaśnić, tak jak pisał Mirek:
Gdzieś w programie przypisujesz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A następnie robisz inicjalizację wyjścia:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Działanie makra, o które pytasz jest następujące:
Najpierw wywoływane jest:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I teraz dochodzimy do wywołania drugiego makra:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Operator ## to połączenie ciągów znaków przed i po operatorze. Więc na koniec dostajesz:
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 paź 2017, o 07:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Nie rozumiem jednego zapis PORT () wygląda jak wywołanie funkcji tylko jak to jest w przypadku preprocesora .
Też występuje przekazywanie argumentów ,a nazwa PORT to nazwa funkcji ?

Kod:
#define PORT(D)  SPORT(D)


Co wtedy gdy wystąpi taki zapis ,podwójne wywołanie funkcji SPORT () to też funkcja ?

W tego rodzaju zapisie.


Hmm chyba coś mieszam ale odpowiedź cie. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 paź 2017, o 08:29 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
Nie rozumiem jednego zapis PORT () wygląda jak wywołanie funkcji tylko jak to jest w przypadku preprocesora .
Też występuje przekazywanie argumentów ,a nazwa PORT to nazwa funkcji ?


No przecież #define nie służy TYLKO do definiowania stałych dosłownych czy literałów

masz przecież i o tym w Bluebooku, że można tworzyć tzw MAKRA - czyli odpowiedniki prostych funkcji no po to dodaje się nawiasy i argumenty np

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


w czym problem?

_________________
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: 6 paź 2017, o 08:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Czyli SPORT () to przygotowana funkcja pomocnicza do, której przekazywany jest argument z funkcji ,która była zdefiniowana preprocesorowi wyźej ,PORT () określony pomiędzy nawiasami .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 paź 2017, o 09:47 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Czyli SPORT () to przygotowana funkcja pomocnicza

Nie, to nie żadna funkcja, to jest makro przygotowane za pomocą #define i ma ono na celu tylko odpowiednie posklejanie nazw - nie wygeneruje samo z siebie żadnego kawałka kodu źródłowego

_________________
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: 6 paź 2017, o 11:44 
Offline
Użytkownik
Avatar użytkownika

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

Kolego procek87, poczytaj o preprocesorze. Na przykład tu:
https://4programmers.net/C/Preprocesor
Działanie preprocesora polega na tym, że zamienia jeden tekst na inny, bez sprawdzania poprawności(!)
Możesz tworzyć proste "funkcje", ale nie możesz do argumentów tych funkcji przypisywać zmiennych. A nie możesz, ponieważ preprocesor działa przed kompilatorem. Wtedy, kiedy jeszcze nie wie, że w programie masz funkcje, zmienne...
Nie wiem, jak jeszcze można to wytłumaczyć

A o makrach możesz przeczytać tu: https://pl.wikibooks.org/wiki/C/Preprocesor#Makra



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2017, o 09:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

ok dzięki już zrozumiałem ;) .
A teraz znalazłem fajny symulator Wyświetlacza LCD dobre do lepszego poznania :

http://www.dinceraydin.com/djlcdsim/djlcdsim.html

i krótki filmik:

https://www.youtube.com/watch?v=bfqz0JQA0Rw

może komuś się przyda ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2017, o 11:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Właśnie zależałoby mi by przećwiczyć sobie to na zestawie atb czyli źywy organizm , nie wiem jak napisać program który pokazywały stany lini wyswietlacza na diodach Led?
Znalazłem pod linkiem użytkownik też sobie wymyślił fajny sposób na szybsze pojmowanie wyświetlacza proszę:
https://youtu.be/tOLnAFhUVjw



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2017, o 12:04 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
Znalazłem pod linkiem użytkownik też sobie wymyślił fajny sposób na szybsze pojmowanie wyświetlacza proszę:
https://youtu.be/tOLnAFhUVjw


To jest wg mnie NAJLEPSZY sposób a nie tam te jakieś na stronach www ;) macanie LCD przez WWW to tak jak lizanie lizaka przez papierek :lol:

_________________
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ź 2017, o 13:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Podpowiedzcie mi jak powinien wyglądać kod do atb , do takiego procka jeśli chciałbym się nim tak bawić w celu sprawdzania i nauki LCD na atb .
Natchnoł mnie kolega z tego linku:

https://youtu.be/tOLnAFhUVjw

chciałem od początku sobie czytać ten rozdział i migać na nim w ten sposób jak w linku. Ciekawy sposób nauki co? ;) najpewniej rozwiąże to wiele pytań.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2017, o 22:14 
Offline
Użytkownik
Avatar użytkownika

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

naskrobane na szybko i sprawdzone na zestawie ATB 1.05a
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Garść instruktarzu:
W sekcji konfiguracja należy poustawiać sobie na jakich pinach uC mają być jakie sygnały:
(jako że posiadam ATB 1.05A obecna konfiguracja jest pod porty i piny które można zapiąć zworkami - zarówno dla wyświetlacza, jak i ledów, jedynie przyciski trzeba okablować do portu D0 - D4)
i tak pierwszy blok to piny podłączone do wyświetlacza, drugi blok to piny podłączone do ledów kontrolnych na których będzie pokazywany stan poszczególnych linii wyświetlacza (jako że ledy na zestawie ATB są podłączone anodami do Vcc więc ich zaświecenie następuje poprzez podanie "0" więc sygnały dla ledów są odwrócone w stosunku do sygnałów wyświetlacza tak by stan 1 pinu LCD sygnalizowany był zaświeceniem diody), natomiast trzeci ostatni blok to piny do których podłączamy pięć przycisków.
Przycisk N_D_UP służy do zwiększania zawartości buforka, który przechowuje stan panujący na pinach D4-D7 wyświetlacza, natomiast N_D_DOWN zmniejsza zawartość buforka. Przytrzymanie powyższych przycisków po około 0,6s powoduje automatyczne inkrementowanie/dekrementowanie zawartości bufora co 0,3s do czasu puszczenia przycisku.
Pozostałe przyciski mają blokadę, ich naciśnięcie zmienia stan danego pinu na przeciwny 1 raz, a następnie dopóki są trzymane cały program stoi.
Jako że program jest do celów dydaktycznych i dedykowany dla początkujących, eliminacja drgań styków przycisków zrobiona jest na delayach tak by nie gmatwać programu.
Natomiast makro:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
działa podobnie jak to z przykładu z BB odnośnie LCD tyle, że zostało zmienione tak by było uniwersalne i jednolite dla wszystkich rejestrów I/O (jedno i to samo dla PORT, PIN i DDR).
Teraz wystarczy rozpisać sobie wszystkie komendy LCD-ka tak by nie biegać po nocie i można się bawić w ręczne sterowanie ;)
Obrazek


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2017, o 06:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Wspaniale xentis Dziękuję i dobrze że jest to w tym wątku ;)
Przyda się pewnie początkującym takim jak ja ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Gdy zdawało mi się że rozumiem ogarnęły mną wątpliwości ;) albo za głęboko drążę , w każdym bądź razie jestem w punkcie wyjścia ;) pomocy :(

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


Preprocesor dostrzega tylko definicje makra pierwszego przed spacją , gdy dochodzi do linijki pierwszej widzi PORT(x) zamiast x podstawia stałą dosłowną LCD_RSPORT nasza definicja wygląda teraz tak :

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


pytanie co jest pod x w makro SPORT(x) po prawej stronie przekazany LCD_RSPORT, czy już jego argument #define LCD_RSPORT D?

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


Dlaczego jest tak że preprocesor w drógiej dopiero linijce dostrzega że pomiedzy nawiasami jest D a nie dalej stała dosłowna LCD_RSPORT . Może ktoś to zobrazować jak przybyłemu z księżyca. ;)

tłumaczenia z tematu : topic105.html
nie do końca do mnie trafiają ;)

Czy ktoś podejmie się próby wytłumaczenia mi tego jeszcze raz ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 18:20 
Offline
Użytkownik
Avatar użytkownika

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

Ja sobie zawsze to tak tłumaczyłem, że preprocesor potrafi dokonać tylko jednopoziomowej podmiany, a tu zachodzi już dwupoziomowa podmiana, bo za x podstawiane jest LCD_RSPORT, a z kolei za LCD_RSPORT podstawiane jest D więc dla tego trzeba to zrobić w dwóch krokach. Nie wiem na ile w tym prawdy ale przynajmniej mi udało się zapamiętać ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 18:42 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

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


Mirek tu użył niefortunnie PORT do tłumaczeń, bo wszystkim kojarzy się tylko z jednym ;)

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

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


Preprocesor reaguje na ciąg "DUPA" w kodzie czyli zamienia nam naszą końcówkę na ALAMAKOTA
nasze "x" w kodzie to nic innego jak rozwinięcie LCD_D7DUPA do C, to chyba proste ;) w drugiej linijce zmieniamy ALA... na już właściwy PORT - operator "##" służy do łączenia(sklejania) znaków, czyli wychodzi nam z tego już prawidłowe PORTC


jakby ktoś się poczuł urażony określeniami...
sorka, nie jestem zbyt kreatywny przy tłumaczeniach, może jakiś niebieski poprawi zanim mnie poczęstuje bananem lewoskrtętnym za wulgaryzmy.

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 19:27 
Offline
Moderator
Avatar użytkownika

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

Harry napisał(a):
Preprocesor reaguje na ciąg "DUPA" ...

Nie lubię takich określeń, a szczególnie tu na forum ... ale ... no ale może dzięki takiemu dobremu tłumaczeniu to jednak dotrze :lol:

_________________
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: 10 paź 2017, o 19:33 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

mirekk36 napisał(a):
Nie lubię takich określeń, a szczególnie tu na forum ...

Na przyszłość obiecuje poprawę :oops:

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 20:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Dalej tego nie widzę mi żeby wytłumaczyć to pozostaje chyba już namalować jak przedszkolakowi ;) bo dla mnie to nielogiczne, ten Preprocesor chyba porusza według własnego wzoru .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 20:13 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

To może napisz czego konkretnie nie rozumiesz, bo wydaje mi się, że wytłumaczyłem jak chłopu na miedzy co z czego wynika.

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 20:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Cytuj:
Preprocesor reaguje na ciąg "DUPA" w kodzie czyli zamienia nam naszą końcówkę na ALAMAKOTA
nasze "x" w kodzie to nic innego jak rozwinięcie LCD_D7DUPA do C, to chyba proste w


Nie jasne dla mnie jest reaguje na ciąg dupa,jaką końcówkę? Fajnie jakby mi ktoś to wyjaśnił krok po kroku jeszcze raz . Bo pewnych rżyczy nie dostrzegam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 20:50 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

procek87 napisał(a):
Nie jasne dla mnie jest reaguje na ciąg dupa,jaką końcówkę?

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

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 21:55 
Offline
Użytkownik
Avatar użytkownika

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

Przy pomocy preprocesora możesz pisać tzw. makra. Tłumaczę (a przynajmniej się postaram) na przykładzie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W tych linijkach określasz, gdzie podłączasz diodę LED do procesora.
Tutaj wybierasz sobie zarówno port jak i pin, do którego podłączysz. Ale kompilator nie zna takich określeń, potrzebuje wprost: "dioda podłączona pod pin PC8". Żeby ustawić ten pin jako WYJŚCIE, musisz wywołać:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Więc jak to zrobić? Myślisz sobie: "wystarczy, jeśli przygotuję sobie makro:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i wywołam na początku funkcji main() jako
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

No więc teraz, dlaczego tak nie będzie. Zacznijmy od podstawowych podstaw preprocesora:
1) Dyrektywa #define działa w ten sposób, że w kodzie programu wyszukiwany jest ciąg znaków, który jest pierwszym wyrazem po #define, a następnie jest zastąpiony tym, co jest jako drugi wyraz.
2) wyrażenie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
działa w ten sposób, że to, co jest w nawiasie (w tym przypadku x, ale możesz tu sobie to dowolnie oznaczyć, uwaga jednym wyrazem) jest podstawiane do wyrażenia, które jest jako drugi wyraz, a następnie wykonywane są obliczenia (jak w tym przykładzie), albo inne czynności, zależy, co wpiszesz.
3) symbol "##" to tzw. symbol sklejania. Łączy ze sobą w jeden ciąg to, co jest przed tym symbolem, i to, co jest za tym symbolem.
No dobrze, ale jak się to ma do opisanego problemu, zapytasz? Już tłumaczę:
Jeżeli wpiszesz tylko:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to makro rozwinie to do:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

A teraz, jak powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
To są dwa makra, które rozwiązują problem. Wywołujesz to samo, czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Teraz rozpiszę tylko, jak zadziała część
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Najpierw wykona się pierwsze makro, czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W wyniku tego działania do makra z SDDR zostanie jako argument przekazane rozwinięcie makra LED_PORT. Czyli to drugie makro wywoła się jako:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ponieważ wiemy, że symbol "##" oznacza sklejenie dwóch ciągów w jeden, więc w miejscu wywołania
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
pojawi się wynik działania drugiego makra, czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mam nadzieję, że się rozjaśni. Prościej tego nie potrafię wytłumaczyć



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2017, o 22:15 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

Następnym razem zrobi się historyjkę obrazkową

Wysłane ze srajfona.

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



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: 45 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 7 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