Gestione interrupt su RaspberryPi (ARM Cortex-A7)

  • Giovasci
  • Avatar di Giovasci
  • Offline
  • New Member
  • New Member
Di più
5 Anni 6 Mesi fa #1 da Giovasci

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
5 Anni 6 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Gestione interrupt su RaspberryPi (ARM Cortex-A7)
Posso fare qualche considerazione in generale.

Le funzioni delle interruzioni sono un poco particolari, e in generale non accettano parametri.
Se devi gestire una variabile puoi usarne una globale ma devi essere certo che solo una funzione alla volta acceda a questa. Se hai un solo thread/funzione non è un problema.
In maniera più elegante puoi fare una funzione di incremento che richiami in quelle delle interruzioni, in maniera da accedere alla variabile in maniera "ordinata". Python non supporta variabili private per cui l'utilizzo della funzione aiuta fino ad un certo punto ma ordina le idee.

Per il ritardo dopo la lettura potresti usar time.sleep(0.02)
Normalmente qualche decina di ms basta
dopo la chiamata dell'interrupt puoi aspettare 0.02 o più secondi e poi leggere il pulsante. se è ancora attivo è un evento valido.

Non sono certo di come Python gestisca gli interrupt, ma credo che mascheri gli stessi fino a che non si esca dalla relativa funzione dell'interrupt stesso.
All'uscita dell'interrupt bisogna vedere se viene mantenuto memoria di un eventuale evento o meno come nelle MCU, ma è una specifica che bisogna leggere sul manuale o fare qualche prova.

Ho programmato RPi in Python ma solo per semplici esempi. Ora sto usando il C/C++ ma sono a metà del corso...

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiMatteo Garia