Zdravím,
jako dost neprogramátor prosím o postrčení správným směrem.
Potřebuji projekt strukturovat (využívám záložky) - skvělé.
potřebuji zapínat mód ladění v kodu - používám "#define testovani 0/1" - skvělé.
Potřebuji držet hlavní část programu stejnou, části podle HW (modul WiFi, 433MHz, atd.) aby kompilátor buď vkompiloval nebo ne. Něco jsem na netu našel, ale nevíte o nějakých příkladech nebo ideálně českém popisu - nevím ani co zadat do vyhledávání. "Podmíněná kompilace" mi vypadává C++ a tam to znám.
Moc děkuji
Podmíněná kompilace/struktura programu
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Podmíněná kompilace/struktura programu
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Podmíněná kompilace/struktura programu
Chápu to správně že máš moduly které chceš vkompilivat podle přepínačů?
Použil bych normálně #ifdef a #endif. Když si tím správně ohraničíš kód, dosáhneš přesně čeho potřebuješ. Úplně ideální je brát každý modul jako knihovnu. V *.h souboru tedy udělat standardní kombinaci:
Takto se při includu modulu do projektu zadefinuje "nazevmodulu". V hlavním kódu, říkejme tomu jádro, pak vhodně zabalíš kousky kódu do #ifdef a #endif
Jako příklad, pokud by jsi měl takto zařízený modul na 433Mhz, mohlo by to vypadat takto.
433lib.h
jadro.c
Použil bych normálně #ifdef a #endif. Když si tím správně ohraničíš kód, dosáhneš přesně čeho potřebuješ. Úplně ideální je brát každý modul jako knihovnu. V *.h souboru tedy udělat standardní kombinaci:
Kód: Vybrat vše
#ifndef nazevmodulu
#define nazevmodulu
Definice funkcí atd.
#endif
Jako příklad, pokud by jsi měl takto zařízený modul na 433Mhz, mohlo by to vypadat takto.
433lib.h
Kód: Vybrat vše
#ifndef 433lib
#define 433lib
void odesli(byte neco);
#endif
Kód: Vybrat vše
#include <433lib.h>
void loop(){
//Funkce se vykoná vždy
nejakafce ();
//Funkce se vykoná a kompiluje jen pokud je v programu #include<433lib.h>
#ifdef 433lib
odesli('A');
#endif
}
Re: Podmíněná kompilace/struktura programu
Ono to neni nahodou - "Ardiuno ino" je normalni C++ s knihovnou Wiring a trochou cachrovani, kde se funkcim doplni deklarace, aby se daly definovat v libovolnem poradi. Plus debilni IDE. Nic vic. Normalne se to da prekladat i klasicky makefilem, pokud si poradis s poradim funkci, nebo si das ty hlavicky dopredu.
Takze na to pouzij normalne C++ a (az na omezenou knihovu a problemys stdin/out/err, ktere na AVR nejak moc nejsou) to normalne bude fungovat.
Takze na to pouzij normalne C++ a (az na omezenou knihovu a problemys stdin/out/err, ktere na AVR nejak moc nejsou) to normalne bude fungovat.
Re: Podmíněná kompilace/struktura programu
děkuji
začínám testovat ....
začínám testovat ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů