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? 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 17 lip 2025, o 23:10


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 24 ] 
    Autor Wiadomość
    PostNapisane: 30 wrz 2016, o 08:31 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2013
    Posty: 36
    Pomógł: 0

    Siemka wszystkim. Mianowicie w pliku nagłówkowym zadeklarowałem funkcje której argumenty są typu uint8_t i wyskakuje mi taki błąd. Dodam, że w pliku .c też użyłem tej nazwy i tam jest wszystko ok. Może ktoś wie o co chodzi?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 08:32 
    Offline
    Moderator
    Avatar użytkownika

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

    Zrobiłeś babola w kodzie i to nie to że się domyślam - wiem to na 100% .... ale wiesz bez widoku tego kodu to już trzeba byłoby mieć co najmniej 3-kanałową szklaną kulę rasowej wróżki żeby podpowiedzieć ci gdzie zrobiłeś tego babola.

    _________________
    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: 30 wrz 2016, o 08:53 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2013
    Posty: 36
    Pomógł: 0

    Panie Mirku, nie wiem jak duży fragment kodu pomoże zdiagnozować problem. Mianowicie staram się samemu napisać sterownik do LCD zgodnie z instrukcjami zawartymi w blue booku. Normalnie jeśli coś nie banglało to zaglądałem w kod z CD i wszystko było ok. Problem który napotkałem teraz pojawił się już na samym końcu, kiedy chciałem dodać funkcję lcd_locate() do pliku nagłówkowego:
    lcd44780.c:
    Kod:
    #if USE_LCD_LOCATE == 1
    // funkcja pozycjonowania kursora; dostosowuje automatycznie adresy DDRAM w zaleznosci od rodzaju wyswietlacza (ile ma wierszy)
    void lcd_locate(uint8_t y, uint8_t x)
    {
       switch(y)
          {
       case 0: y = LCD_LINE1; break;
    #if (LCD_Y > 1)
       case 1: y = LCD_LINE2; break;
    #endif
    # if (LCD_Y > 2)
       case 2: y = LCD_LINE3; break;
    #endif
    #if (LCD_Y > 3)
       case 3: y = LCD_LINE4; break;
    #endif
          }
       lcd_write_cmd(0x80 + y + x);
    }
    #endif

    lcd44780.h:
    Kod:
    void lcd_locate(uint8_t y, uint8_t x);

    Nie wiem czy te fragmenty wystarczą ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 09:01 
    Offline
    Moderator
    Avatar użytkownika

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

    delma199 napisał(a):
    Mianowicie staram się samemu napisać sterownik do LCD zgodnie z instrukcjami zawartymi w blue booku

    Bardzo fajny cel ... warto przynajmniej popróbować - to mocno podnosi własny skill ;)

    Wracając do twojego problemu - to zrozum, że błąd w takim wypadku i na moje oko wcale nie jest w tej linijce o której myślisz niestety ... gdzieś musiałeś (strzelam) zapomnieć średnika, dodać za dużo jeden nawias klamrowy albo za mało, itp itd ... a to potrafi spowodować takie efekty o jakich piszesz

    cofaj się w tym co robiłeś ... sprawdzaj kiedy zacznie być dobrze ;) bo pewnie wzrokowo ciężko wyłapać ... ale też w konsoli popatrz szerzej na błędy na numery linii itp itd

    _________________
    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: 30 wrz 2016, o 09:29 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Przepraszam, że się wtrącam ;)

    delma199 napisał(a):
    Mianowicie w pliku nagłówkowym zadeklarowałem funkcje której argumenty są typu uint8_t i wyskakuje mi taki błąd. Dodam, że w pliku .c też użyłem tej nazwy i tam jest wszystko ok.

    Problem który napotkałem teraz pojawił się już na samym końcu, kiedy chciałem dodać funkcję lcd_locate() do pliku nagłówkowego

    Miałbym następujące pytania:

    Czy w pliku "lcd44780.c" masz dyrektywę:
    #include <avr/ioh> ?

    Czy w pliku "lcd44780.h" masz dyrektywę:
    #include <avr/ioh>
    lub przynajmniej
    #include <stdint.h> ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 10:44 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    Czy w pliku "lcd44780.h" masz dyrektywę:
    #include <avr/ioh>
    lub przynajmniej
    #include <stdint.h> ?


    Ale mi się wydaje, że w plikach nagłówkowych na potrzeby samych deklaracji funkcji nie trzeba inkludować tych plików ... chyba że są użyte jakieś nazwy które nie są używane w źródłowym ...

    _________________
    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: 30 wrz 2016, o 11:36 
    Offline
    Użytkownik

    Dołączył(a): 06 wrz 2016
    Posty: 35
    Zbananowany użytkownik

    Pomógł: 0

    Witam

    Mam zdaje się identyczny problem, z tym że ja przerabiam poradniki od magic ledów. Utknąłem na 4 części w 39:42 https://youtu.be/xujEupk1s-E?t=39m42s , gdzie Mirek przypomina, żeby wrzucić funkcje do pliku nagłówkowego, o czym ja oczywiście zapomniałem. Ale bez tego program się kompilował (z warnigiem) ale działał, a po wrzuceniu funkcji do pliku nagłówkowego program się już nie kompiluje. Wyskakuje błąd:

    Kod:
    12:29:54 **** Incremental Build of configuration Release for project WS2812_TEST ****
    make all
    Building file: ../WS2812/ws2812.c
    Invoking: AVR Compiler
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=16000000UL -MMD -MP -MF"WS2812/ws2812.d" -MT"WS2812/ws2812.o" -c -o "WS2812/ws2812.o" "../WS2812/ws2812.c"
    In file included from ../WS2812/ws2812.c:9:0:
    ../WS2812/ws2812.h:17:16: error: unknown type name 'uint8_t'
     void send_rgb( uint8_t r, uint8_t g, uint8_t b);
                    ^
    ../WS2812/ws2812.h:17:27: error: unknown type name 'uint8_t'
     void send_rgb( uint8_t r, uint8_t g, uint8_t b);
                               ^
    ../WS2812/ws2812.h:17:38: error: unknown type name 'uint8_t'
     void send_rgb( uint8_t r, uint8_t g, uint8_t b);
                                          ^
    ../WS2812/ws2812.h:18:18: error: unknown type name 'uint32_t'
     void send_color( uint32_t c);
                      ^
    make: *** [WS2812/ws2812.o] Błąd 1

    12:29:54 Build Finished (took 688ms)

    Pewnie popełniłem jakiegoś babola, którego nie widzę pomimo wielokrotnego sprawdzenia, kod wydaje się być taki jak w poradniku.

    Mój kod:

    ws2812.c

    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.


    ws2812.h

    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: 30 wrz 2016, o 11:48 
    Offline
    Moderator
    Avatar użytkownika

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

    Cytuj:
    #include "ws2812.h"

    #include <avr/io.h>


    No i popatrz ;) a mówisz - że robisz wszystko wg poradników ? ;) tymczasem na 100% to nie jest wg poradnika a podejrzewam, że być może nie masz nawet Bluebooka i dlatego tak ciężko ci to idzie .... Bo przepisujesz nie do końca rozumiejąc o co chodzi ....

    Tymczasem w Bluebooku jest to i mnóstwo innych rzeczy ładnie wyjaśnione

    wracając do problemu - no sam żesz pan pomyśl

    NAJPIERW inlkuldujesz w pliku *.c

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



    preprocesor rozwija to w tym pliku DOKŁADNIE w tym miejscu i tak próbuje kompilować - więc SKĄD ma wiedzieć, co to jest uint8_t jeśli takiego babola robisz, że plik

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


    inkludujesz później ? .... mówię ci obejrzyj sobie ten jeden z ostatnich poradników , jeśli nie masz jeszcze Bluebooka



    bo jak tego nie zrozumiesz tylko znowu napiszesz bo ja tak ci powiedziałem to za chwilę będziesz w innych miejscach robił podobne albo i gorsze błędy

    W Bluebooku zwracam na to wszystko SZCZEGÓLNĄ uwagę w tym na poprawny styl pisania kodu - który jak widać na tym akurat przykładzie (tzn złym przykładzie) .... jest TAK WAŻNY ...

    A tymczasem popraw i zobaczysz CUD ;) będzie działać

    _________________
    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: 30 wrz 2016, o 12:00 
    Offline
    Użytkownik

    Dołączył(a): 06 wrz 2016
    Posty: 35
    Zbananowany użytkownik

    Pomógł: 0

    OK, dziękuję za wyjaśnienie, teraz jest wszystko OK.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 13:09 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    mirekk36 napisał(a):
    Ale mi się wydaje, że w plikach nagłówkowych na potrzeby samych deklaracji funkcji nie trzeba inkludować tych plików ... chyba że są użyte jakieś nazwy które nie są używane w źródłowym ...

    No tak, tylko że to zależy od kolejności inkludowania (jak widać nie zawsze ta kolejność jest prawidłowa u początkujących). Jak się zainkluduje np. io.h na początku pliku nagłówkowego zamiast w pliku .c to nie będzie tego problemu ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 13:12 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    No tak, tylko że to zależy od kolejności inkludowania (jak widać nie zawsze ta kolejność jest prawidłowa u początkujących). Jak się zainkluduje np. io.h na początku pliku nagłówkowego zamiast w pliku .c to nie będzie tego problemu


    DOKŁADNIE i o tym wyżej napisałem - ale ja wolę podpowiadać z kolei tzw DOBRY STYL programowania do którego zalicza się również prawidłowa kolejność inkludowania plików ;) .... bo toż przecież - jeśli ten plik *.h będzie zainkludowany przez inkludem avr/io.h jak widać w ostatnim pytaniu no to co? ... to nie najlepszym rozwiązaniem będzie podpowiedź żeby człowiek inkludował znowu avr/io.h w pliku nagłówkowym bo za chwilę - jeśli nie zrozumie w czym rzecz - to będzie szprycował pliki nagłówkowe niepotrzebnymi inkludami jak dobrą kaszę skwarkami ;) tyle że nadmiarowo ;) - tak mi się wydaje .... i stąd wynikał mój to podpowiadania akurat

    _________________
    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: 30 wrz 2016, o 13:29 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    No cóż. To były tylko pytania, które miały na celu zdiagnozowanie przyczyny, to nie była propozycja rozwiązania problemu.
    Wytłumaczenie miało być następnym krokiem, ale niestety kolega mnie ubiegł ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 13:32 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    to nie była propozycja rozwiązania problemu.

    ale ja rozumiem ... i nie twierdzę, że było inaczej .... ;) ... dlatego pisałem na spokojnie, że "tak mi się wydaje"

    _________________
    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: 30 wrz 2016, o 15:03 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2015
    Posty: 140
    Zbananowany użytkownik

    Pomógł: 18

    Jeśli dobrze zrozumiałem powyższe, to znaczy, że pliki biblioteczne należy dołączać do plików źródłowych, a nie do plików nagłówkowych - Tak?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 15:45 
    Offline
    Moderator
    Avatar użytkownika

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

    Sparrow-hawk napisał(a):
    Jeśli dobrze zrozumiałem powyższe, to znaczy, że pliki biblioteczne należy dołączać do plików źródłowych, a nie do plików nagłówkowych - Tak?


    No chyba tak ;) pliki *.h zawsze dołączamy do plików *.c a nie odwrotnie

    _________________
    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: 30 wrz 2016, o 16:58 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    mirekk36 napisał(a):
    ale ja rozumiem ... i nie twierdzę, że było inaczej ....

    .. ale i tak mi się dostało, że teraz początkujący "będzie szprycował pliki nagłówkowe niepotrzebnymi inkludami", i za te skwarki w kaszy... :)

    mirekk36 napisał(a):
    No chyba tak pliki *.h zawsze dołączamy do plików *.c a nie odwrotnie

    Koledze Sparrow-hawk chodziło chyba bardziej o zagnieżdżanie plików nagłówkowych.
    Ja już się nie odważę odpowiadać...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 17:06 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2015
    Posty: 140
    Zbananowany użytkownik

    Pomógł: 18

    Tak, dokładnie, chodziło mi o zagnieżdżanie plików nagłówkowych.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2016, o 17:47 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    .. ale i tak mi się dostało, że teraz początkujący "będzie szprycował pliki nagłówkowe niepotrzebnymi inkludami", i za te skwarki w kaszy...

    No to chyba ja też nie powinien się odważyć odpowiadać na forum ;) toż ja to pisałem do AUTORA i wątku i tego dodatkowego pytania ;) BOŻE ! Panowie no proszę - proszę nie przesadzajcie ... Fakt miałeś pewnie swój sposób aby naprowadzić pytającego na trop a ja być może uprzedziłem no ale czy zrobiłem to jakoś złośliwie? specjalnie na złość ? .... no proszę

    _________________
    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: 1 paź 2016, o 21:05 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Kolego Mirku.

    Myślę, że niepotrzebne te nerwy ;) Skoro napisałeś, że "nie najlepszym rozwiązaniem będzie podpowiedź żeby człowiek inkludował znowu avr/io.h w pliku nagłówkowym", to moją reakcją (chyba naturalną) było zasygnalizowanie, że nie zgadzam się z tą opinią, bo to nie była stricte odpowiedź, a raczej wstęp do odpowiedzi. Moje stwierdzenie "kolega mnie ubiegł" miało oznaczać tylko tyle, że nie zdążyłem jej udzielić do końca (przez co Twoja ocena bazowała na niepełnych danych), a nie o to, że mam do Ciebie jakieś pretensje. Nie wiem, skąd w ogóle taki pomysł ;) Może czas na jakiś urlop, żeby się trochę odstresować ;)

    Niemniej jednak może nie do końca jestem zawsze taki poważny, na jakiego wyglądam. Proponuję jednak do niektórych moich wypowiedzi podchodzić z pewnym dystansem i przymrużeniem oka. Po stwierdzeniu, że nie odważę się już odpowiadać, nie wstawiłem wprawdzie tego średnika i nawiasu, jednak sądziłem, że to sformułowanie jest na tyle infantylne, iż nikt nie powinien potraktować go poważnie... Po prostu mam takie chore poczucie humoru. Często Ci, którzy mnie zbyt dobrze nie znają, opacznie odczytują moje intencje... I później następuje "styk mniemalny" (cytując znanego klasyka - profesora mniemanologii stosowanej). Dobrą stroną tej sytuacji jest to, że ten "styk mniemalny" staje się w efekcie (zgodnie z teorią profesora) motorem postępu.

    Spróbuję może też napisać coś na temat zagnieżdżania plików nagłówkowych, żeby nie było całkiem off-topic.
    Zaznaczam, że to tylko moje mniemanie.

    Często tendencją wśród początkujących jest propagowanie swoich definicji, funkcji i zmiennych extern po całym projekcie, tak aby były dostępne w każdym pliku źródłowym. Niestety, nie jest to (w moim mniemaniu) dobra praktyka. W uproszczeniu można to porównać do sytuacji, gdy wszyscy pracownicy firmy mają klucze do wszystkich pomieszczeń czy też dostęp do wszystkich dokumentów firmowych. Nikt chyba nie uważa, że to dobra sytuacja dla firmy (niektórzy pracownicy być może nie mieliby nic przeciwko ;)). Dlatego też podstawowa zasada powinna być taka, że każdy plik *.c powinien mieć dostęp tylko i wyłącznie do definicji, funkcji i zmiennych extern, które są mu potrzebne. W związku z tym zalecane jest dołączanie plików nagłówkowych bezpośrednio w pliku *.c, a nie np. pośrednio poprzez jego plik nagłówkowy. Tenże plik nagłówkowy będzie przecież dołączany również do innych plików *.c łącznie ze wszystkimi zawartymi w nim (niekoniecznie tam potrzebnymi) plikami nagłówkowymi.

    Nie oznacza to wcale, że nie wolno stosować zagnieżdżania w ogóle. Łatwo zauważyć w plikach nagłówkowych avr-libc, że zagnieżdżanie jest tam dosyć często stosowane. Istnieją sytuacje, kiedy dołączanie plików nagłówkowych pośrednio poprzez inne pliki nagłówkowe jest uzasadnione.

    Najlepiej chyba będzie wytłumaczyć na przykładzie. Weźmy przykład z tego wątku.
    W pliku "lcd44780.h" mamy deklarację funkcji:
    void lcd_locate(uint8_t y, uint8_t x);
    Funkcja ta ma dwa parametry typu uint8_t.
    Teraz plik "lcd44780.h" dołączamy do pliku "lcd44780.c". Typ uint8_t nie jest jednak typem wbudowanym, więc aby plik "lcd44780.c" skompilował się prawidłowo, musi przed deklaracją naszej funkcji zawierać definicję typu uint8_t. Szczęśliwym trafem mamy też do tego pliku dołączony plik nagłówkowy "avr/io.h", poprzez który (też nie bezpośrednio) dołączany jest także plik "stdint.h". W pliku "stdint.h" jest potrzebna nam definicja typu uint8_t. Jeśli więc dołączymy plik "lcd44780.h" po dołączeniu "avr/io.h", to kompilacja przebiegnie prawidłowo.

    No ale to jeszcze nie koniec. Funkcje do obsługi LCD stworzyliśmy przecież, aby z nich korzystać. Dołączamy więc plik "lcd44780.h" do pliku "jakis.c" i próbujemy skompilować. Niestety tak się składa, że w pliku "jakis.c" nie mamy akurat dołączonego pośrednio czy bezpośrednio pliku nagłówkowego "stdint.h" z definicją typu uint8_t, więc plik nam się nie skompiluje. Musimy w takim przypadku dołączyć plik "stdint.h" przed dołączeniem pliku "lcd44780.h".

    Aby tego uniknąć dodać można dyrektywę:
    #include <stdint.h>
    w pliku "lcd44780.h" przed deklaracją funkcji. Wtedy wystarczy w pliku "jakis.c" dołączyć tylko plik "lcd44780.h", a kompilator nie zakończy pracy z błędem unknown type name 'uint8_t'.

    Moim zdaniem w sytuacjach, kiedy istnieją tego typu zależności, zagnieżdżanie jest dopuszczalne i nie jest niezgodne z dobrym stylem programowania. Jedynym mankamentem jest to, że patrząc na dyrektywy #include w pliku *.c nie znamy od razu pełnej listy dołączonych plików nagłówkowych, ale nie jest przecież dużym problemem to sprawdzić.

    I to by było na tyle.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 paź 2016, o 23:02 
    Offline
    Użytkownik

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

    To się powinno znaleźć w poradnikach :)
    W jednym poście wytłumaczyłeś zasady includowania w sposób odpowiedni dla początkujących, zwłaszcza tych którzy nie mieli wcześniej żadnej styczności z programowaniem.

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 paź 2016, o 23:22 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    Myślę, że niepotrzebne te nerwy Skoro napisałeś, że "nie najlepszym rozwiązaniem będzie podpowiedź żeby człowiek inkludował znowu avr/io.h w pliku nagłówkowym", to moją reakcją (chyba naturalną) było zasygnalizowanie, że nie zgadzam się z tą opinią, bo to nie była stricte odpowiedź, a raczej wstęp do odpowiedzi. Moje stwierdzenie "kolega mnie ubiegł" miało oznaczać tylko tyle, że nie zdążyłem jej udzielić do końca (przez co Twoja ocena bazowała na niepełnych danych), a nie o to, że mam do Ciebie jakieś pretensje. Nie wiem, skąd w ogóle taki pomysł Może czas na jakiś urlop, żeby się trochę odstresować

    Ja widzę, że my już tak któryś raz - ale może kiedyś dojdziemy do ładu ;) ... Po PIERWSZE - wcale się nie denerwuję tylko szkoda mi się zrobiło i przykro, że jakoś hmmm może źle odebrałeś moje słowa, albo że niby zasugerowałem, że coś źle piszesz itp itd ... a KOMPLETNIE nie miałem tego na myśli ... i nawet gdy kolejny raz starałem się to napisać - to ty znowu, że ja się denerwuję i że czas się odstresować. ;) Jeszcze raz mówię zero nerwów tylko ciężko w suchym tekście widzę czasem się porozumieć co do intencji ...

    andrews napisał(a):
    Proponuję jednak do niektórych moich wypowiedzi podchodzić z pewnym dystansem i przymrużeniem oka.

    Postaram się ... ale jak mówię mi też czasem to nie wychodzi więc przepraszam.

    andrews napisał(a):
    Spróbuję może też napisać coś na temat zagnieżdżania plików nagłówkowych,

    Bardzo fajny opis ...

    Natomiast ja po tej twojej wypowiedzi, jeszcze raz ją zacytuję:

    andrews napisał(a):
    No tak, tylko że to zależy od kolejności inkludowania (jak widać nie zawsze ta kolejność jest prawidłowa u początkujących). Jak się zainkluduje np. io.h na początku pliku nagłówkowego zamiast w pliku .c to nie będzie tego problemu

    Myślałem, że ty po prostu tak wprost i od razu dopuszczasz do tego, żeby dodawać inkludy w *.h zamiast naprawić kolejność i to mi się gryzło - ale cała moja odpowiedź nie miała na celu nie wiem "zjechania ciebie" czy wykazania że kompletnie źle podpowiadasz czy coś ....

    Dla mnie większy priorytet ma naprowadzenie na to żeby poprawnie inkludować czyli najpierw pliki systemowe <> a później własne "" wtedy zawsze uniknie się niechcący tego typu problemów. Pisałem też delikatnie - że "tak mi się wydaje" ... wdając się jednocześnie w delikatną polemikę z tobą - bo jeśli uważasz, że jest inaczej to ja wręcz chętnie posłucham kontrargumentów ... uwierz mi ja się nadal i wciąż tylko uczę języka C, a przez skórę czuję - że ty zdaje się poruszasz się w nim o wiele lepiej niż ja .... Dlatego czasem z takiej polemiki/dyskusji sam się czegoś douczę/dowiem.... A zawsze gdy czuję przez skórę, że ktoś zna dużo lepiej ode mnie C (mnóstwo jest takich osób) ;) .... to nie mam zamiaru komuś robić zarzutów czy pouczać ... I proszę tak podchodź też do moich wypowiedzi ... gdy się czasem spotykamy w niektórych wątkach na tym polu ok ? ;)

    Myślę - że DUŻO lepiej by się dyskutowało właśnie gdzieś na żywo ;) a jeszcze przy jakimś soczku jabłkowym to już w ogóle ! ...

    _________________
    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: 1 paź 2016, o 23:50 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2013
    Posty: 36
    Pomógł: 0

    Jako autor tematu dziękuję wszystkim za wzięcie udziału w dyskusji. To co chciałem się dowiedziałem, ale gdyby ktoś chciał jeszcze coś dodać to z niecierpliwością czekam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 paź 2016, o 10:47 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    mirekk36 napisał(a):
    andrews napisał(a):
    No tak, tylko że to zależy od kolejności inkludowania (jak widać nie zawsze ta kolejność jest prawidłowa u początkujących). Jak się zainkluduje np. io.h na początku pliku nagłówkowego zamiast w pliku .c to nie będzie tego problemu
    Myślałem, że ty po prostu tak wprost i od razu dopuszczasz do tego, żeby dodawać inkludy w *.h
    To raczej było stwierdzenie faktu, a nie porada, no ale może faktycznie, jak tak się teraz dokładniej przyjrzę temu, co napisałem, to chyba miałeś prawo tak pomyśleć. Czasami jednak to niełatwe zadanie, "aby język giętki powiedział wszystko, co pomyśli głowa".

    mirekk36 napisał(a):
    nie mam zamiaru komuś robić zarzutów czy pouczać ... I proszę tak podchodź też do moich wypowiedzi ... gdy się czasem spotykamy w niektórych wątkach na tym polu ok ?
    Postaram się, choć nie mogę zagwarantować, że się uda ;)

    Nie wiem, czy przeczytałeś szerszy cytat z wypowiedzi profesora (moim zdaniem ciekawy) na temat tego "styku mniemalnego" (podałem link, żeby nie zaśmiecać forum). Pytam o to, ponieważ zastanawiam się, czy ta moja drażliwość nie wynika ze zbyt dużej różnicy między moim (zbyt wysokim) mniemaniem o sobie, a mniemaniem innych o mnie. Wprawdzie mniemam, że jestem dość skromy i krytyczny wobec siebie (może czasami za bardzo), ale to może być tylko moje mniemanie. Wprawdzie teoretycznie ten "styk mniemalny" może być motorem postępu, jednak myślę, że przy zbyt dużej różnicy mniemań może też być destrukcyjny. Być może będę musiał popracować, żeby tę różnicę nieco zmniejszyć (z mojej strony).

    mirekk36 napisał(a):
    uwierz mi ja się nadal i wciąż tylko uczę języka C, a przez skórę czuję - że ty zdaje się poruszasz się w nim o wiele lepiej niż ja

    Masz rację, zdaje Ci się :) Ja też cały czas się uczę języka C, ale wiesz jak to jest, im więcej się uczę, tym jeszcze więcej nie umiem. Temat jest obszerny, są różne standardy, rozszerzenia, inne są techniki pisania na systemy wbudowane (zależne od platformy sprzętowej), inne na PC. Zastanawia mnie ilu ludzi na świecie mogłoby powiedzieć, że wie o języku C wszystko i nie musi się już uczyć.

    Poza tym oprócz języka C są też inne języki, które chciałoby się poznać, jest wiele innych ciekawych zagadnień z dziedziny elektroniki (i nie tylko)... a czasu tak mało....

    delma199 napisał(a):
    To co chciałem się dowiedziałem, ale gdyby ktoś chciał jeszcze coś dodać to z niecierpliwością czekam.
    Rozumiem, że problem został rozwiązany?
    Sprecyzuj może, co chciałbyś, żeby dodać. Może masz jeszcze jakieś pytania?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 paź 2016, o 11:25 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    Postaram się, choć nie mogę zagwarantować, że się uda

    :lol: no ja mam podobnie - więc razem się starajmy pilnować :lol:

    andrews napisał(a):
    Nie wiem, czy przeczytałeś szerszy cytat z wypowiedzi profesora (moim zdaniem ciekawy) na temat tego "styku mniemalnego"

    tak tak ;) ... Ja pamiętam niegdysiejsze wykłady mniemanologii stosowanej w TV :) ... i charakterystyczny zwrot na koniec:

    andrews napisał(a):
    I to by było na tyle.

    ;)

    _________________
    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: 24 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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