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

hg12345 hg12345 at freemail.hu
Thu Mar 29 11:41:11 CEST 2012


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




More information about the Elektro mailing list