|
|
  |
Работа с переменными в прерывании и основном теле, жутко неудобно выходит |
|
|
|
Oct 10 2015, 11:39
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Alexashka @ Oct 10 2015, 14:19)  Это не будет работать. Если один источник пишет быстрее, чем другой читает, то рано или поздно (сколько бы у вас ни было буферов) произойдет переполнение буфера. Скорости обоих процессов должны быть в среднем одинаковы. Так вы порциями (размером с целый буфер) выкидывайте с PC, по команде от вашего устройства. Как только один буфер использовали, переходите на другой, и давайте команду PC передавать данных на целый буфер (в который только что освободился). И не надо ломать голову, когда притормаживать, когда "газовать". И сравнивать указатели, кто кого догоняет, не придется. Просто проходите по буферу от начала до конца. Один указатель записи, бежит по одному буферу, другой указатель чтения, бежит по другому. Красиво? Указатель записи дойдет до конца раньше и притихнет (в это время его можно на начало другого буфера переключить, но писать пока нечего). Когда указатель чтения дойдет до конца, переключаете его на другой буфер, и даете команду компьютеру выдать новую порцию.
|
|
|
|
|
Oct 10 2015, 12:09
|

Практикующий маг
     
Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576

|
Цитата(ViKo @ Oct 10 2015, 15:39)  Красиво? Да, качели из двух буферов тоже вариант. Но переделывать сильно много надо, теперь уже не буду, возможно в следующий раз так и сделаю. Цитата(Tanya @ Oct 10 2015, 15:47)  Вот Вы уже (и другие...) потратили на это обсуждение столько времени, что его цена многократно перекрывает разницу в цене между монстром и достаточным контроллером. Если бы Вы планировали миллионную серию, это имело бы смысл. А так - нет. Таня, Вы меня удивляете!  Какая цена, о чем Вы говорите? Деньги не имеют ровным счетом никакого значения. Я не планирую ничего выпускать, хобби -это для удовольствия, тут дело в самом процессе. Хотя конечно согласен, результат тоже хочется получить. И освоить очередной камень. Но я консерватор  и больше люблю то, к чему привык. Так что извиняйте, я буду делать на том, что у меня сейчас. Как говорят рыбаки -время за рыбалкой (и я бы сказал - за паяльником) в счет жизни не входит  Жаль если Вы этого не понимаете.
|
|
|
|
|
Oct 10 2015, 15:31
|

Практикующий маг
     
Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576

|
Цитата(Tanya @ Oct 10 2015, 16:19)  Понимаю, что Вам не результат нужен, а процесс борьбы. Таня, общение с профессионалами это всегда борьба полезно, я много для себя почерпнул. Наверное все варианты решения уже озвучены (и самый яркий из них -поменять контроллер  ). Лично мне больше нравится простой и надежный как автомат Калашникова вариант с двумя буферами предложенный Viko. Думаю вопрос можно считать решенным. Еще раз всем спасибо за обсуждение!
|
|
|
|
|
Oct 11 2015, 21:01
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (Alexashka @ Oct 11 2015, 23:56)  Вы про "разделить большой буфер на N маленьких"? А зачем, когда двух буферов вполне достаточно?! Если нужен большой буфер, то половинки могут быть слишком большими - типа сутки заполнять придется  до начала разгрузки. QUOTE P.S. А что плохого в этом варианте - он слишком простой? Ничуть не проще и не сложнее. Если буферов стало несколько, то уже без разницы два, четыре,...2048...
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 12 2015, 06:38
|

Практикующий маг
     
Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576

|
Цитата(zltigo @ Oct 12 2015, 01:01)  Если нужен большой буфер, то половинки могут быть слишком большими - типа сутки заполнять придется  до начала разгрузки. Ничуть не проще и не сложнее. Если буферов стало несколько, то уже без разницы два, четыре,...2048... Тут есть еще одна нехорошесть, о которой я не подумал - один буфер прочитан на 94%, а второй заполнен на 99% и в это время винда на несколько мс уходит в себя - получаем прерывание чтения: второй буфер еще не готов к чтению, а первый уже прочитан. Т.е когда скорости чтения-записи примерно одинаковы на краях буферов получается очень маленький запас по чтению. Насчет проще сомневаюсь - это опять возврат к кольцевому буферу с его непременными атрибутами -проверка количества заполненных буферов, управление потоком записи и пр.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|