Jak použít Makefile ?

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

Jak použít Makefile ?

#1 Příspěvek od markoni »

Zdravím
Možná tato otázka co položím bude znít jako hloupá .Mám projekt který má i soubor Makefile ale já nevím jak jej použít ? díky

Uživatelský avatar
josef_novak
Příspěvky: 685
Registrován: 06 kvě 2017, 02:00

#2 Příspěvek od josef_novak »

https://cs.wikipedia.org/wiki/Make

V adresáři bývají soubory jako install (readme), ve kterých se vyskytují i detaily nebo syntaxe, které jde použít při kompilaci. Také tam může být doplněno, jaké knihovny je potřeba doinstalovat apod.

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#3 Příspěvek od markoni »

Tak to není spustitelný soubor třeba v příkazovém řádku a on by se postaral o správné nastavení adresářů a podobně? díky

nixdorf
Příspěvky: 540
Registrován: 06 kvě 2017, 02:00

#4 Příspěvek od nixdorf »

Nie, makefile za teba kafíčko neuvarí. Je to texťák, ktorý prešrotí make, aby vedelo, čo a ako skompilovať a s čím zlinkovať, s akými parametrami buildu. Dependencies, teda nutné knižnice, apiny, ich verzie, kde majú byť umiestnené, hodnoty premenných prostredia, toolset ktorý treba a iné ďalšie predispozície, treba vždy prelúskať z požiadaviek, zväčša uvedené v README, install, contrib, v markdowne a tak ďalej. Tie musia byť splnené ešte predtým, než spustíš build.
V prípade, že tomu tak nie je, nič ti nebráni makefile otvoriť ako text a zistiť, aké náležitosti budeš musieť mať splnené, akurát to je mierne zložitejšie než si pozreť readme.
Á propos, ak nechceš buildovať zo zdrojákov, stiahni si priamo binárku alebo cez vhodný package manager, v závislosti od distribucie (ak si na *nix)

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#5 Příspěvek od Zmije »

"Makefile" je vpdstatě skript. Jeho interpret je program "make".
Když napíšeš make, tak se spustí program make, který hledá v aktuálním adresáři soubor Makefile a když ho najde, tak ho začne zpracovávat.

Je to tvůj program, nebo cízí? Jestli jsou zdrojáky veřejně dostupné tak se pochlub, co je to zač, třeba ti někdo poradí víc.

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#6 Příspěvek od markoni »

Jsou veřejně dostupné je to zapakované v archivu http://1-2-8.net/mwva/mrazik/hdo/stm32f051_hdo.tgz . díky

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#7 Příspěvek od markoni »

Zmije píše:"Makefile" je vpdstatě skript. Jeho interpret je program "make".
Když napíšeš make, tak se spustí program make, který hledá v aktuálním adresáři soubor Makefile a když ho najde, tak ho začne zpracovávat.

Já jsem si taky myslel že ten soubor makefile není jen texták že musí se něčím spustit jenže jsem nevěděl jak :idea:
A výsledek je tento kde je chyba nebo co mě tam chybí ? díky
Přílohy
makefile.jpg

Uživatelský avatar
josef_novak
Příspěvky: 685
Registrován: 06 kvě 2017, 02:00

#8 Příspěvek od josef_novak »

Pod Linuxem to bez problému zkompiluji.
Dej si do Googlu tohle "make (e=2): The system cannot find the file specified." a hledej, ale většinou se zmiňuje PATH.

Kód: Vybrat vše

root@debian:~/test-part/hdo$ make
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -fno-rtti -fno-exceptions -o main.o main.cpp
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -fno-rtti -fno-exceptions -o gpio.o ./src/gpio.cpp
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -fno-rtti -fno-exceptions -o usart1.o ./src/usart1.cpp
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -fno-rtti -fno-exceptions -o print.o ./src/print.cpp
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -fno-rtti -fno-exceptions -o adcirq.o ./src/adcirq.cpp
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -fno-rtti -fno-exceptions -o filter.o ./src/filter.cpp
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -o startup.o ./src/startup.c
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -c -Os -I. -I./inc -I./lib/inc -Wall -g -ffunction-sections -fdata-sections -fmessage-length=0 -fno-short-enums -o csystem.o ./src/csystem.c
arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -nostartfiles -Wl,--gc-sections -o Hdo.elf  main.o gpio.o usart1.o print.o adcirq.o filter.o startup.o csystem.o -L ./lib/ -T stm32_flash.ld -laeabi-cortexm0
Project size :
arm-none-eabi-size Hdo.elf
   text    data     bss     dec     hex filename
   2932       4     364    3300     ce4 Hdo.elf

arm-none-eabi-objcopy --strip-unneeded -O binary Hdo.elf Hdo.bin
gcc -Os -o calculate ./calc/coef.c -lm
root@debian:~/test-part/hdo$

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#9 Příspěvek od Mahoney »

