Domanda

Come si crea una tabella/array di transizione di stato nel codice effettivo/pseudo-codice?

Non ho ancora sperimentato il momento "ah-ah" con la macchina di stato alla codifica (e lo voglio davvero). Ho esaminato diversi campioni di codice e ho letto i post del blog, ma non è ancora clic su.

Sto cercando una spiegazione pragmatica di come funziona la tabella di transizione di stato e di come viene creata in un formato di array. Se possibile, esiste un metodo "passo-passo" per raggiungere la soluzione?


Il caso/esercizio particolare a cui sto lavorando è questo:Sto scrivendo un driver di codificatore rotante grigio per un micro-controller in base al framework .NETMF. Non è in tempo reale e quindi cambia un po 'le regole. Gli interrupt vengono catturati e messi in coda e quindi eseguiti in un thread ad alta priorità. C'è un ritardo, quindi fa catturare lo stato di entrambi i pin encoder nel momento effettivo dell'interrupt. Abbastanza accurato da causare alcuni errori. Detto questo, quando l'interrupt viene messo in coda, il suo stato viene catturato in quel momento. Quando l'ISR viene finalmente eseguito, lo stato statale del pin viene passato come argomento. Pertanto, posso ottenere solo uno stato di un pin alla volta. Penso che sia sufficiente per farlo funzionare.

Encoder States For Pin A and B:
A B
0 1
0 0
1 0
1 1 - base state(neutral position of the encoder) (move up for one direction and down for opposite direction)
0 1
0 0
1 0

Il rimbalzo meccanico negli encoder verrà anche catturato e messo in coda, ma da quello che ho capito, la macchina a stato può gestire questi "errori" e continuare a produrre un buon risultato se il dispositivo lo fa attraverso un ciclo.

Spero che questa domanda sia chiara. Posso aggiungere ulteriori informazioni secondo necessità.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top