[elektro] C-s IDE kérdés

Lajos Rancz lajos.rancz at gmail.com
Thu Mar 29 11:08:16 CEST 2012


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]
>


More information about the Elektro mailing list