Ehh… Není už jednodušší mu tu binárku poslat, když jsi to zkompiloval?

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#10 Příspěvek od markoni »

Já nevím co je tam za problém mě by stačilo kdybys mi poskytl HDO.bin s jen s malou úpravou souboru main.cpp

Kód: Vybrat vše

#include "main.h"
/**
 * @file
 * 
 * @brief Spínač HDO.
 * Ve starším příkladu byl pro tento účel použit procesor ARM poněkud zastaralé struktury.
 * Zde použijeme procesor STM32F051 s tím, že snad chvilku přežije a pokud ne, mělo by to
 * jít snadno přeportovat na jiný. I když - zde jsou použity poněkud netradiční postupy.
 * -# Není použita standardní periferní knihovna.
 * -# Dokonce i standardní hlavička byla nahrazena řadou vlastních definic periferií, jen tak
 *      na zkoušku, že to jde i jinak. Používá bitová pole.
 * -# Celé je to psáno v C++ a to tak, že používá vše, co jen na tak malém procesoru lze
 *      efektivně využít. Dědičnost, polymorfizmus, šablony.
 * 
 * Výsledný obraz kódu je dost kompaktní, s použitím optimalizace je C++ docela efektivní
 * nástroj pro tvorbu firmware. Kód by měl fungovat na F0 Discovery kitu s následujícím
 * pinoutem:
 * 
 * -# PA5 - vstup DAC, hlídané napětí.
 * -# PA2 - Relé, aktivní úroveň H.
 * -# PA3 - Povolovací výstup (nemusí být použit, stálá úroveň H - speciální IO pro test to prostě potřeboval).
 * V konstruktoru Filter::Filter() :
 * -# PC8 - modrá led na kitu, bliká s periodou 240 ms, indikuje, že fw žije.
 * -# PC9 - zelená led na kitu, svítí při jednotlivých bitech telegramu.
 * 
 * Telegramy se i zde vypisují na sériový port (PA9) s nastavením 8N1, 9600 Bd.
 * 
 * */
// Dvě nezávislé třídy se pak spojí v součinnost operátorem +=
static AdcIrq adc (1000, 5);    // 1MHz / 1000 = 1 kHz, kanál 5 (pin PA5)
static Filter hdo (1706);       // Viz calculate

static GpioClass  relay (GpioPortA, 2);         // Relé je na IC-DX
static GpioClass  enabl (GpioPortA, 3);         // a ten potřebuje vybavení.

int main (void) {
  enabl << true;      // Pomocný výstup pro IC-DX, není nutný
  // Nastavit úroveň spínání
  hdo.setTriger (0x20000);
  // Výstupní pin
  hdo.setOutput (&relay);
  // Výkonný povel
  hdo.setCommand("A1B8DP5");
  // Nad adc je hdo - to pokračuje v práci.
  adc += hdo;         // spojit
  // Skonči v nekonečné smyčce.
  for (;;) {
    hdo.Telegram();
    __WFI();          // Lze i uspat jádro, ADC ho včas probudí.
  }
  return 0;
}
já bych si pokusil nahrát do kitu pomocí tohohle,doufám že nepřepíšu paměť s bootloaderu poněvač by to bylo v p****** , nicméně budu řešit dále proč mi to nejde díky
Přílohy
STM32 ST-LINK Utility.jpg

Uživatelský avatar
josef_novak
Příspěvky: 685
Registrován: 06 kvě 2017, 02:00

#11 Příspěvek od josef_novak »

Tu je celá složka po kompilaci.
Přílohy
hdo.zip
(181.84 KiB) Staženo 50 x

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#12 Příspěvek od Mahoney »

2josef_novak: To GCC pro ARM máš z repozitáře, nebo je to nějaký externí nástroj? Co máš za distro?

Uživatelský avatar
josef_novak
Příspěvky: 685
Registrován: 06 kvě 2017, 02:00

#13 Příspěvek od josef_novak »

1) Stačí doinstalovat gcc-arm-none-eabi
2) Debian

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#14 Příspěvek od markoni »

Já mám Atollic v tom IDE jsem dělal před nevím kolika ti lety podle http://mcu.cz/comment-n2058.html . Ty ostatní projekty fungují co jsou bez chyby, taky nevím jestli jsem ten projekt HDO importoval dobře .díky
Přílohy
atollic.jpg

Uživatelský avatar
markoni
Příspěvky: 2310
Registrován: 30 říj 2006, 01:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#15 Příspěvek od markoni »

josef_novak píše:Tu je celá složka po kompilaci.
Já bych potřeboval v souboru main.cpp upravit místo

hdo.setCommand("A1B2DP5");

tak
hdo.setCommand("A1B8DP5");

a znovu to zkompilovat díky předem josef_novak
mě to dělá chybu
Přílohy
chyba kompilace.jpg

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“