-
- Записать в буфер можно и полный объем, нельзя узнать сколько места
осталось. Ситуации буфер полностью пуст и полностью полон
равнозначные. - IBAH(24.10.2024 19:46 - 19:51)
- Зависит от разрядности индексов head/tail. Сделайте их разрядность побольше и сравнивайте целиком. Например: глубина fifo 64 элемента, индексы uchar, tail == 64, head == 128 - буфер полон, tail == 64 и head == 64 - буфер пуст. - LightElf(25.10.2024 14:50)
- Не надо считать заполненность. Храните заполнение в отдельной переменной. - mr-x(24.10.2024 20:10)
- Можно. Если считать не по разности указателей, а отдельно. - Nikolay_Po(24.10.2024 19:51)
- То есть положили в буфер +1, списали -1. От какого момента считать?
от сотворения мира? Где та константа с которой все начинается? - IBAH(24.10.2024 19:57)
- Вестимо - от инициализации буфера. - reZident(24.10.2024 19:58)
- а если было переполнение? Так сказать, Всемирный Потоп - IBAH(24.10.2024 20:01)
- Дык нельзя впихнуть невпихуемое. Поясните. - reZident(24.10.2024 20:02)
- Например для размера буфера кратного степени 2
Kolvo=RazmerBufferTX-((TxHead-TxTail)&(RazmerBufferTX-1));
равно RazmerBufferTX как при полностью пустом буфере так и
полностью полном. Эти две ситуации равнозначные их допускать
нельзя. То есть в буфере всегда должно быть не больше
(RazmerBufferTX-1) - IBAH(24.10.2024 20:12)
- Опять не понял. Для кольцевого буфера указатель (индекс) и кол-во элементов в буфере должны быть разными переменными. Правда, тут иногда встают грабли с атомарностью
одновременных операций чтения и записи, но то такэ - решаемо. - reZident(24.10.2024 21:14)
- Чем решать такие проблемы, проще считать что в буфере на один байт
меньше. - IBAH(24.10.2024 22:12)
- Я для себя так же поступаю, один элемент жертвую на удобство использования - AlexBi(24.10.2024 22:26)
- Чем решать такие проблемы, проще считать что в буфере на один байт
меньше. - IBAH(24.10.2024 22:12)
- Опять не понял. Для кольцевого буфера указатель (индекс) и кол-во элементов в буфере должны быть разными переменными. Правда, тут иногда встают грабли с атомарностью
одновременных операций чтения и записи, но то такэ - решаемо. - reZident(24.10.2024 21:14)
- Например для размера буфера кратного степени 2
Kolvo=RazmerBufferTX-((TxHead-TxTail)&(RazmerBufferTX-1));
равно RazmerBufferTX как при полностью пустом буфере так и
полностью полном. Эти две ситуации равнозначные их допускать
нельзя. То есть в буфере всегда должно быть не больше
(RazmerBufferTX-1) - IBAH(24.10.2024 20:12)
- Дык нельзя впихнуть невпихуемое. Поясните. - reZident(24.10.2024 20:02)
- а если было переполнение? Так сказать, Всемирный Потоп - IBAH(24.10.2024 20:01)
- Вестимо - от инициализации буфера. - reZident(24.10.2024 19:58)
- То есть положили в буфер +1, списали -1. От какого момента считать?
от сотворения мира? Где та константа с которой все начинается? - IBAH(24.10.2024 19:57)
- Записать в буфер можно и полный объем, нельзя узнать сколько места
осталось. Ситуации буфер полностью пуст и полностью полон
равнозначные. - IBAH(24.10.2024 19:46 - 19:51)