Podmíněná kompilace/struktura programu

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Podmíněná kompilace/struktura programu

Příspěvek od pavel1tu » 13 zář 2019, 09:11

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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Wojta
Příspěvky: 184
Registrován: 22 črc 2017, 16:39
Reputation: 0

Re: Podmíněná kompilace/struktura programu

Příspěvek od Wojta » 13 zář 2019, 14:55

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:

Kód: Vybrat vše

#ifndef nazevmodulu

#define nazevmodulu

Definice funkcí atd.

#endif
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

Kód: Vybrat vše

#ifndef 433lib

#define 433lib

void odesli(byte neco);

#endif
jadro.c

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
}

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Podmíněná kompilace/struktura programu

Příspěvek od gilhad » 13 zář 2019, 15:11

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.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Podmíněná kompilace/struktura programu

Příspěvek od pavel1tu » 13 zář 2019, 15:24

děkuji
začínám testovat ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů