[elektro] C program szervezése? Help
Moczik Gabor
pm_levlista at progzmaster.hu
Fri Jun 11 19:36:36 CEST 2010
hg12345 wrote:
> Értem,
> de ez innen már akár objektum orientáltnak is nevezhető....
>
> Minden program csatolást alapvetően FLASH-ban szeretem tudni (a mostan RoundRobin-nal van ez fixen megoldva) , eddig nem csináltam RAM-ban tárolt program sorokat, igazából nem is szeretnék.
Én az eredeti témát továbbra sem értem pontosan, de ha olyasmi, mint
amit Ráncz Lajos írt, akkor az valóban az OOP, ezzel a C++ irányába
vezet, és hasonlóval próbálkoztam én is.
Mindenesetre a program nem kell hogy a RAM-ban tárolódjon, csak a VMT
(virtuális metódus tábla) szokott ott tárolódni, ami tulajdonképpen
pointereket tartalmaz a meghívandó függvényekre. Ha ilyen dinamikus
rendszert akarsz létrehozni, asszem nincs túl sok más lehetőséged, de
ezzel meg belépsz egy olyan absztrakciós szintre, ahol a hibalehetőségek
száma növekszik és egyre nehezebben debugolható lesz a rendszer.
Mellesleg én a legutóbb egy hasonlóan moduláris felépításű berendezésben
olyasmit követtem el, mint amit Vajk írt, egy központi eseményfeldolgozó
ciklus, ami a különféle blokkok által kiváltott eseményeket "osztotta
szét". Ez egyben a feladatütemező is, amolyan kooperatív multitaszk
rendszer.
Sajnos félbemaradt, így a kísérleti üzemnél tovább nem jutott, és csak
addig a szintig van kész, hogy az események címzettje még statikusan van
leírva és van egy vezérlő függvény ami az eredményeket "kézzel"
pakolássza (tehát valamelyest ismernie kell az összes blokkot).
PIC18-ra készült, ott eddig tűnt érdemesnek bonyolítani a dolgot, de ha
mondjuk ezt tovább folytatnám, akkor a különféle modulok feliratkoznának
az esemény elosztóra valamilyen egyedi azonosítóval és a callback
címükkel, valamilyen módon (pl. maszk) meghatározva hogy milyen
eseményeket kell részükre kézbesíteni.
A mérési eredmények kezelése a problematikus, lehet az eredményre mutató
pointert az eseménnyel együtt átadni, de valahol el kell dönteni hogy
milyen típusra mutat, és ezt tudni kell abban a blokkban is, ami ezt
kiolvassa. Ez define-okkal kicsit elvonatkoztatható, illetve ha
szignifikánsan módosítani kell, akkor fel kell venni egy új esemény
típust, ami az újfajta eredményt adja. Ahol fel vagy készülve rá, ott
ezt kell feldolgozni, ahol nem, ott a régit.
A probléma még, hogy a modul hogyan iratkozik fel, úgy hogy ez is
dinamikus legyen. Kellene egy init, de ha ezt direktben meghívod, akkor
linkelési hiba lesz, ha később kiveszed a modult. Pascal-ban egyszerű
lenne, mivel ott egy unit-hoz lehet inicializációs részt felvenni, ha
linkeled akkor lefut még a főprogram indulása előtt, ha nem akkor meg
ott sincs. C-ben nincs ilyen, ezt valamilyen fordító specifikus módon
lehetne csak megtenni.
--
((( Móczik Gábor )))--((( e|mail: pm-01 |@| progzmaster |.| hu )))
((( S.k.y.p.e.: moczik )))
More information about the Elektro
mailing list