uint32_t fifo_pop(fifo_t* p_fifo, void* p_elem) { uint32_t was_masked; _DISABLE_IRQS(was_masked); if (FIFO_IS_EMPTY(p_fifo)) { _ENABLE_IRQS(was_masked); return NRF_ERROR_NULL; } if (p_elem != NULL) { void* p_src = FIFO_ELEM_AT(p_fifo, p_fifo->tail & (p_fifo->array_len - 1)); if (p_fifo->memcpy_fptr) { p_fifo->memcpy_fptr(p_elem, p_src); } else { memcpy(p_elem, p_src, p_fifo->elem_size); } } ++p_fifo->tail; _ENABLE_IRQS(was_masked); return NRF_SUCCESS; }
PR_END_EXTERN_C /*********************** * Р Е А Л И З А Ц И Я * ~~~~~~~~~~~~~~~~~~~ ************************/ uint8_t CConsole::GetChar() { uint8_t ret = 0; __disable_interrupt(); if ( !FIFO_IS_EMPTY( uart_rx_fifo ) ) { // Если в буфере есть данные, то извлекаем их. ret = FIFO_FRONT( uart_rx_fifo ); FIFO_POP( uart_rx_fifo ); } __enable_interrupt(); return ret; }
bool fifo_is_empty(fifo_t* p_fifo) { return FIFO_IS_EMPTY(p_fifo); }