[elektro] C tesztsor makróban

elight elight at gmail.hu
Mon Dec 21 17:04:04 CET 2015


nem.

Nekem az a gondom,
hogy egy programban macerás sok sok
tesztsor sorozatot  kiremezni időnként,
utána meg visszatenni...

Az IFDEF Testfase_x  ekbe meg
    előbbutóbb belekavarodok..

És mos éppen akadna sok tesztváltozóm..
Szubrutinnal vagy makróval lehet a
problémát kilőni, mert az egy sorban beírható
és kiremezhető.
A szubrutinnál sajnos minden modulban, hogy működjön ,
  kellenek máshol definiált globál változók.
Tehát a makró ilyesmihez jobb lokalizáltabb lenne,
és minden tesztfázis után úgyis mindent újra fordítok.
Illetve ezetket a teszsorokat benne is hagynám kiremezve
a forrásban , hogy később ha valamiért kell ,
vissza lehessen emelni.
Az meg hogy melyik mit csinál , úgyis ott marad
a kommentje mellette.


Tehát mondjuk beírom tesztsorba

   tst_togle_B(6);   // RX preambe megérkezett


akkor a makró a következőre fejtené ki, és rakná a programba:



      if( tst_B6_togle  == 0 )
      {
          tst_B6_togle   = 1;
          LATB.6  = 1;
      }
      else
      {
          tst_B6_togle   = 0;
          LATB.6 = 0;
      {

Vagy mondjuk

tst_togle_B(2);

akkor

      if( tst_B2_togle  == 0 )
      {
          tst_B2_togle   = 1;
          LATB.2  = 1;
      }
      else
      {
          tst_B2_togle   = 0;
          LATB.2 = 0;
      {


A togle azért kell, mert a rövid tüskék nem jól
láthatók egy komplex jelfolyamban , és
hosszabb isőzítéseket most nem tehetek be..   !!!
Egyébként sűrűn használtam eddig a mondjuk:

#Debug_F0___________PULSE_10US__()   LATH.3 = 1 ; Delay_us(10); LATH.3 = 0 ; Delay_us(10);LATH.3 = 1 ; Delay_us(10);LATH.3 = 0

vagy lehet cifrázni még jobban, akár mint a morzejelet..:-)
pl.  két rövid és egy  hosszulépés nekem.;-)
És ez a markerezés több eseménynél több spúron
roppant látványosan de jól kiértékelhetően alakulhat
többirányú párhuzamos kommunikáció esetén is...


  Amit írtál másodszor azzal a toggle is  majdnem létrehozható

de már látom hülyeségemet,
mert a globális változók létrehozását
mindenképpen el kell végezni minden olyan modulban
amelyikben használni szeretném,
mert különben nem kapom vissza az előző értékét..
( szóval valami ilyesmit szeretnék mégis koncentrálni,  megkerülni )

Üdv István








2015-12-21 16:30 keltezéssel, hg12345 írta:
> biteket csak strukturában tudsz kezelni C-ben "korrekten"
>
> typedef struct {
> 					unsigned	b00:1;					
> 					unsigned	b01:1;
> 					unsigned	b02:1;
> 					unsigned	b03:1;
> 					unsigned	b04:1;
> 					unsigned	b05:1;
> 					unsigned	b06:1;
> 					unsigned	b07:1;	
>         } uint8bits_t
>
> gondolom ezt ismerted.
>
> innen kezdve már csak egy ugrás a bit művelet, de azért érdemes vigyázni a "cast"-lásokkal
>
> #define    bitdef(value,bname)     ((uint8bits_t*)&value)[0].##bname
>
> #define    btoggle(value,bname)  bitdef(value,bname) ^=1;
> #define    bset(value,bname)      bitdef(value,bname) =1
> #define    bclr(value,bname)       bitdef(value,bname) =0
>
> ez tetszőlegesen kiterjeszthető, akárhány bites változóra, néhány fordító csak az int hosszúságáig engedélyezi.
>
> használat :
> int AAA;
> btoggle(AAA,b03);
>
> hogy mennyire olvasható, az már ízlés kérdése :-()
>
> Szintén vigyázni kell az optimalizálásra, mert azok a változók amit nem használsz tovább ott -O3 esetén kidobásra kerülnek a műveletek, ez nem túl jó a nyomkövetésben, gondolom erre szeretnéd használni.
> Ez esetben használj "volatile" módosítót a változó definiálásánál, a perifériáknál ezt a gyári includokban megcsinálják.
>
> Erre gondoltál?!
>               
>
> -----------------------------------------
>            elektro[-flame|-etc]



More information about the Elektro mailing list