51 lines
805 B
C
Executable File
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 );
|
|
};
|
|
};
|
|
|
|
};
|