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.

Atmel Sytudio 6.1 - Pliki z rozszerzeniem *.h Mam kilka pytan.

danielskret 20 Kwi 2013 18:27 1506 8
  • #1 20 Kwi 2013 18:27
    danielskret
    Poziom 6  

    Hejka
    Jestem bardzo poczatkujacy i chcialbym sie dowiedziec cos na temat Plikow z rozszerzeniem .h np. HD44780.h
    -Jak one sie nazywaja (np.bibloteki, Slowniki) Bo jak szukalem cos na ten temat to bylo rozne
    -Jak je dodac do programu?
    To znaczy mam plik HD44780.h i program zawierajacy #include <HD44780.h> ale jest blad przy kompilowaniu.
    Kiedy okresle scieszke do pliku dalej jest blad
    Atmel Sytudio 6.1 - Pliki z rozszerzeniem *.h Mam kilka pytan.
    <1>MIejsce gdzie podana jest szceszka(to tylko tak przykladowo to nie jest akurat ta wlasciwa scieszka )
    <2>instrukcja w kodzie
    <3>Blad

    Jesli ktos moglby mnie poprowadzic za raczke przy tym bylbym wdzieczny.
    Mam z tym niezly zgryz. I jak narazie to udalo mi sie jedynie zrobic program do migania diodami na atmega8 (ktora pozniej zablokowalem ;p) teraz korzystam z
    atmega48
    Staram sie wyswietlic cos na wyswietlaczu np. "Czesc"
    wyswietlacz to wlasnie typ HD44780 ale wszystkie proby to jak narazie fiasko


    Z gory dzieki za wyrozumialosc :)

    0 8
  • Pomocny post
    #2 20 Kwi 2013 19:27
    GanzConrad
    Poziom 21  

    *.h są to pliki nagłówkowe. Mogą w nich być same definicje stałych/zmiennych/funkcji itp. (wówczas deklaracje znajdują się w plikach *.c ) lub mogą zawierać również deklaracje.
    Muszą być inkludowane w głównym pliku main.c , np:
    #include "PCF8583/PCF8583.h"
    błąd wskazuje, że :
    - nazwa pliku powinna być pomiędzy cudzysłowami
    - lub plik nie jest dołączony do projektu
    - lub jest w innym katalogu niż katalog główny pliku main.c

    PS. myślę, że wszyscy czytający będą wniebowzięci jeśli przed wysłaniem postu klikniesz kontrolę pisowni ;-) ("ścieżka")

    0
  • #3 20 Kwi 2013 20:01
    danielskret
    Poziom 6  

    Dzieki wielkie pomogles mi bardzo mysle ze innym tez to sie przyda. :)

    0
  • #4 20 Kwi 2013 20:43
    tmf
    Moderator Mikrokontrolery Projektowanie

    To czy użyjesz "" czy <> określa ścieżki przeszukiwania. Katalog w którym są pliki nagłówkowe może być określony w projekcie.
    GanzConrad: w pliku nagłówkowym zdecydowanie nie powinno być definicji zmiennych. To może rodzić poważne błędy. Można co najwyżej robić extern typ zmienna.

    0
  • #5 20 Kwi 2013 21:25
    GanzConrad
    Poziom 21  

    tmf, dzięki za szczegóły, napisałem to, ponieważ kilkukrotnie się z tym spotkałem, sam stosuję się do tego co napisałeś.

    0
  • #6 20 Kwi 2013 21:48
    BlueDraco
    Specjalista - Mikrokontrolery

    W plikach nagłówkowych nie powinno być definicji funkcji ani danych - mogą być tylko definicje typów oraz deklaracje funkcji i danych. Chodzi o to, żeby w wyniku kompilacji samego liku .h kompilator nie tworzył żadnego kodu ani danych.

    0
  • #7 21 Kwi 2013 09:26
    tmf
    Moderator Mikrokontrolery Projektowanie

    Warto dodać, że jak od każdej reguły, także tu są pewne wyjątki - w plikach nagłówkowych czasami umieszcza się definicje funkcji static inline - efektem jest osadzenie w kodzie dołączającym nagłówek tychże funkcji, można także umieszczać definicje zmiennych static const - takie zmienne efektywnie zachowują się jak symbol zdefiniowany przez #define.

    0
  • #8 21 Kwi 2013 13:08
    GanzConrad
    Poziom 21  

    akurat z kwestią zawierania wszystkiego w pliku nagłówkowym, spotykam się nagminnie (sieć jest pełna tego typu "bibliotek"), więc z czystej ciekawości zapytam: Jakie zagrożenia się z tym wiążą?

    0
  • #9 21 Kwi 2013 15:17
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przede wszystkim może się to skończyć błędami związanymi z wielokrotną definicją zmiennej. Pliki źródłowe są kompilowane w sposób rozdzielny, jeśli dwa dołączą ten sam nagłówek to będziesz miał podwójną definicję tej samej zmiennej. Skończy się to błedem, a jeśli nie, to będzie nawet gorzej - ta sama zmienna będzie istniała w dwóch instancjach. W efekcie każdy moduł kompilacji będzie miał swoją "wersję" zmiennej globalnej, jaki będzie tego efekt to trudno przewidzieć, ale z pewnością nie będzie to działało jak należy. Dobrze to widać jeśli w nagłówku zdefiniujesz tablicę, albo stałe, w pewnych sytuacjach pojawią się one w programie wielokrotnie, zajmując kilka razy tyle pamięci ile same zajmują. Podobnie może się zdarzyć z funkcjami. Stąd w nagłówku powinny być wyłącznie ich prototypy. Wyjątkiem są funkcje inline, ale wtedy jest tak jak pisze kolega BlueDraco - takie funkcje nie generują kodu związanego z nagłówkiem - są one osadzane w miejscu wywołania i wszystko jest ok.

    0