Protocollo
Moderatore:
Paolino
0
voti
[51] Re: Protocollo
Sai cos'è una lista doppia? Parti implementando quella.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
-

fairyvilje
15,0k 4 9 12 - G.Master EY

- Messaggi: 3047
- Iscritto il: 24 gen 2012, 19:23
0
voti
[52] Re: Protocollo
... Volta.daniele1996 ha scritto:hai ragione, ho fatto confusione con i termini... la pila come si chiama?
Ho la sensazione di una "deriva" ... allora, è comprensibile che se si prendono in considerazione (come sarebbe corretto fare) tutte le implicazioni inerenti la gestione di una comunicazione su una rete (simile a quella in causa), per quanto semplice questa possa essere, la discussione acquista un altro "spessore".
Anche per questo mi sono permesso di suggerire un approccio il più semplice possibile (che non significa banale).
@daniele1996, se mi riporti un bit di "stop" o di parità in fondo al pacchetto (a meno che interpreti male) significa che c'è qualche aspetto da chiarire a livello di base: niente di che, lo si vede insieme (ammesso ch'io possa supportarti) e poi ci viene incontro anche @fairyvilje.
Il "bit di stop", se lo prevedi, si trova in fondo ad ogni byte; significa che dopo gli 8 bits che compongono il byte c'è un altro bit e, se c'è anche il bit di "parità", a quel punto i bits che si aggiungono agli 8 sono 2.
Quindi 10 bits (si trasmette, come informazione, un byte ma si trasmettono 10 bits).
Questo è solo un dettaglio ma quel "bit parità (uint8_t)" in realtà dovrebbe essere il byte di checksum (come ha suggerito @fairyvilje).
Lascerei perdere, per il momento, approfondimenti come quelli che state tentando e rimarrei su qualcosa di più "concreto".
@daniele1996, la "dinamica" della comunicazione sulla rete la semplificherei in questo modo (presupposto di avere un Master e due soli Salves):
1- non c'è trasmissione in rete, da parte di nessuno, e tutti gli Slaves sono in "ascolto".
2- il Master trasmette il primo messaggio in rete (relativo allo Slave 0).
3- tutti gli Slaves "vedono", "leggono" e "interpretano" il contenuto del messaggio.
4- il Master attende la risposta dallo Slave 0.
5- lo Slave 0 "ci ha ragionato su" ed invia la risposta, invia cioè un messaggio in rete (impegnandola).
6- lo Slave 1 ", anche lui "ci ha ragionato su", ma non invia alcuna risposta, perché il messaggio non era diretto a lui).
7- Il Master "vede" che c'è trasmissione in rete e raccoglie il messaggio (che ha inviato) lo Slave 0; anche lo Slave 1 vede il messaggio ma, dato il suo contenuto, si comporta come al punto 6.
8- il Master nel frattempo interpreta il contenuto del messaggio, e "capisce" che lo Slave 0 gli ha risposto.
9- si torna al punto 1 per poi passare al punto 2 ma questa volta il Master "se la prende" con lo Slave 1.
... e così via.
Questa è ovviamente una semplificazione che esclude a priori, proprio per dare la possibilità di iniziare ad impostare una base di lavoro, tutta una serie di implicazioni.
Una volta completati questi passaggi (scritto il codice), se si vuole lo si prova ed in base ai riscontri si valuta se passare al livello successivo (cosa vuol dire lo si può scoprire più avanti).
E' utile impiegare un interrupt in ausilio ma, non tanto per il fatto che ci segnali la presenza di trasmissione sulla rete, ma che il buffer della USART si è riempito, per esempio, con un byte.
Per questo il nodo della rete (che sia Master o Slave) ha una parte di programma che si preoccupa di recuperare questo byte e di "metterlo" in un "buffer" nel quale andrebbe ad "accodare" gli altri che ci si dovrebbe aspettare per ritenere di avere completato la ricezione del messaggio.
@daniele1996, per quello che ho scritto si comprende che lo "sviluppo" del codice può avvenire a diversi livelli così come le risorse del microcontrollore possono essere impiegate in vari modi.
... esplosiva ... che non conduce da nessuna parte.daniele1996 ha scritto:un'operazione atomica è un'oprazione
Quindi:
A) messaggio del Master
-- 1 byte (identifica inizio messaggio)
-- 1 byte (indirizzo Slave)
-- 1 byte (istruzione per lo Slave)
-- 1 byte (identifica fine messaggio)
B) messaggio dello Slave in risposta
-- 1 byte (identifica inizio messaggio)
-- 1 byte (indirizzo Slave che risponde)
-- 1 byte (informazione per il Master)
-- 1 byte (identifica fine messaggio)
... ho già esagerato inserendo il byte di inizio e fine messaggio.
In questo modo viaggiano 4 bytes.
Può essere un inizio ?
Pensi di poterlo impostare ?
Torno a ripetere (poi non lo scrivo più) che devi fare i "conti" anche con l'interfaccia hardware per la rete.
Dovesse essere troppo banale, i margini per rendere la cosa più sofisticata ... ci sono.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8990
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
[53] Re: Protocollo
WALTERmwp ha scritto:Ho la sensazione di una "deriva" ...
Il fatto è che quando si progetta un sistema per trasmettere informazione c'è certamente un quacosa di basso livello legato all'architettura. Ma c'è anche l'infrastruttura software sopra che non può essere ignorata o fatta come capita capita. Boh non so cosa dire, ho provato a dare un verso al topic ma non sembra che sia molto percorribile la cosa. Me ne torno nella sezione di informatica mi mimetizzo meglio
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
-

