~~Extern , došlo mi to ihned jak jsem viděl odpověď, už mi asi měkne mozek, předtím jsem o tom přemýšlel snad hodinu a nemohl si vzpomenou ani správně nadefinovat dotaz na google.
V každém případě děkuji.
Máte pravdu je to strukturálně špatně, ale jak píše Staon v embended se to bere jinak.
Nicméně, když jsme narazili na návrh budu konkrétně nekonkrétní.
Je to z embended světa konkrétně ARM Cortex M světa, jeden možná dnes největší výrobce těchto procesorů (aktuálně má na trhu přes 880 různých provedeni v Cortex M0 až M7. ke svým procesorům nabízí sw, v kterém lze „naklikat“ základní konfigurací jako jsou hodiny, definovat konfiguraci IO, nastavit časovače, přerušení DMA atd. Zkrátka takovou tu nudnou část, pak to umí vygenerovat celý projekt včetně C kódu pro vše naklikáné. Docela hezká věc, pro typický středně složitý procesůrek to může byt mnoho set až tisíc řádek kódu, s kterým se nemusíte patlat. Problém je, že celá tato část se vygeneruje jako jeden soubor main.c v kterém třeba pro časovač bude funkce static void MX_TIM1_Init(void) v které se komplet neinicializuje časovač, třeba jako PWM výstup s DMA kanálem pro proud dat z paměti na výstup. Doposud, snad jasné a přehledné. Nicméně onen časovač tam není pro nic za nic a může třeba generovat hodiny pro nějaký externí ADC převodník (berme to čistě jako příklad a nepitvejme to)
Doposud byla běžná praxe, všechny funkce tykající se onoho extrního ADC byly v souboru ADC.c a tam bylo vše od void ADC_Init(void), která mino jiné dělal i to co void MX_TIM1_Init(void) až po ReadADC(), která vyčítala data z ADC . Důvodem byla a je přehlednost. Při přenesení ADC do jiného projektu stačilo vložit ADC.c a upravit ADC_Init() na nový hw.
To co řeším jak to skloubit s novým generátorem od výrobce, který funkci pro inicializaci časovače MX_TIM1_Init(void) vrazí do main.c ?
Přesunout jí ručně do ADC.c není dobrý nápad, protože onen sw pro generování inicializace lze použít vícekrát i v průběhu projektu třeba na dogenerování něčeho co se zapomnělo, změnilo atd. došlo by tedy znovu k vygenerování nové MX_TIM1_Init(void) v main.c a bylo by to nepřehledné. Další možnost by bylo předávat funkcím v ADC ukazatel na časovač jako parametr, ale nevim zda je to vhodné nebo z ukazatele na časovač udělat externí globální proměnnou, ideální asi není nic z toho, jde spíše o to najít nejméně blbé řešení. :-)