|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
[Embedded C] Implementare una FIFO
Ciao tutti,
so già che faccio una domanda da informatica 1, ma è passato tanto tempo Dunque, sto facendo un programma in C su un microcontrollore (quindi evitiamo di inserire librerie esotiche Praticamente, la cosa funziona così: io ricevo una trasmissione da una seriale, la immagazzino in un buffer e la spedisco su un'altra seriale. Il fatto è che, mentre questo buffer si riempie, io dovrei già partire a vuotarlo e, mentre lo vuoto, può continuare ad essere riempito. Quindi io dovrei avere una funzione receive_UART1, per esempio, che mi prende i caratteri dalla seriale 1 e li carica dentro il buffer e una funzione transmit_UART2 che prende il primo carattere del buffer, lo spedisce, quindi lo elimina e sposta tutto il contenuto del buffer avanti di una posizione. O, alternativamente, entrambe le funzioni scrivono sul buffer in maniera circolare, ossia entrambe proseguono con l'indice del vettore finchè non arrivano alla fine e quindi ripartono dall'inizio; in questo caso devo inserire un carattere di controllo per fermare l'invio del contenuto del buffer sulla seconda seriale quando questo si è "vuotato", tra virgolette perchè vuoto non sarà. Questa seconda soluzione mi sembra un po' più complicata, onestamente... Fatto sta che non saprei nemmeno come implementare la prima Chiaramente il tutto deve essere fatto anche con poche istruzioni, non è che ho una cpu da 4ghz che gira Insomma, suggerimenti per favore! Spero di aver spiegato bene cosa devo fare, nel caso non sia chiaro chiedete...
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) Le mie foto su Panoramio - Google Earth |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
dai che lo sapete
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) Le mie foto su Panoramio - Google Earth |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
non puoi usare un interrupt su seriale? di che micro stiamo parlando?
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
Quote:
Ma il fatto è che non posso prendere il carattere e spedirlo immediatamente sia perchè debbo elaborare comunque le informazioni che ricevo, sia perchè voglio mandare pacchetti completi e quindi ho bisogno che prima sia immagazzinato tutto in un buffer. Diciamo che il carattere di fine pacchetto è il \n: quando il micro riceve quel carattere deve avviare la trasmissione del pacchetto che è immagazzinato, mettiamo, nei primi 20 spazi del vettore buffer. Mentre però sta inviando questi caratteri, gli arriva un altro pacchetto e dovrà accodarlo all'altro perchè sia spedito successivamente. Ecco quindi che la funzione di invio dovrà togliere dal buffer i caratteri già spediti, spostare in avanti gli altri e la funzione di ricezione dovrà accodare il nuovo pacchetto al buffer e non sovrascriverlo.
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) Le mie foto su Panoramio - Google Earth |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
io userei due buffer usati in alternanza
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
ecco, lì mi possono sorgere problemi di memoria.
E' comunque una strada che posso provare... Praticamente ricevo in un buffer, quando la trasmissione è finita metto il contenuto del buffer in quello di trasmissione -potrei avere dei problemi se, in questo momento, mi arrivasse un altro pacchetto però- e dall'altra parte trasmetto finchè è pieno. Però mi resta il problema che non so come fare lo shift del contenuto del buffer senza fare una funzione chilometrica per ogni ciclo...
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) Le mie foto su Panoramio - Google Earth |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:29.












ho concluso con: kvegeta, doctordb, Leland Gaunt.








