ERIS CORE

◆ allocate()

audio_block_t * AudioStream::allocate ( void  )
staticprotectedinherited

Definition at line 92 of file AudioStream.cpp.

93 {
94  uint32_t n, index, avail;
95  uint32_t *p, *end;
96  audio_block_t *block;
97  uint32_t used;
98 
100  end = p + NUM_MASKS;
101  __disable_irq();
102  index = memory_pool_first_mask;
103  p += index;
104  while (1) {
105  if (p >= end) {
106  __enable_irq();
107  //Serial.println("alloc:null");
108  return NULL;
109  }
110  avail = *p;
111  if (avail) break;
112  index++;
113  p++;
114  }
115  n = __builtin_clz(avail);
116  avail &= ~(0x80000000 >> n);
117  *p = avail;
118  if (!avail) index++;
119  memory_pool_first_mask = index;
120  used = memory_used + 1;
121  memory_used = used;
122  __enable_irq();
123  index = p - memory_pool_available_mask;
124  block = memory_pool + ((index << 5) + (31 - n));
125  block->ref_count = 1;
126  if (used > memory_used_max) memory_used_max = used;
127  //Serial.print("alloc:");
128  //Serial.println((uint32_t)block, HEX);
129  return block;
130 }
const char PROGMEM p[][16]
Definition: Eris.h:247
static uint16_t memory_pool_first_mask
Definition: AudioStream.h:213
static uint16_t memory_used_max
Definition: AudioStream.h:182
static uint32_t memory_pool_available_mask[]
Definition: AudioStream.h:212
static uint16_t memory_used
Definition: AudioStream.h:181
static audio_block_t * memory_pool
Definition: AudioStream.h:211

References AudioStream::memory_pool, AudioStream::memory_pool_available_mask, AudioStream::memory_pool_first_mask, AudioStream::memory_used, AudioStream::memory_used_max, p, and audio_block_struct::ref_count.

Referenced by AudioStream::receiveWritable(), AudioSynthWaveformhd::update(), and AudioSynthWaveformModulated2k::update().

+ Here is the caller graph for this function: