ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1425400
Связанные сообщения
FifoСи
Не нашёл пост, к котормоу уместно было бы приложить. Хоят должны бы быть.2022-09-29
Общие книги по Си читать + datasheet и manual по какой-нибудь devboard на целевой платформе. 1) Из книг про си под микро знаю пр...2021-10-05
Я на нечто подобное нарывался. Теперь вся отладка складывается в FIFO, только потом ее обрабатываю.2017-11-24
Эмбеддеры плохо знают Си :> -->2010-01-13
LightElf (11.04.2024 20:11, просмотров: 3836)
Я наверно тормоз и все давно так делают, но... 

Понадобилось тут сделать в одной программе несколько кольцевых буферов разной глубины, и "шоб красиво". И удумал я такую фигню:

<...где-то в заголовке...>
typedef struct fifo_s
{
const uint16_t size;
uint16_t ri;
uint16_t wi;
uint8_t buf[];
} fifo_t;
#define DECLARE_FIFO(name, size) fifo_t (name) = { (size), 0, 0, { [(size)-1] = 0 } }

ну и функции put/get/count/space к ней по вкусу.

<...где-то в коде...>
DECLARE_FIFO(uart_tx, 32);
DECLARE_FIFO(uart_rx, 128);

Получаются два fifo разного размера, но при этом у них одинаковый тип (fifo_t) и с ними будут работать одни и те же функции.

Не надо делать мне как лучше, оставьте мне как хорошо