[elektro] C program szervezése? Help
Janos Scheller
scheller at t-online.hu
Fri Jun 11 19:31:01 CEST 2010
Én a következőket alkalmazom.
Tegyük fel van 10 modulom és egy központi ahol a main fut. A 10 modul
nem látja egymást, semmilyen kapcsolatban nincsenek csak a main látja
mind a 10-et. A main szinte csak az üzenet továbbítást és az esemény
hívást végzi.
Minden modulnak van egy set_message és egy set_event függvénye. A main
modulban is meg van ez. A main-on belül fut egy check_message és egy
check_event. void main {check_message(); check_event()}; Más nincs is benne.
Inicializáláskor minden modul megkapja a főmodul set_event és
set_message függvényének a címét. A set_message-en keresztül a modulok
adatokat küldhetnek egymásnak, a set_event-en keresztül ha valamelyik
modulnak feladata van beírja magát a main loop-ba és a neki beállított
időközönként meg lesz hívva.
Megtervezem ki kinek küldhet adatot. Egy tömbben összeállítom a
kapcsolatotokat. Message[] = {(feladó1_címe, vevő1_címe),
(feladó2_címe, vevő2_címe), stb} ebből a check_message tudni fogja ki
kinek akar küldeni.
Jön egy megszakítás vagy valaki adatot akar küldeni, ekkor beírja magát
a set_message-be (saját cím, adat cím, adat hossz). Ekkor a main
függvényben levő check_message el fogja küldeni az adatot a megfelelő
helyre, ami a Message tömbből olvas ki. Ha az adat át lett véve
automatikusan törli a listából, nem lesz mégegyszer meghívva.
Ha valamelyik modult be kell kapcsolni beírja magát a set_event-be és az
időt milyen sűrün legyen meghívva. set_event()függvény címe, idő pl:
100ms). Ez a függvény addig kerül meghívásra amíg ki nem lövi saját
magát a feladat befejezésével. clear_event(függvény cím amit ki akarok lőni)
Ha ki akarok hagyni egy modult, ki kell törölni a Message tömbből a
hivatkozást, ki kell venni a header includot és ki kell venni az init
részből azt, amikor átadom a fő modul event és message címeit az
almodulnak. Ez összesen 3 törlés és a program garantáltan fordítható
ill. linkelhető marad.
A modulok futásidőben lesznek csak összekapcsolva.
> Nagyon tehetségtelenül fogalmazok :-(
>
> Nem a program megírásával van problémám! (Néhány ilyen már működik, egy nagy ASM-ben forrásban, nincs linker)
>
> A program fordítási felépítésében vesztem el.
>
> Olyan megoldást keresek, ha egy fordítási egységet kiveszek a programból (nem fordítom és nem is linkelem ez a részt), akkor is fordítható és futtatható programot tudjak fordítani minimális ráfordítással.
>
> Gondolom olyat nem lehet írni, hogy ne kelljen hozzá nyúlni, de ez elképzelhető, hogy ennek az idejét minimálisra lehet csökkenteni.
>
>
--
Scheller János
scheller at t-online.hu
More information about the Elektro
mailing list