EC++
Andras Tantos
andras_tantos at yahoo.com
Wed Feb 11 23:02:39 CET 2004
> > uC-eken mekkora letjogosultsaga van a C++-nak?
> > Vagy inkább Embedded C++-nak.
> >
> > Vannak forditok, amelyek tamogatjak (PL IAR Atmega-ra), de nem teljesen
> > ertem hogyan mukodik a dolog.
> > Ha egy objektumot letrehozok, akkor az elvileg kodmasolast, betoltest
> > jelent. Ezt ugye FLASH-ben megjatszani nonszensz.
>
> Latszik hogy nem kezeltel meg asm-bol ojjektumokat...
> A kod marad a flashben. A RAM-ban letrehozott ojjektumok strukturajaban
> van egy pointer a class-re, onnan pointer a class dispatcher hook-ra.
???
Ugy erted, hogy a class, az egy struktura, aminek van egy plusz
'lathatatlan' eleme, ami a virtual fuggveny-tablara mutat, nem? A
fuggvenytabla maga statikus, lehet akar FLASH-ben is. Es persze csak akkor
kell, ha vannak virtualis fuggvenyek is. Amig nem deklaralsz egyet sem,
addig egy C struktura es egy C++ class memoria-foglalas es hasznalat
szempontjabol ekvivalens. Fordito es kod kerdese, de akar meg az is
elkepzelheto, hogy a konstruktort forditasi idoben kiertekeli, ha csak
konstans bemeneti parameterekkel hasznalod, igy bizonyos konstans osztalyok
szinten kerulhetnek FLASH-be.
Ha virtualis, vagy tobbszoros leszarmazast hasznalsz, egy kicsit
komplikalodik a dolog (lehet, hogy tobb virtualis metodus-tabla-pointer
kerul a strukturaba) de a lenyeg valtozatlan marad. Es nem tudom, hogy az
EC++-ben van-e tobbszoros meg virtualis leszarmazas.
> Ha valami nem tetszik, azt atiranyitod a sajat flash-ben futo
> fuggvenyedre, ami szukseg eseten meghivhatja az eredetit is.
> (Subclasst lehet igy csinalni)
> Kar hogy az ilyeneket nem szoktak tudni megoldani a hatulgombolos
> c programozok...
> Hogy megeri-e? Ha amugy is hasznalsz dinamikus memoriafoglalast,
> akkor megerheti. Egyebkent en nem csinalnek ilyeneket.
C++ osztalyok hasznalata nem igenyel feltetlnul dinamikus memoriat. Az
exception-handling mar fordito-fuggo, a GCC-ben pl. igen.
>
> > Az objektumok kozotti idosztast hogyan oldja meg?
>
> Nem feltetlenul van ra szukseg, az objektum kezelese mehet a metodust
> kuldo taszkban is.
????
Az C++ nemdefinialja a task-ok fogalmat. Sem az idoosztast. A metodus-hivas
teljesen azonos egy fuggveynhivassal, csak van plusz egy rejtett parameter
(a this pointer).
> A C++ -t nem ismerem, nem tudom hogy az milyen objektum-kezelest
> implikal. Ha nem megoldhato, meg kell csinalni a sajat OOP rendszert
> sima C-ben. En megcsinaltam asm-ben, nem veszes.
En szinte minden programomat C++-ban irom. Igaz, nem hasznalok 8-bites
mikro-kat, a legkisebb proci, amire programozok (mostansag) az az ARM7TDMI
core. De lehet ra egesz jo kis C++ programokat irni, minimalis run-time
igennyel, es aranylag kis kod-merettel (<2kbyte - ez egy 32-bites RISC-nel
512 utasitast jelent, minusz az adatszegmens merete).
Persze tudni kell, hogy mit lehet es mit nem, nem erdemes a teljes C++
repertoart bevetni.
Ami nagyon hasznos:
- Operator overloading
- Inline fuggvenyek (ez mar a legujabb C-ben is benne van, de eleg keves
fordito ismeri meg)
- const valtozok, parameterek, fuggvenyek, metodusok (szinte benne van a
legujabb C-ben)
- jobb tipusellenorzes, sokkal jobb statikus ellenorzes (forditasi idoben)
- jobb optimalizalas (mar ahol, nagyon fugg a forraskodtol)
- enum-ok
- namespace-ek
- automatikus konstruktor es destruktor hivas. (ezzel egy csomo hiba-osztaly
eleve kiszurheto.)
- Ha mar kell dinamikus memoria, a heap-kezeles testre szabhato, akar
tipusrol tipusra maskent
Ami sokszor jol jon:
- class-ok egyszeres leszarmazassal es virtualis metodusok nelkul (itt a
destruktorral vigyazni kell).
Ami neha hasznos lehet, feladata valogatja:
- class-ok virtualis metodusokkal
Es a maradek, amit csak nagy elovigyazatossaggal, vagy nem hasznalnek:
- tobbszoros es virtualis leszarmazas
- template-ek (az egesz egyszeruen atlathatoakat leszamitva)
- exception handling
Udv,
Tantos Andras
http://andras.tantos.homedns.org
More information about the Elektro
mailing list