Vorrei sottoporre alla vostra attenzione due modi per scrivere una funzione. Si tratta di una funzione che serve per far lampeggiare (o no) due LED a seconda dello stato di funzionamento della macchina.
Occorre tenere presente questi importanti aspetti:
- I LED sono utilizzati solo in questa funzione. In nessun altra parte del programma i LED vengono accesi o spenti.
- L' hardware e' rigido. Si sa gia' in partenza che i LED sono accesi con uno stato logico 1 e spenti con uno stato logico 0. Non si potra' mai pensare il contrario. Cosi' sono punto e basta. E anche se si collegassero ad altri pin di uscita sarebbe sempre e comunque accesi con uno stato logico 1 e spenti con uno 0. L' hardware lo impone.
STILE #1
- Codice: Seleziona tutto
#define mInitAllLEDs() LATD &= 0xFFF8; TRISD &= 0xFFF8;
#define mLED_1 LATDbits.LATD0
#define mLED_2 LATDbits.LATD1
#define mGetLED_1() mLED_1
#define mGetLED_2() mLED_2
#define mLED_1_On() mLED_1 = 1;
#define mLED_2_On() mLED_2 = 1;
#define mLED_1_Off() mLED_1 = 0;
#define mLED_2_Off() mLED_2 = 0;
#define mLED_1_Toggle() mLED_1 = !mLED_1;
#define mLED_2_Toggle() mLED_2 = !mLED_2;
void BlinkUSBStatus(void)
{
static WORD led_count=0;
if(led_count == 0)led_count = 10000U;
led_count--;
#define mLED_Both_Off() {mLED_1_Off();mLED_2_Off();}
#define mLED_Both_On() {mLED_1_On();mLED_2_On();}
#define mLED_Only_1_On() {mLED_1_On();mLED_2_Off();}
#define mLED_Only_2_On() {mLED_1_Off();mLED_2_On();}
if(USBSuspendControl == 1)
{
if(led_count==0)
{
mLED_1_Toggle();
if(mGetLED_1())
{
mLED_2_On();
}
else
{
mLED_2_Off();
}
}//end if
}
else
{
if(USBDeviceState == DETACHED_STATE)
{
mLED_Both_Off();
}
else if(USBDeviceState == ATTACHED_STATE)
{
mLED_Both_On();
}
else if(USBDeviceState == POWERED_STATE)
{
mLED_Only_1_On();
}
else if(USBDeviceState == DEFAULT_STATE)
{
mLED_Only_2_On();
}
else if(USBDeviceState == ADDRESS_STATE)
{
if(led_count == 0)
{
mLED_1_Toggle();
mLED_2_Off();
}//end if
}
else if(USBDeviceState == CONFIGURED_STATE)
{
if(led_count==0)
{
mLED_1_Toggle();
if(mGetLED_1())
{
mLED_2_Off();
}
else
{
mLED_2_On();
}
}//end if
}//end if(...)
}//end if(UCONbits.SUSPND...)
}//end BlinkUSBStatus
STILE #2
- Codice: Seleziona tutto
#define mInitAllLEDs() LATD &= 0xFFF8; TRISD &= 0xFFF8;
#define mLED_1 LATDbits.LATD0
#define mLED_2 LATDbits.LATD1
void BlinkUSBStatus(void)
{
static unsigned short led_count=0;
if(led_count == 0)led_count = 10000U;
led_count--;
if(USBSuspendControl == 1)
{
if(led_count==0)
{
mLED_1 = !mLED_1;
mLED_2 = mLED_1;
}
}
else
{
if(USBDeviceState == DETACHED_STATE) { mLED_1 = 0; mLED_2 = 0; }
else if(USBDeviceState == ATTACHED_STATE) { mLED_1 = 1; mLED_2 = 1; }
else if(USBDeviceState == POWERED_STATE) { mLED_1 = 1; mLED_2 = 0; }
else if(USBDeviceState == DEFAULT_STATE) { mLED_1 = 0; mLED_2 = 1; }
else if(USBDeviceState == ADDRESS_STATE)
{
if(led_count == 0)
{
mLED_1 = !mLED_1;
mLED_2 = 0;
}
}
else if(USBDeviceState == CONFIGURED_STATE)
{
if(led_count==0)
{
mLED_1 = !mLED_1;
mLED_2 = !mLED_1;
}
}
}
}
La domanda e': quale dei due stili considerate migliore e per quale motivo?
E' solo semplice curiosita'.


Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



instead of
(Anonimo).
ain't
, right?
in lieu of
.
for
arithm.



