avr-fw-modules/core/src/rb2_pool.c

51 lines
805 B
C
Executable File

#include <rb2/regbus.h>
LIST(rb2_pool);
rb2_telegram_buffer_t* rb2_pool_pop_irq (void){
ATOMIC
rb2_telegram_buffer_t
*tele;
tele = list_first_entry( &rb2_pool, rb2_telegram_buffer_t, list );
if (tele){
list_remove( &(tele->list) );
memset( tele, 0x00, sizeof(rb2_telegram_buffer_t) );
};
return tele;
}
rb2_telegram_buffer_t* rb2_pool_pop (void){
ATOMIC
rb2_telegram_buffer_t
*tele;
tele = rb2_pool_pop_irq();
if (!tele){
tele = malloc( sizeof(rb2_telegram_buffer_t) );
if (tele){
memset( tele, 0x00, sizeof(rb2_telegram_buffer_t) );
};
};
return tele;
};
void rb2_pool_push (rb2_telegram_buffer_t *tele){
ATOMIC
if (tele){
if (list_count( &rb2_pool ) < 12){
list_append( &(tele->list), &rb2_pool );
} else {
free( tele );
};
};
};