Timer Hardware e Watchdog

Richieste di supporto in merito a problemi su hardware e firmware

05/09/2013 17:30:48
Gravatar
Totale Interventi 7

Timer Hardware e Watchdog

Salve a tutti,
sono un nuovo utente del forum e del micro framework.
Scrivo abitualmente firmware in assembler o ansi C, e dopo aver letto gli articoli del sito mi stavo chiedendo in che modo il framework consente all'utente di configurare ed usare i timer hardware del micro.
Non vedo mai che sia usato il watchdog per esempio, ed inoltre trovo nel firmware istruzioni tipo Thread.sleep(200) che non capisco in quale modo vengano poi associate ad un timer hardware (quale degli N disponibili?). Come si fa a settare i bit dei registri per configurare tutte le opzioni dei timer?

Ringrazio e colgo l'occasione per fare io complimenti per il sito.

 

07/09/2013 05:50:40
Gravatar
Totale Interventi 75

Re: Timer Hardware e Watchdog

Ciao e scusa per il ritardo, ma la mail di notifica era stata "spammata" da Gmail :)

Dunque, la risposta breve è che "il .NETMF non espone l'accesso ai timer hardware del microcontrollore". Questo perché il modello di scheduling degli slot temporali allocati per l'esecuzione del codice managed (ossia il codice IL, il linguaggio macchina della CLR .NET) è di tipo preemptive, un po' come avviene in un sistema operativo. Ovviamente lo schedulatore dei thread lavora utilizzando un timer (di solito il SysClock del core ARM) hardware in due modi:

  • Dopo l'esecuzione di ciascuna istruzione IL/CIL lo schedulatore verifica che non sia finito il lasso temporale assegnato al thread corrente (in tutti i porting che ho visto questo intervallo è di 20ms)
  • Al verificarsi di un interrupt hardware (che sia "riconosciuto" dalla CLR .NET per quello specifico porting, visto che non tutti lo sono) viene messo in una coda apposita un oggetto di tipo HAL_Completion, che contiene (detto sommariamente, ma la sostanza è questa) al proprio interno un riferimento ad un evento managed da invocare quando tale elemento verrà scodato. Lo scodamento avviene anche in questo caso al termine dello slot temporale corrente e quindi può avvenire anche 20ms dopo che si è verificato l'interrupt hardware.

Tieni conto comunque che, con le dovute limitazioni legate alla "risoluzione temporale" (che non può scendere al di sotto dei 20ms, di fatto, senza rischiare di essere molto poco deterministica) utilizzando uno o più oggetti della classe Timer del framework si può realizzare un firmware che implementi una o più "logiche" legate a lverificarsi di eventi periodici (un po' come in un RTOS).

Per il watchdog il discorso è un po' diverso perché di fatto esiste un layer di interoperabilità che permette ai porting che lo implementano di utilizzare ad esempio il reset automatico in caso di stallo. Ad oggi per quanto ne so i porting premium della GHI sono tra i pochi ad implementarlo ma esistono implementazioni "community" anche per i porting open basati su STM32F4 (ad es. qui:http://www.ghielectronics.com/community/codeshare/entry/722).

08/09/2013 11:45:39
Gravatar
Totale Interventi 7

Re: Timer Hardware e Watchdog

Grazie mille Lorenzo, per la spiegazione completa e molto chiara.
Credimi che ho cercato (anche in inglese) informazioni a riguardo, ma non ne parla nessuno.

Deduco che sia abbastanza improponibile l'utilizzo del .net micro framework in ambiti come il controllo motore (inverter ecc..) mentre sia sicuramente piu adatto qualora si voglia realizzare una scheda che si interfacci al wi-fi o ad una rete di computer, o laddove si voglia realizzare un webserver, applicazioni "ad alto livello" diciamo.

Nel mio caso specifico, vorrei controllare l'intensità di luce si una lampadina usando un TRIAC. Devo intercettare lo zero crossing della sinusoide di rete (ogni 10ms) che far partire il triac dopo qualche ms (es. 5ms dopo che ho ricevuto l'interrupt dal sync di rete) in modo da parzializzare l'onda. Penso non si possa fare con il micro framework ... che ne pensi?

Grazie