PDA

Visualizza la versione completa : MuIn: firmware, reset, ecc.


codesink
04-16-2010, 12:54 PM
Salve,

e' la prima volta che ho a che fare con la MUIN quindi perdonate se scrivo fesserie :)

Funziona tutto bene pero' ho qualche domanda, un paio di segnalazioni ed una feature request :-)

- vorrei sapere se la versione del firmware che c'e' nel thread in evidenza (1.6.) e' l'ultima disponibile ed e' quella che viene installata sulle MUIN acquistate di recente

- ad occhio questo (in Parser()) mi sembra un bug:

if (strcom[0] = '@')

- questa anche credo sia una svista (anche se e' equivalente alla versione "classica" con &&):

if (TXcount == 8 & data == '#')

- nella mia applicazione la muin e' collegata ad una foxg20 e al primo avvio la fox configura i GPIO col comando '@E'; fatto cio' dovrei resettare la muin per rendere effettivi i cambiamenti... non c'e' un pin di reset oltre quello su cui e' attaccato il pulsante RESET giusto?

- nel programming manual c'e' scritto che il comando GR per leggere gli IO ritorna 4 bytes invece (almeno nella mia versione) i byte ritornati sono 8...

La feature request e' che sarebbe comodo (e magari piu' efficiente) lasciar controllare gli input alla muin e mettersi in lettura sulla seriale i attesa di un cambio di stato.

Grazie!
stefano

astrobeed
04-16-2010, 01:44 PM
Salve,
- vorrei sapere se la versione del firmware che c'e' nel thread in evidenza (1.6.) e' l'ultima disponibile ed e' quella che viene installata sulle MUIN acquistate di recente


L'ultima release è la 1.7, è da qualche parte sul forum, non aggiunge nessuna funzione, sistema solo un problema di ricompilazione che è saltato fuori con le nuove versioni del C18.
La versione 1.6 è perfettamente funzionante e non risulta nessun bug.

Questo è il thread relativo.
http://www.robot-italy.net/roboforum/showthread.php?t=2326



- ad occhio questo (in Parser()) mi sembra un bug:

if (strcom[0] = '@')


Non è un bug, è un "trucco" utile per il debug.
In questo caso la if non fa nessun confronto, risulta sempre vera, è come scrivere if(true).
Dato che ci troviamo già nel parser non è realmente necessario verificare che il primo carattere del buffer sia una '@', carattere usato per il sync, perchè questa verifica avviene già all'interno della ISR.



- questa anche credo sia una svista (anche se e' equivalente alla versione "classica" con &&):
if (TXcount == 8 & data == '#')


Tra & e && c'è la piccola differenza che con & se la prima espressione del confronto è falsa non vengono valutate le seguenti AND perchè il risultato è sempre falso.
Su un pc non fa nessuna differenza, ma su una piccola mcu non eseguire istruzioni inutili, cioè proseguire con un confronto che non serve a nulla, fa risparmiare spazio di memoria e tempo cpu.


- nella mia applicazione la muin e' collegata ad una foxg20 e al primo avvio la fox configura i GPIO col comando '@E'; fatto cio' dovrei resettare la muin per rendere effettivi i cambiamenti... non c'e' un pin di reset oltre quello su cui e' attaccato il pulsante RESET giusto?


Il reset si trova anche sul primo pin del connettore ICSP, è quello col pad quadrato.


- nel programming manual c'e' scritto che il comando GR per leggere gli IO ritorna 4 bytes invece (almeno nella mia versione) i byte ritornati sono 8...


Devo verificare.


La feature request e' che sarebbe comodo (e magari piu' efficiente) lasciar controllare gli input alla muin e mettersi in lettura sulla seriale i attesa di un cambio di stato.


Il software della MuIn è congegnato in modo da essere un piccolo sistema operativo multitasking real time, fa tante cose simultaneamente, e questo ha un prezzo come risorse e tempi di risposta.
La MuIn è anche pensata per essere un sistema client, addirittura è possibile usarne diverse in una piccola lan tramite i moduli Xbee, quindi non può mai impegnare il bus di comunicazione se non viene interrogata.

codesink
04-16-2010, 02:52 PM
Non è un bug, è un "trucco" utile per il debug.
In questo caso la if non fa nessun confronto, risulta sempre vera, è come scrivere if(true).
Dato che ci troviamo già nel parser non è realmente necessario verificare che il primo carattere del buffer sia una '@', carattere usato per il sync, perchè questa verifica avviene già all'interno della ISR.



scusa ma non ho mica capito :) ma allora a che serve? non che sia importante, il sw funziona benissimo cosi' com'e' ma giusto per capire il rationale che c'e' dietro


Tra & e && c'è la piccola differenza che con & se la prima espressione del confronto è falsa non vengono valutate le seguenti AND perchè il risultato è sempre falso.


quello che descrivi (short-circuit evaluation) e' quello che succederebbe con l'and booleano (&&); con l'and bitwise invece (&) vengono sempre eseguite entrambe:

int main(int argc, char **argv)
{
int a = 0, b = 0;
if(0 ==1 & ++a)
;
if(0 == 1 && ++b)
;
printf("a %d b %d\n", a, b);
return 0;
}

output: "a 1 b 0"


Il reset si trova anche sul primo pin del connettore ICSP, è quello col pad quadrato.


ah perfetto! grazie.


Il software della MuIn è congegnato in modo da essere un piccolo sistema operativo multitasking real time, fa tante cose simultaneamente, e questo ha un prezzo come risorse e tempi di risposta.
La MuIn è anche pensata per essere un sistema client, addirittura è possibile usarne diverse in una piccola lan tramite i moduli Xbee, quindi non può mai impegnare il bus di comunicazione se non viene interrogata.

giusto, non avevo pensato che piu' muin possono essere sullo stesso bus (anche se non e' il mio caso).

grazie per le risposte,
stefano