[C] __attribute__

dzcosimo
salve
qualcuno mi sa dire cosa significhi in C il comando __attribute__ ed in particolare __attribute__ ((interrupt,no_auto_psv))?
grazie

Risposte
Rggb1
Non è un "comando" (ok ma questo lo sai), è una estensione GNU C, completamente dettagliata nel manuale
http://gcc.gnu.org/onlinedocs/gcc-4.1.2 ... sions.html

descritta qui
http://gcc.gnu.org/onlinedocs/gcc-4.1.2 ... yntax.html

Nel caso,
interrupt
    Use this attribute on the ARM, AVR, C4x, CRX, M32C, M32R/D, MS1, and Xstormy16 ports to indicate that the specified function is an interrupt handler. The compiler will generate function entry and exit sequences suitable for use in an interrupt handler when this attribute is present.

mentre no_auto_psv è target-spec e si riferisce a alcuni microcontrollori (afair, ma chi l'ha mai usata..? State facendo codice del genere, tipo laboratorio?)

dzcosimo
sì scusami ho usato una terminologia sbagliata ma non sapevo davvero come chiamarlo :D
sì è per la tesi, io ho sempre programmato in c++ e mai in c e per giunta mai un microcontrollore XD
ok quindi se ho capito bene:
__attribute__ --> serve per spiecificare delle "capacità" (di nuovo una terminologia sbagliata ma si fa per capirsi) aggiuntive di cui si vuole dotare la funzione
interrupt --> serve per specificare che quella che si sta scrivendo deve essere gestita come una routine
no_auto_psv --> non ho capito :-( . Ho trovato che probabilmente serve a chiedere al sistema di non fare delle inizializzazioni ma non ho capito nè quali nè tantomeno perchè

per quanto riguarda la interrupt poi non ho capito bene cosa implica:
-quando viene eseguita le interruzioni vengono mascherate?
-cosa si intende per "function entry and exit sequences" ?

Rggb1
"dzcosimo":
no_auto_psv --> non ho capito :-( . Ho trovato che probabilmente serve a chiedere al sistema di non fare delle inizializzazioni ma non ho capito nè quali nè tantomeno perchè

Gogglando un pochettino si trova che
The no_auto_psv attribute tells the compiler to not allocate the variable in program space designated for automatic program space visibility window access. Any variable in auto_psv space can be read but not written to. Next, we will move on to the hardware setup in order to get this small project working. When ready to compile, compile the code and have fun.

relativamente a microcontrollori PIC (mi ricordavo bene! ;)). Cercando ancora probabilmente otterrai maggiori informazioni, non credo troverai difficoltà (ma devi cercare in anglè!)

"dzcosimo":
per quanto riguarda la interrupt poi non ho capito bene cosa implica:
-quando viene eseguita le interruzioni vengono mascherate?
-cosa si intende per "function entry and exit sequences" ?

1) Presumo, ma dipende dall'implementazione; l'attributo non serve a quello, infatti

2) quell'attributo indica al compilatore di generare codice di preambolo e di uscita necessari a garantire un corretto funzionamento; infatti istruisce il compilatore che quella è una funzione che deve gestire un interrupt.
Se a seguito di INT('A') viene chiamata la tua bella implementazione di funzione di interrupt, e non hai usato quell'attributo, in questa devi tener traccia della coerenza manualmente, ovvero inserire opportuno codice che salvi la situazione attuale e la ripristini alla fine: quanto meno salvare lo stato/valore dei registri e il PC (e se ti scordi qualcosa?)

Quel comodo attributo fa sì che il compilatore faccia questo al posto tuo; magari qualcosa da codificare rimane, ma in genere è dovuto alla tua implementazione ovvero al tuo codice (e quindi è progettuale, lo sai in anticipo).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.