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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 13 kwi 2025, o 10:35


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
    PostNapisane: 1 lip 2016, o 12:21 
    Offline
    Nowy

    Dołączył(a): 19 kwi 2016
    Posty: 21
    Pomógł: 0

    Witam ostatnio mam problem tego typu, że gdy chcę użyć makr z książki to wyrzuca mi błędy.


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


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


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



    Błędy:
    13:17:54 **** Incremental Build of configuration Release for project Projekt_z_glowy ****
    make all
    'Building file: ../przerwanie.c'
    'Invoking: AVR Compiler'
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF"przerwanie.d" -MT"przerwanie.o" -c -o "przerwanie.o" "../przerwanie.c"
    In file included from ../przerwanie.c:2:0:
    ../przerwanie.c: In function 'ini':
    ../definicje.h:31:18: error: pasting "DDR" and "(" does not give a valid preprocessing token
    #define SDDR(x) (DDR##x)
    ^
    ../definicje.h:30:16: note: in expansion of macro 'SDDR'
    #define DDR(x) SDDR(x)
    ^
    ../przerwanie.c:6:2: note: in expansion of macro 'DDR'
    DDR(P_CYFR) |= (A | B | C | D | E | F | G | DOT );
    ^
    ../przerwanie.c:6:2: warning: implicit declaration of function 'DDR' [-Wimplicit-function-declaration]
    ../przerwanie.c:6:14: error: lvalue required as left operand of assignment
    DDR(P_CYFR) |= (A | B | C | D | E | F | G | DOT );
    ^
    In file included from ../przerwanie.c:2:0:
    ../definicje.h:25:19: error: pasting "PORT" and "(" does not give a valid preprocessing token
    #define SPORT(x) (PORT##x)
    ^
    ../definicje.h:24:17: note: in expansion of macro 'SPORT'
    #define PORT(x) SPORT(x)
    ^
    ../przerwanie.c:7:2: note: in expansion of macro 'PORT'
    PORT(P_CYFR) &=~ (A | B | C | D | E | F | G | DOT );
    ^
    ../przerwanie.c:7:2: warning: implicit declaration of function 'PORT' [-Wimplicit-function-declaration]
    ../przerwanie.c:7:15: error: lvalue required as left operand of assignment
    PORT(P_CYFR) &=~ (A | B | C | D | E | F | G | DOT );
    ^
    In file included from ../przerwanie.c:2:0:
    ../definicje.h:31:18: error: pasting "DDR" and "(" does not give a valid preprocessing token
    #define SDDR(x) (DDR##x)
    ^
    ../definicje.h:30:16: note: in expansion of macro 'SDDR'
    #define DDR(x) SDDR(x)
    ^
    ../przerwanie.c:9:2: note: in expansion of macro 'DDR'
    DDR(P_ANOD) |= (A1 | A2 | A3 | A4);
    ^
    ../przerwanie.c:9:14: error: lvalue required as left operand of assignment
    DDR(P_ANOD) |= (A1 | A2 | A3 | A4);
    ^
    In file included from ../przerwanie.c:2:0:
    ../definicje.h:25:19: error: pasting "PORT" and "(" does not give a valid preprocessing token
    #define SPORT(x) (PORT##x)
    ^
    ../definicje.h:24:17: note: in expansion of macro 'SPORT'
    #define PORT(x) SPORT(x)
    ^
    ../przerwanie.c:10:2: note: in expansion of macro 'PORT'
    PORT(P_ANOD) |= (A1 | A2 | A3 | A4);
    ^
    ../przerwanie.c:10:15: error: lvalue required as left operand of assignment
    PORT(P_ANOD) |= (A1 | A2 | A3 | A4);
    ^
    make: *** [przerwanie.o] Błąd 1

    Wie ktoś czym to jest spowodowane?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 lip 2016, o 13:30 
    Offline
    Użytkownik
    Avatar użytkownika

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

    A czy po słowie #include nie powinno być spacji? Pliki main.c i przerwanie.c



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 lip 2016, o 13:44 
    Offline
    Nowy

    Dołączył(a): 19 kwi 2016
    Posty: 21
    Pomógł: 0

    Dodałem spacje i nic to nie zmienia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 lip 2016, o 16:20 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 181
    Lokalizacja: Kraków
    Pomógł: 30

    Makra działają dobrze, tylko zrobiłeś w kodzie lekki galimatias. Najpierw definiujesz:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


    czyli ostatecznie w nazwie portu zostaje podstawiona wartość np. (1<<2) zamiast litery C i (1<<3) zamiast litery D. To samo dzieje się przy podstawianiu do DDR().
    Poprostu inaczej oznacz segmenty. Użyj małych liter albo dodaj przed nimi podkreślnik: _A, _B....


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 lip 2016, o 17:21 
    Offline
    Moderator
    Avatar użytkownika

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

    janusz17 napisał(a):
    Makra działają dobrze, tylko zrobiłeś w kodzie lekki galimatias.


    Bo jak autor wątku myśli dlaczego w Bluebooku są nazwy

    SEG_A, SEG_B itd a nie jakieś jednoliterowe kikuty A, B itp ???

    _________________
    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: 26 paź 2020, o 00:11 
    Offline
    Nowy

    Dołączył(a): 12 kwi 2015
    Posty: 2
    Pomógł: 0

    Witam , mam podobny problem,compilator twierdzi ze nie zdeklarowalem nazwy RESET2

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


    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 paź 2020, o 00:15 
    Offline
    Moderator
    Avatar użytkownika

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

    Najlepiej w ogóle nie używać takich makr

    _________________
    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: 26 paź 2020, o 07:57 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    Brak jednego argumentu?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 paź 2020, o 22:25 
    Offline
    Nowy

    Dołączył(a): 12 kwi 2015
    Posty: 2
    Pomógł: 0

    Witam panie Mirku;
    z calym szacunkiem rozumiem ze ma pan pelne rece roboty i czasu brak dla wszytkich
    entuzjastow ale w BB pisal pan o makrach upraszczajacych dostep do portow,
    wiec zapytalem,
    a tu tak na nie :) ...
    ale zrozumialem przeslanie...chyba przez lenistwo zawracam glowe zamiast poszukac :) ,
    i tu dla innych zanim zapytaja :

    //forum.atnel.pl/post974.html#p974
    i
    //mirekk36.blogspot.com/2011/12/jezyk-c-makra-upraszczajace-dostep-do.html
    i tak na marginesie kolego micki,
    chwile to trwalo ale znalazlem idac panskim tropem ,
    sam sie pograzylem przy deklaracji podalem pin nie deklarujac portu :D,
    brak jednego argumentu wygenerowal blad :)))



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 paź 2020, o 23:17 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    No i pięknie! O to chodziło - wędka, nie ryba ;)



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

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

    mario.ie napisał(a):
    ale zrozumialem przeslanie...chyba przez lenistwo zawracam glowe zamiast poszukac

    Wcale to nie było moim przesłaniem .... tu kolega troszkę popłynął w domysłach niestety, a nawet mocno popłynął.

    To, że w Bluebooku pokazywałem takie makra to było przede wszystkim po to żeby pokazać możliwości preprocesora i lepiej nauczyć czytelnika jak można z tego korzystać .... krótko mówiąc w celach dydaktycznych.

    Na dzień dzisiejszy nie przez żadne zapracowanie tylko normalnie i otwartym tekstem odradzam stosowanie takich makr, a jak widzę że ktoś tak sobie to tłumaczy jak kolega - to nawet nie będę wyjaśniał dlaczego, powiem tylko że i tak ...i tak sam z nich za jakiś czas zrezygnujesz i sam zobaczysz dlaczego ... później będzie trzeba przerabiać różne swoje kody - szczególnie te starsze gdzie będziesz miał naćkane tych makr. Ale dobrze ucz się na własnych błędach - może dłużej zajmie, ale za to nikt ci tego nie odbierze ;) ... tak czy inaczej powodzenia !

    _________________
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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