Files

62 lines
1.6 KiB
C
Raw Permalink Normal View History

2026-06-12 02:55:04 -07:00
// FIFO1.c
// Runs on any microcontroller
// Provide functions that implement the Software FiFo Buffer
// Last Modified: 10/29/2023
// Student names: change this to your names or look very silly
// Last modification date: change this to the last modification date or look very silly
#include <stdint.h>
// Declare state variables for FiFo
// size, buffer, put and get indexes
#define FIFO1_SIZE 16 // usable size is 15
int32_t static PutI; // Index to put new
int32_t static GetI; // Index of oldest
int32_t static Fifo1[FIFO1_SIZE];
// *********** Fifo1_Init**********
// Initializes a software FIFO1 of a
// fixed size and sets up indexes for
// put and get operations
void Fifo1_Init(){
//Complete this
PutI = GetI = 0;
}
// *********** Fifo1_Put**********
// Adds an element to the FIFO1
// Input: data is character to be inserted
// Output: 1 for success, data properly saved
// 0 for failure, FIFO1 is full
uint32_t Fifo1_Put(char data){
//Complete this routine
if(((PutI+1)&(FIFO1_SIZE-1)) == GetI){
return 0;
}
Fifo1[PutI] = data;
PutI = (PutI+1)&(FIFO1_SIZE-1);
return 1;
// return 0; // replace this line with your solution
}
// *********** Fifo1_Get**********
// Gets an element from the FIFO1
// Input: none
// Output: If the FIFO1 is empty return 0
// If the FIFO1 has data, remove it, and return it
char Fifo1_Get(void){
//Complete this routine
char data;
if(GetI == PutI){
return 0;
}
data = Fifo1[GetI];
GetI = (GetI+1)&(FIFO1_SIZE-1);
return data;
// return 0; // replace this line with your solution
}