Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

avr-gcc - kłopot z preprocesorem

zbynio_k 13 Lis 2013 08:14 930 8
  • #1 13 Lis 2013 08:14
    zbynio_k
    Poziom 10  

    witam,
    mimo początków w programowaniu w C, chciałem uporządkować
    swoje wiadomości i uczynić programy uniwersalnymi
    i tutaj mam kłopot z dyrektywą preprocesora - ##


    Kod: c
    Zaloguj się, aby zobaczyć kod


    powyższy kod kompiluje się bez problemu
    natomiast ten "wywala" błąd

    ../hd44780.c:20: error: 'LCDP4' undeclared (first use in this function)

    Kod: c
    Zaloguj się, aby zobaczyć kod


    w którym miejscu popełniam błąd w stosowaniu dyrektywy ## ??
    jak poprawnie "skleić" ten przypadek ?

    pozdrawiam

    0 8
  • #2 13 Lis 2013 08:38
    rajszym
    Poziom 19  

    zbynio_k napisał:

    #define D4 GLUE(LCDP,4)


    preprocesor nie zna wyrażenia LCDP

    0
  • #3 13 Lis 2013 08:49
    94075
    Użytkownik usunął konto  
  • #4 13 Lis 2013 08:49
    zbynio_k
    Poziom 10  

    rajszym napisał:
    zbynio_k napisał:

    #define D4 GLUE(LCDP,4)


    preprocesor nie zna wyrażenia LCDP


    a wydawało mi się, że powinien znać przez definicje
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i właśnie nie wiem dlaczego :(

    0
  • #5 13 Lis 2013 08:58
    voytaschec
    Poziom 24  

    W linii:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    użytkownik oczekuje dwóch rozwinięć: GLUE oraz LCDP. Gdyby preprocesor najpierw rozpoczął rozwijanie LCDP to wynik byłby poprawny, jednak zaczyna od rozwijania GLUE (zapewne dlatego, że to makro zostało zdefiniowane jako pierwsze) i w wyniku otrzymuje LCDP4, z którym już nie wie co zrobić.

    0
  • #6 13 Lis 2013 09:04
    zbynio_k
    Poziom 10  

    albertb napisał:

    W linii 20 jak pisze w komunikacie, lecz nie jest on w żadnym stosunku
    Napisz może co chcesz uzyskać.
    Bo ja widzę tylko zamianę kodu działającego na niedziałający i to w dodatku trochę na siłę.

    Albert

    być może i na siłę ale ...
    w Delphi tak żonglowałem zmiennymi i stałymi lub plikiem .INI, że zmiana parametrów skutkowała zmianą TYLKO w jednym miejscu programu

    podobnie tutaj ...
    przy zmianie portu chciałbym zmienić tylko

    #define LCD B

    i koniec, a w działającym kodzie muszę zmienić dodatkowo 4 linijki dla danych i 3 linijki dla sterowania

    nie chciałbym się martwić, gdzie jeszcze muszę coś pozmieniać

    Dodano po 6 [minuty]:

    voytaschec napisał:
    W linii:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    użytkownik oczekuje dwóch rozwinięć: GLUE oraz LCDP. Gdyby preprocesor najpierw rozpoczął rozwijanie LCDP to wynik byłby poprawny, jednak zaczyna od rozwijania GLUE (zapewne dlatego, że to makro zostało zdefiniowane jako pierwsze) i w wyniku otrzymuje LCDP4, z którym już nie wie co zrobić.


    tak podejrzewałem, że w tym miejscu jest źle tylko mimo różnych prób
    nie doszedłem do poprawnego rozwiązania

    więc może ktoś mnie naprowadzi ... jak to poprawnie zdefiniować i zagnieździć ?

    0
  • #7 13 Lis 2013 09:07
    94075
    Użytkownik usunął konto  
  • #8 13 Lis 2013 09:40
    rajszym
    Poziom 19  

    Zamiast:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Wpisz:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Daj czas preprocesorowi na rozwinięcie wszystkich makrodefinicji...

    0
  • #9 13 Lis 2013 10:09
    zbynio_k
    Poziom 10  

    rajszym

    "dałem czas preprocesorowi " i .... zadziałało :)

    dzięki wielkie

    więc temat mogę zamknąć

    muszę przyznać, że byłem już na dobrej drodze ale nie wiedziałem jak "pożenić" dwa sklejania :D

    cóż, jestem elektronikiem i nie do końca wiem jak działa np. preprocesor

    0