Esempio n. 1
0
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;
}
Esempio n. 2
0
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;

}
Esempio n. 3
0
bool fifo_is_empty(fifo_t* p_fifo)
{
    return FIFO_IS_EMPTY(p_fifo);
}