Stránka 1 z 1
Jak použít Makefile ?
Napsal: 30 zář 2022, 11:43
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
Napsal: 30 zář 2022, 11:53
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.
Napsal: 30 zář 2022, 12:29
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
Napsal: 30 zář 2022, 13:16
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)
Napsal: 30 zář 2022, 23:12
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.
Napsal: 01 říj 2022, 11:14
od markoni
Jsou veřejně dostupné je to zapakované v archivu
http://1-2-8.net/mwva/mrazik/hdo/stm32f051_hdo.tgz . díky
Napsal: 01 říj 2022, 17:05
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
A výsledek je tento kde je chyba nebo co mě tam chybí ? díky
Napsal: 01 říj 2022, 17:38
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$
Napsal: 01 říj 2022, 18:52
od Mahoney
Ehh… Není už jednodušší mu tu binárku poslat, když jsi to zkompiloval?
Napsal: 01 říj 2022, 19:08
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
Napsal: 01 říj 2022, 21:01
od josef_novak
Tu je celá složka po kompilaci.
Napsal: 02 říj 2022, 18:28
od Mahoney
2josef_novak: To GCC pro ARM máš z repozitáře, nebo je to nějaký externí nástroj? Co máš za distro?
Napsal: 02 říj 2022, 21:18
od josef_novak
1) Stačí doinstalovat gcc-arm-none-eabi
2) Debian
Napsal: 03 říj 2022, 17:04
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
Napsal: 25 lis 2022, 12:54
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