Ho programmato per anni microprocessori e microcontrollori che dovevano gestire eventi in tempo reale (soft). A volte avevo sotto un sistema operativo, altre volte il "nudo hardware".
Per la prima volta mi trovo a dover inviare e ricevere eventi su Linux embedded. Per esempio devo informare di pressioni e rilasci di pulsanti, e ricevere ordini di accensioni e spegnimenti di led.
Mi consigliano (o meglio mi obbligano) ad utilizzare file:
A) Un file per ogni pulsante, contenente un solo carattere, in cui scrivo '1' o '0' a seconda che il pulsante sia premuto o meno. Devo lasciare immutato ciascun file per un minimo di tempo, altrimenti chi va a leggere questi file ogni 10 ms potrebbe perdere eventi (il polling, questo disgraziato);
B) ciascun led è gestito da vari file. Se ho ben capito, un file contiene un carattere che mi informa se un led dev'essere acceso, spento o fatto lampeggiare, e altri due file che in caso di lampeggio specificano il tempo di "on" e di "off" in millisecondi. A quanto pare in Linux esiste una classe standard che gestisce così i led. Dovrei leggere ogni 10 ms tutti i file dei led (aprire il file, leggere il carattere, chiudere il file), controllare se ci sono variazioni ed agire di conseguenza.
A me questo uso massivo del polling fa rizzare i capelli. E va bene che oggi abbiamo microcontrollori potenti, ma finora il metodo principale che ho utilizzato è stato quello di informare i "clienti" dei miei eventi, e ricevere messaggi (o chiamate) quando devo fare qualcosa. Non il viceversa (cioè dovendo chiedere continuamente se è successo qualcosa, caricando e rallentando il processore).
E poi usando dei file! Dei normali file, a quanto ho visto, da aprire con fopen e chiudere con fclose... ogni 10 ms
Mi sembra un metodo molto inefficiente, ma non sapendo praticamente nulla di Linux embedded, chiedo a voi se è normale.
Chiedo inoltre: come si avvisa "canonicamente" un processo Linux di un evento? Con un signal? E come si avvisa un thread?
Come si passano le informazioni relative a eventi tra processi e thread in tempo reale in modo efficiente? Con pipe? Con qualche tipo di coda di eventi in memoria RAM? Oppure con dei file come mi hanno detto di fare?
Potreste consigliarmi qualche buona lettura sull'argomento?
Grazie per la vostra attenzione.

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)







