[elektro] C-s IDE kérdés
Lajos Rancz
lajos.rancz at gmail.com
Thu Mar 29 12:57:01 CEST 2012
Helló!
Most is vannak táblázataid meg végtelen mennyiségű makród enumod, unionod
stb ahogy az évek során a leveleidből kiveszem :) Én ezekre gondoltam
(lehet nem kapcsolódik most közvetlenül ehhez az esethez). Én inkább valami
olyanban gondolkodnék, hogy ezt a sok kódot amit kézzel írsz (és emiatt
folyamatosan a compiler/preprocessor korlátaiba ütközöl) generálhatnád
valamilyen script nyelvben Pythonban Perlben stb (én pl lokalizációt
csináltam így).
Üdv
2012. március 29. 11:41 hg12345 írta, <hg12345 at freemail.hu>:
> Szia!
>
> Pont a táblázatot szeretném megúszni!
> A PIC asm-ben volt
> mssg #v()
> utasítás ahol az értéket adta. (Régi szép idök :-() ez nagyon hiányzik a c
> fordítókból.
>
> A scripten egy külső megírt programmal generált listára gondolsz?
> Ezt most ugyan nem scripttel de olvasható formában macrokkal a C fordító
> megcsinálja. Ez tartalmazza a szükséges feltételeket. Az indexelés értéke
> csak a program ellenőrzése közben érdekes utána, már lényegtelen. Ami
> fontos az minden más amire az indexen keresztűl a union táblázatokban
> található.
> Ez igy kényelmes, mert mindent megcsinál a fordító.
>
>
> Lajos Rancz <lajos.rancz at gmail.com> írta:
> >Helló!>
> >
> Hát az nehéz ügy. Ezzel az assert-tel belső értékekre is tudsz
> feltételeket>
> adni ha kell.>
> Mivel nagyon ezt a táblázatos irányt szeretnéd nem gondolkodtál el még>
> azon, hogy nem kézzel írod hanem valamilyen scripttel generálod a kódot?>
> (majd azt fordítod). Az összes ellenőrzést bele tudnád tenni amit>
> szeretnél script oldalon és nem kéne ezzel szívni.>
> >
> Üdv>
> >
> 2012. március 29. 10:39 hg12345 írta, <hg12345 at freemail.hu>:>
> >
> > Szia, értem.>
> >>
> > Nem csak végértékre vagyok kiváncsi! A közbenső indexek értékeire, föleg>
> > ezekre.>
> > Nagyon sok ilyen indexem van, és debuggoláskor nem mindig tudom az
> értékét>
> > (nem mindig oldható, meg hogy enum alapú tipussal definiáljam a
> változót)>
> > Az EEPROM definiállás esetén meg a laphatárra illesztésnél jól jönnek a
> az>
> > értékek.>
> >>
> > Lajos Rancz <lajos.rancz at gmail.com> írta:>
> > >Helló!>>
> > >>
> > Belejegyzetelek a leveledbe!>>
> > >>
> > 2012. március 29. 10:18 hg12345 írta, <hg12345 at freemail.hu>:>>
> > >>
> > > Szia,>>
> > > köszönöm a segítséget,>>
> > > de nem értem :-( !!!!>>
> > >>>
> > > #define ASSERT_CONCAT_(a, b) a##b>>
> > > #define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)>>
> > > #define ct_assert(e) enum { ASSERT_CONCAT(assert_line_, __LINE__) =>>
> > > 1/(!!(e)) }>>
> > >>>
> > > Az első két sor még megy, ugyan a duplázás miért fontos számomra
> homály.>>
> > >>>
> > >>
> > A duplázás azért fontos, hogy az eredmény mindenképpen 0/1 legyen ha a>>
> > bejövő érték nem is ilyen volt.>>
> > >>
> > >>
> > > A harmadik sor létrehoz egy assert_line_XXXX alaku enumot, aminek ez>>
> > > érteke 1 lenne, de az>>
> > > !!(e) szerint változik, ha e=0 (FALSE) akkor nem tudom mit csinál
> mert>>
> > > nullával nem osztunk, minden más esetben 1.>>
> > >>>
> > >>
> > Épp ez a lényeg! Mert a 0-val való osztás kiderül futási időben => nem>>
> > fordul a kód!>>
> > Tehát pl:>>
> > ct_assert(sizeof(int) == 4) // ez nem fog fordulni ha int nagysága 16
> vagy>>
> > 64 bit.>>
> > >>
> > Ez az egész arra való, hogy fordítási idejű limiteket tegyél a
> programba.>>
> > Pl a te esetedben>>
> > ct_assert(myenum_last * sizeof(record) < 8192); // record-okat tartunk>
> > egy>>
> > 8192 bajt nagysagu EEPROM-ban, myenum_last az utolso elem az enumok
> kozt>>
> > >>
> > Üdv>>
> > ----------------------------------------->>
> > elektro[-flame|-etc]>>
> >>
> >>
> > ----------------------------------------->
> > elektro[-flame|-etc]>
> >>
> ----------------------------------------->
> elektro[-flame|-etc]>
>
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list