[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