[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