-
- вотъ: SciFi(263 знак., 24.10.2024 21:25)
- Ааа... Дошло. head и tail, меняются от 0 до 0xFFFFFFFF. - IBAH(25.10.2024 13:51)
- Как будут выглядеть индексы у полностью заполненного и полностью
пустого? AlexBi(68 знак., 24.10.2024 22:24)
- нет, не нужно, и даже вредно, ибо отсекает случай, когда head -
tail == FIFOSZ - SciFi(24.10.2024 22:28)
- Согласен, не нужно, и вариант рабочий - AlexBi(24.10.2024 22:48)
- может я чего то недопонимаю в арифметике? head=0 tail=63? сколько
байт в буфере? - IBAH(24.10.2024 23:07)
- В буфере 63. Когда буфер будет полным станет head=0 tail=64. - AlexBi(25.10.2024 14:46)
- может я чего то недопонимаю в арифметике? head=0 tail=63? сколько
байт в буфере? - IBAH(24.10.2024 23:07)
- Согласен, не нужно, и вариант рабочий - AlexBi(24.10.2024 22:48)
- нет, не нужно, и даже вредно, ибо отсекает случай, когда head -
tail == FIFOSZ - SciFi(24.10.2024 22:28)
- а если таил больше хеад? размер буфера будет отрицательный? Уж
лучше нулевой как говорил Клен - IBAH(24.10.2024 22:10)
- Если тейл больше хед, значит, кто-то где-то что-то прошляпил, и этот кто-то заслужил все последствия своего неподобающего поведения. SciFi(112 знак., 24.10.2024 22:32)
- Это зависит от алгоритма. ASDFS(165 знак., 24.10.2024 19:37)
- Я недостаточно точно написал, имеется ввиду буфер "первый вошел,
первый вышел". - IBAH(24.10.2024 19:50)
- И я о том же. - ASDFS(24.10.2024 20:00)
- Я недостаточно точно написал, имеется ввиду буфер "первый вошел,
первый вышел". - IBAH(24.10.2024 19:50)
- Давай проверим. Задаем размер кольцевого буфера 1. Значит по
алгоритму кб я должен всегда писать по смещению 0. По твоей версии
помещается 0 элементов. А по моей один все таки помещается. Где я
не прав? Может в кольцевом буферем не существует свободного места
вообще? - klen(24.10.2024 19:34)
- это будет элемент Шредингера. он считан до фактического изменения или после? - danuna(24.10.2024 20:16)
- Формулу для свободного места? - IBAH(24.10.2024 19:44)
- Возможно, вы не обрабатываете по-разному ситуации, когда указатель
чтения совпал с указателем записи - это либо буфер пуст (если
указатель чтения наехал на указатель записи) либо, когда указатель
записи наехал на указатель чтения - буфер полон. Nikolay_Po(184 знак., 24.10.2024 19:32)
- Записать в буфер можно и полный объем, нельзя узнать сколько места
осталось. Ситуации буфер полностью пуст и полностью полон
равнозначные. - 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)
- вотъ: SciFi(263 знак., 24.10.2024 21:25)