Hola nocturno!, despues de batallar con las estructuras y la sintaxis que emplean en el C30, encontre la forma de pasar una estructura como parametro de una funcion, en este caso tenemos que pasar la estructura como variable y no como valor, ademas de cumplir con ciertas sintaxis. Una mayor explicacion la pueden encontrar en esta
pagina. Por Cierto el C30 cumple bien con el estandar del C, para este aspecto.

Un codigo como ejemplo.
Declaracion de la estructura y las variables relacionadas
struct datos_carnet
{
int numero;
};
struct datos_carnet dni1, dni2;Declaracion de la funcion
void escribir_dni(struct datos_carnet* dni,int dato1);
Funcion
void escribir_dni(struct datos_carnet* dni,int dato1)
{
dni->numero=dato1;
}
Uso de la funcion
escribir_dni(&dni1,50);
Con lo anterior mencionado, mi codigo para el registro FIFO quedaria asi:
struct reg_fifo
{
int ptr_e;
int ptr_l;
unsigned char reg[50];
};
struct reg_fifo fifo1, fifo2, fifo3;
void push(struct reg_fifo* fifo, char dato);
char pull(struct reg_fifo* fifo);
void push(struct reg_fifo* fifo, char dato)
{
fifo->reg[fifo->ptr_e]=dato;
if(fifo->ptr_e<fifo->ptr_l)
{
if(fifo->ptr_l<=99)
{
fifo->ptr_l++;
}
else
{
fifo->ptr_l=0;
}
}
if(fifo->ptr_e<=99)
{
fifo->ptr_e++;
}
else
{
fifo->ptr_e=0;
}
}
char pull(struct reg_fifo* fifo)
{
char temp;
if((fifo->ptr_l==0)&&(fifo->ptr_e==0))
{
temp= 0x1F;
}
if(fifo->ptr_l==fifo->ptr_e)
{
fifo->ptr_l=0;
fifo->ptr_e=0;
temp=0x1F;
}
//if((fifo->ptr_l<fifo->ptr_e)
else
{
temp=fifo->reg[fifo->ptr_l];
if(fifo->ptr_l!=99)
{
fifo->ptr_l++;
}
else
{
fifo->ptr_l=0;
}
}
return temp;
};
Gracias por tu ayuda nocturno, espero haber contribuido al foro. Saludos.

PD: ¿como coloco la enumeracion y los colores a los segmentos de codigo?.