CMP EMBEDDED.COM

Login | Register     Welcome Guest  
HOME DESIGN PRODUCTS COLUMNS E-LEARNING CONFERENCES CODE FORUMS/BLOGS NEWSLETTERS CONTACT FEATURES RSS RSS

Listing 1: Using a real-time FIFO
#define IN_FIFO_ID 1
#define OUT_FIFO_ID 2
#define IN_FIFO_LENGTH 0x100
#define OUT_FIFO_LENGTH 0x100
// RT FIFO invokes this function every time the user process writes 
// something into /dev/rtf1
int pd_do_aout(unsigned int fifo)
{
u32 ao_value;
while ((err = rtf_get(IN_FIFO_ID, &ao_value, sizeof(u32))) 
== sizeof(u32)) 
{
pd_aout_write(board, ao_value);
}
if (err != 0) return -EINVAL; else return 0;
}
void *pp_thread_ep(void *rate) // our periodic thread
{
u16 ain_data;
...
ret = pd_ain_read(board, &ain_data); // read value from analog in
// write to the output FIFO where user process can read it from /dev/rtf2
ret = rtf_put(OUT_FIFO_ID, &ain_data, sizeof(u16));
... process ret for return codes ...
}
init_module(void)
{ ...
// free up the resource, just in case
rtf_destroy(IN_FIFO_ID);
rtf_destroy(OUT_FIFO_ID); 
// create fifos we can talk via /dev/rtf1 and /dev/rtf2
rtf_create(IN_FIFO_ID, IN_FIFO_LENGTH); // rt task <- user process
rtf_create(OUT_FIFO_ID, OUT_FIFO_LENGTH); // rt task -> user process
rtf_create_handler(IN_FIFO_ID, &pd_do_aout);
...
}
cleanup_module(void)
{ ...
rtf_destroy(IN_FIFO_ID); // free up the resource, just in case
rtf_destroy(OUT_FIFO_ID); // free up the resource, just in case
...
}
Embedded.com Career Center
Looking for a new job?
SEARCH JOBS

Browse all jobs

SPONSOR
RECENT JOB POSTINGS





 :