Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Protocollo

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[51] Re: Protocollo

Messaggioda Foto Utentefairyvilje » 19 giu 2014, 2:15

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? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[52] Re: Protocollo

Messaggioda Foto UtenteWALTERmwp » 19 giu 2014, 2:17

daniele1996 ha scritto:hai ragione, ho fatto confusione con i termini... la pila come si chiama?
... Volta.

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.

daniele1996 ha scritto:un'operazione atomica è un'oprazione
... esplosiva ... che non conduce da nessuna parte.

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.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8990
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[53] Re: Protocollo

Messaggioda Foto Utentefairyvilje » 19 giu 2014, 2:27

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 :mrgreen: .
"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? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[54] Re: Protocollo

Messaggioda Foto Utentedaniele1996 » 19 giu 2014, 2:30

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...
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[55] Re: Protocollo

Messaggioda Foto Utentedaniele1996 » 19 giu 2014, 2:34

ok rifaccio tutto con la lista...
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[56] Re: Protocollo

Messaggioda Foto Utentedaniele1996 » 19 giu 2014, 2:39

perché dovrei usare una doppia lista?
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[57] Re: Protocollo

Messaggioda Foto Utentefairyvilje » 19 giu 2014, 2:42

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? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

1
voti

[58] Re: Protocollo

Messaggioda Foto UtenteWALTERmwp » 19 giu 2014, 2:51

Accidentaccio ...
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...
... 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.
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.

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.
... 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.
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.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8990
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[59] Re: Protocollo

Messaggioda Foto Utentefairyvilje » 19 giu 2014, 2:56

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? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[60] Re: Protocollo

Messaggioda Foto Utentedaniele1996 » 19 giu 2014, 3:05

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à :/
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti