fifo_objet
Ceci est une ancienne révision du document !
FIFOs et Programmation Orientée Objet
Récupérer le sujet: http://homepages.laas.fr/bvandepo/files/iut/td_fifo/TD1_com_2020.pdf
Programme à base de variables globales
- main.cpp
#include <stdio.h> #include <iostream> using namespace std; #include <QCoreApplication> //initialisation faite directement #define FIFO_SIZE 3 unsigned int fifo_size = FIFO_SIZE ; unsigned int write_index = 0 ; unsigned int read_index = 0 ; unsigned int nb_available = 0 ; char data[FIFO_SIZE] ; ////////////////////////////////////////////////// //// /// \brief write_char_fifo /// \param token : jeton a écrire dans la FIFO /// \return 1 si valeur écrite dans la FIFO, 0 sinon /// char write_char_fifo(const char token){ if(nb_available >= fifo_size) return 0 ; //FIFO PLEINE data[write_index] = token ; write_index++; if( write_index >= fifo_size) write_index = 0 ; nb_available++; return 1; //OK } ////////////////////////////////////////////////// /// /// \brief read_char_fifo /// \param ptr_token : pointeur vers la zone mémoire dans laquelle ranger le jeton lu depuis la FIFO /// \return 1 si valeur lue dans la FIFO, 0 sinon /// char read_char_fifo( char * ptr_token){ if( nb_available == 0) return 0; //FIFO VIDE *ptr_token=data[read_index]; read_index ++; if( read_index >= fifo_size) read_index = 0 ; nb_available--; return 1; //OK } ////////////////////////////////////////////////// int main(int argc, char *argv[]) { printf("salut les APP\r\n"); cout << "Hello World!" << endl; /*write_char_fifo(5); write_char_fifo(1); write_char_fifo(7);*/ for (int i=0;i<10;i++) if (write_char_fifo(i)==0) cout << "fifo pleine "<< endl; for (int i=0;i<10;i++){ //rien n'empêche un utilisateur d'écrire //nb_available=5; //grosse bétise! char c; if (read_char_fifo(&c)!=0) cout << "donnée lue dans la fifo: " << +c << endl; else cout << "fifo vide "<< endl; } printf("fin\r\n"); }
Programme à base de structures
- main2.cpp
#include <stdio.h> #include <iostream> using namespace std; #include <QCoreApplication> //initialisation faite directement struct charFifo{ char * data ; unsigned int fifo_size ; unsigned int write_index ; unsigned int read_index ; unsigned int nb_available ; }; #define FIFO_SIZE1 3 char FifoBuffer[FIFO_SIZE1]; struct charFifo myFifo; // la variable FIFO à utiliser #define FIFO_SIZE2 4 char FifoBuffer2[FIFO_SIZE2]; struct charFifo myFifo2; //////////////////////////////////////// //// /// \brief init_char_fifo /// \param pf /// \param buf /// \param f_size /// void init_char_fifo(struct charFifo * ptr_fif, char * buf, unsigned int f_size){ //(*ptr_fif).fifo_size=f_size; ptr_fif->fifo_size=f_size; ptr_fif->nb_available=0; ptr_fif->write_index=0; ptr_fif->read_index=0; ptr_fif->data=buf; } ////////////////////////////////////////////////// //// /// \brief write_char_fifo /// \ptr_fif : pointeur vers la fifo dans laquelle écrire /// \param token : jeton a écrire dans la FIFO /// \return 1 si valeur écrite dans la FIFO, 0 sinon /// char write_char_fifo(struct charFifo * ptr_fif, const char token){ if(ptr_fif->nb_available >= ptr_fif->fifo_size) return 0 ; //FIFO PLEINE ptr_fif->data[ptr_fif->write_index] = token ; (ptr_fif->write_index)++; if( ptr_fif->write_index >= ptr_fif->fifo_size) ptr_fif->write_index = 0 ; ptr_fif->nb_available++; return 1; //OK } ////////////////////////////////////////////////// /// /// \brief read_char_fifo /// \ptr_fif : pointeur vers la fifo dans laquelle écrire /// \param ptr_token : pointeur vers la zone mémoire dans laquelle ranger le jeton lu depuis la FIFO /// \return 1 si valeur lue dans la FIFO, 0 sinon /// char read_char_fifo(struct charFifo * ptr_fif, char * ptr_token){ if( ptr_fif->nb_available == 0) return 0; //FIFO VIDE *ptr_token=ptr_fif->data[ptr_fif->read_index]; (ptr_fif->read_index )++; if( ptr_fif->read_index >= ptr_fif->fifo_size) ptr_fif->read_index = 0 ; ptr_fif->nb_available--; return 1; //OK } ////////////////////////////////////////////////// int main(int argc, char *argv[]) { printf("salut les APP\r\n"); char lu; init_char_fifo(&myFifo, FifoBuffer, FIFO_SIZE1); read_char_fifo(&myFifo, &lu) ; write_char_fifo(&myFifo, 5) ; write_char_fifo(&myFifo, 8) ; read_char_fifo(&myFifo, &lu) ; write_char_fifo(&myFifo, 12) ; write_char_fifo(&myFifo, 1) ; write_char_fifo(&myFifo, 7) ; read_char_fifo(&myFifo, &lu) ; read_char_fifo(&myFifo, &lu) ; read_char_fifo(&myFifo, &lu) ; read_char_fifo(&myFifo, &lu) ; }
Solution Question 2.5 du TD:
fifo_objet.1585237085.txt.gz · Dernière modification : 2020/03/26 16:38 de bvandepo