Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

F_CPU - pytanie o makefile

12 Aug 2015 23:32 1713 8
  • #1
    User removed account
    Level 1  
  • #2
    Imekxus
    Level 17  
    Code: c
    Log in, to see the code


    tak wygląda mój makefile, z tym, że ja stworzyłem sobie go za pomocą avrstudio i tylko przy nowym projekcie robie ctrl+c, ctrl+v a programy pisze w notepadzie
  • #3
    User removed account
    Level 1  
  • #5
    User removed account
    Level 1  
  • Helpful post
    #6
    szczywronek
    Level 27  
    Popatrz na początek swojego pliku makefile, masz tam "include'y" które działają podobnie jak w języku C. Makefile jest rozbity na kilka plików.
    Quote:
    The include directive tells make to suspend reading the current makefile and read one or more other makefiles before continuing.
    (źródło)

    *.eep - to wsad pamięci eeprom
    *.lss - kod programu w asm
    *.hex - wsad pamięci flash
    *.map - informacje o rozmieszczeniu obiektów w pamięci, wartości symboli linkera itp...
    *.mk - pliki include'owane w makefile'u
    *.d - d jest chyba od "dependencies" ale w sumie nie wiem
    *.o - pliki obiektowe wyplute przez kompilator
  • #7
    User removed account
    Level 1  
  • #8
    linuxtorpeda
    Level 26  
    W skrócie:
    - przetwarzanie plików źródłowych (.c) preprocesorem polega na wykonaniu wszystkich dyrektyw preprocesora, m.in. wklejenie w miejsce #include odpowiednich plików czy rozwiązanie makr zdefiniowanych za pomocą #define lub podanych jako parametr w linii komend, wynikiem są nadal pliki źródłowe .c ze wstawionymi opcjonalnie plikami nagłówkowymi .h
    - kompilacja oznacza generowanie plików obiektowych (.o) na podstawie plików źródłowych (.c)
    - linkowanie oznacza generowanie plików wykonywalnych (najczęściej .elf) i/lub obiektowych na podstawie plików obiektowych (.o)
    - generowanie binarki (.bin) polega na usunięciu wszystkich metadanych na temat pliku wykonywalnego i odpowiednim ułożeniu symboli w strukturze pliku, która to pokrywa się 1:1 z tym, co znajdzie się w pamięci mikrokontrolera

    gcc jest sprytnym narzędziem, w zależności od podanych parametrów wywołuje linker (który można wywołać jawnie poleceniem ld) lub kompilator. W makefile'u Eclipse'a powyżej linkowanie odbywa się za pomocą wywołania gcc.

    Odnosząc tą wiedzę do pytania powyżej - definicję makra można utworzyć na poziomie makefile'a, przekazując do kompilatora flagę -D z odpowiednim makrem, np. -DF_CPU=12000000, w makefile'u Imekxusa odpowiednia flaga ustawiana jest w zmiennej CDEFS, która to później staje się fragmentem zmiennej CFLAGS, będącej zmienną używaną w niejawnych regułach (ang. implicit rules) przez Make.

    AdamZad, jako że nie zamieściłeś zawartości pozostałych includowanych plików, mogę tylko przypuszczać, że miejsce odpowiednie do zdefiniowania własnych flag znajdziesz w sources.mk.

    szczywronek, pliki .d to jak słusznie się domyślasz zależności, czyli reguły generowane przez gcc przy przetwarzaniu plików .c preprocesorem, na podstawie deklaracji preprocesora #include (opcja -M).

    Zainteresowanych tematem zachęcam do zapoznania się z manualem Make :)
  • #9
    User removed account
    Level 1