fairyvilje
15,0k 4 9 12 - G.Master EY

- Messaggi: 3047
- Iscritto il: 24 gen 2012, 19:23
0
voti
[54] Re: Protocollo
6- lo Slave 1 ", anche lui "ci ha ragionato su", ma non invia alcuna risposta, perché il messaggio non era diretto a lui).
perché sprecare risorse per elaborare la richiesta e poi non inviarla? basta semplicemente controllare l'indirizzo al quale è riferito, così si risparmiano cicli di cpu... molto probabilmente per fare la comunicazione userò le lib arduino perché ancora non ho le conoscenze per usare le uart senza niente, e quelle lib accettano valori con almeno 8bit quindi un carattere in ogni caso aumentando la lunghezza del pacchetto influirebbe solo sulla velocità di ricezione/trasmissione...
-

daniele1996
610 3 8 11 - Sostenitore

- Messaggi: 1554
- Iscritto il: 29 ago 2011, 11:29
0
voti
[57] Re: Protocollo
Si può usare anche una lista singola se preferisci. Si risparmia anche memoria rispetto alla doppia.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
-

fairyvilje
15,0k 4 9 12 - G.Master EY

- Messaggi: 3047
- Iscritto il: 24 gen 2012, 19:23
1
voti
[58] Re: Protocollo
Accidentaccio ...
Così quando "ci ha ragionato su" (ergo: ah, non sta parlando con me perché l'indirizzo è di un altro) è in grado di decidere quale deve/può essere la sua azione successiva: in tal caso ... non fare nulla ... ma per "deciderlo" ha dovuto fare lo "sforzo" di "leggere" quello che è stato "scritto" nel messaggio.
Non voglio che il mio modo d'esprimermi possa apparire, neanche minimamente come una critica; se così è stato non era nelle mie intenzioni.
Saluti (e ... buona notte)
... non sprechi "nulla", non c'è uno spreco perché, non disponendo ancora (almeno io) di microcontrollori con capacità predittive, ogni Slave "deve" leggere il messaggio, ogni messaggio, che viaggia sulla rete.daniele1996 ha scritto:perché sprecare risorse per elaborare la richiesta e poi non inviarla? basta semplicemente controllare l'indirizzo al quale è riferito, così si risparmiano cicli di cpu...
Così quando "ci ha ragionato su" (ergo: ah, non sta parlando con me perché l'indirizzo è di un altro) è in grado di decidere quale deve/può essere la sua azione successiva: in tal caso ... non fare nulla ... ma per "deciderlo" ha dovuto fare lo "sforzo" di "leggere" quello che è stato "scritto" nel messaggio.
... io penso, più semplicemente, che una questione non possa essere affrontata o non la si dovrebbe affrontare ignorando il fatto che gli argomenti in uso si sovrappongono ad altri, più semplici, ma fondanti e non ancora acquisiti.fairyvilje ha scritto:Boh non so cosa dire, ho provato a dare un verso al topic ma non sembra che sia molto percorribile la cosa.
Non voglio che il mio modo d'esprimermi possa apparire, neanche minimamente come una critica; se così è stato non era nelle mie intenzioni.
Saluti (e ... buona notte)
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8990
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
1
voti
[59] Re: Protocollo
WALTERmwp ha scritto:Non voglio che il mio modo d'esprimermi possa apparire, neanche minimamente come una critica; se così è stato non era nelle mie intenzioni.
Ma anche fosse mi starebbe bene e dovrei dartene atto. Condivido quanto hai detto sui prerequisiti :)
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
Qualcosa non ha funzionato...
Lo sapete che l'arroganza in informatica si misura in nanodijkstra?
-

fairyvilje
15,0k 4 9 12 - G.Master EY

- Messaggi: 3047
- Iscritto il: 24 gen 2012, 19:23
0
voti
[60] Re: Protocollo
- Codice: Seleziona tutto
struct Packet{
uint8_t target;
uint8_t bytes;
uint8_t checksum;
uint8_t *data;
};
struct Elemento {
struct Packet *pack;
struct Elemento *punt;
}
class Lista{
private:
struct Elemento *testa;
public:
void inserisci(Packet p);
Packet getHead();
};
Lista::inserisci(Packet *p){
Elemento *temp = *testa;
while((*temp)->punt != NULL){
*temp = (*temp)->punt;
}
(*temp)->pack = (*p);
}
Packet Lista::getHead(){
Packet *p = (*testa);
(*testa)= (*testa)->punt;
return p;
}
spero di non aver scritto obbrobrietà :/
-

daniele1996
610 3 8 11 - Sostenitore

- Messaggi: 1554
- Iscritto il: 29 ago 2011, 11:29
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 8 ospiti

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)