реклама на сайте
подробности

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Работа с переменными в прерывании и основном теле, жутко неудобно выходит
ViKo
сообщение Oct 10 2015, 11:39
Сообщение #46


Универсальный солдатик
******

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



Цитата(Alexashka @ Oct 10 2015, 14:19) *
Это не будет работать. Если один источник пишет быстрее, чем другой читает, то рано или поздно (сколько бы у вас ни было буферов) произойдет переполнение буфера. Скорости обоих процессов должны быть в среднем одинаковы.

Так вы порциями (размером с целый буфер) выкидывайте с PC, по команде от вашего устройства. Как только один буфер использовали, переходите на другой, и давайте команду PC передавать данных на целый буфер (в который только что освободился). И не надо ломать голову, когда притормаживать, когда "газовать".
И сравнивать указатели, кто кого догоняет, не придется. Просто проходите по буферу от начала до конца. Один указатель записи, бежит по одному буферу, другой указатель чтения, бежит по другому. Красиво? Указатель записи дойдет до конца раньше и притихнет (в это время его можно на начало другого буфера переключить, но писать пока нечего). Когда указатель чтения дойдет до конца, переключаете его на другой буфер, и даете команду компьютеру выдать новую порцию.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Oct 10 2015, 11:47
Сообщение #47


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Alexashka @ Oct 10 2015, 14:19) *
И потом эта работа -мое хобби, а мне 8-битники нравятся гораздо больше, чем 32разрядные монстры с DMA контроллерами, ускорителями памяти и прочим и прочим.
Имеющихся аппаратных возможностей контроллера более чем достаточно для этой задачи.

Вот Вы уже (и другие...) потратили на это обсуждение столько времени, что его цена многократно перекрывает разницу в цене между монстром и достаточным контроллером. Если бы Вы планировали миллионную серию, это имело бы смысл. А так - нет.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Oct 10 2015, 12:09
Сообщение #48


Практикующий маг
******

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



Цитата(ViKo @ Oct 10 2015, 15:39) *
Красиво?

Да, качели из двух буферов тоже вариант. Но переделывать сильно много надо, теперь уже не буду, возможно в следующий раз так и сделаю.

Цитата(Tanya @ Oct 10 2015, 15:47) *
Вот Вы уже (и другие...) потратили на это обсуждение столько времени, что его цена многократно перекрывает разницу в цене между монстром и достаточным контроллером. Если бы Вы планировали миллионную серию, это имело бы смысл. А так - нет.

Таня, Вы меня удивляете! sm.gif Какая цена, о чем Вы говорите? Деньги не имеют ровным счетом никакого значения. Я не планирую ничего выпускать, хобби -это для удовольствия, тут дело в самом процессе. Хотя конечно согласен, результат тоже хочется получить. И освоить очередной камень. Но я консерватор sm.gif и больше люблю то, к чему привык. Так что извиняйте, я буду делать на том, что у меня сейчас. Как говорят рыбаки -время за рыбалкой (и я бы сказал - за паяльником) в счет жизни не входит cool.gif Жаль если Вы этого не понимаете.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Oct 10 2015, 12:19
Сообщение #49


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Alexashka @ Oct 10 2015, 15:09) *
Жаль если Вы этого не понимаете.


Понимаю, что Вам не результат нужен, а процесс борьбы.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 10 2015, 13:57
Сообщение #50


Универсальный солдатик
******

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



Можно и одним буфером обойтись, если разбить его на 2 части. А дальше, как описал.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Oct 10 2015, 15:31
Сообщение #51


Практикующий маг
******

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



Цитата(Tanya @ Oct 10 2015, 16:19) *
Понимаю, что Вам не результат нужен, а процесс борьбы.

Таня, общение с профессионалами это всегда борьба полезно, я много для себя почерпнул. Наверное все варианты решения уже озвучены (и самый яркий из них -поменять контроллер biggrin.gif ). Лично мне больше нравится простой и надежный как автомат Калашникова вариант с двумя буферами предложенный Viko. Думаю вопрос можно считать решенным.
Еще раз всем спасибо за обсуждение!
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 10 2015, 18:06
Сообщение #52


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Alexashka @ Oct 10 2015, 18:31) *
Думаю вопрос можно считать решенным.

biggrin.gif а если вместо указателей применять unsigned char индексы? Они атомарные будут без накладных расходов.

Сообщение отредактировал _Pasha - Oct 10 2015, 18:06
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 10 2015, 18:56
Сообщение #53


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



тогда будет ограничение на размер буфера.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 10 2015, 19:04
Сообщение #54


Гуру
******

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



QUOTE (smalcom @ Oct 10 2015, 21:56) *
тогда будет ограничение на размер буфера.

Вам уже сразу написали - не надо оперировать буфером с байтовыми элементами. После долгого жевания Вам собствено "понравился" некий вырожденый вариант такого подхода - буфер из двух элементов размером в полбуфера каждый.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 10 2015, 20:09
Сообщение #55


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



а?
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Oct 11 2015, 20:56
Сообщение #56


Практикующий маг
******

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



Цитата(zltigo @ Oct 10 2015, 23:04) *
Вам уже сразу написали - не надо оперировать буфером с байтовыми элементами. После долгого жевания Вам собствено "понравился" некий вырожденый вариант такого подхода - буфер из двух элементов размером в полбуфера каждый.

Вы про "разделить большой буфер на N маленьких"?
А зачем, когда двух буферов вполне достаточно?!
P.S. А что плохого в этом варианте - он слишком простой?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2015, 21:01
Сообщение #57


Гуру
******

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



QUOTE (Alexashka @ Oct 11 2015, 23:56) *
Вы про "разделить большой буфер на N маленьких"?
А зачем, когда двух буферов вполне достаточно?!

Если нужен большой буфер, то половинки могут быть слишком большими - типа сутки заполнять придется sm.gif до начала разгрузки.
QUOTE
P.S. А что плохого в этом варианте - он слишком простой?

Ничуть не проще и не сложнее. Если буферов стало несколько, то уже без разницы два, четыре,...2048...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 12 2015, 05:45
Сообщение #58


Универсальный солдатик
******

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



Да, для 8-битников 16 256-байтовых буферов будет лучшим решением. Например.
Go to the top of the page
 
+Quote Post
Alexashka
сообщение Oct 12 2015, 06:38
Сообщение #59


Практикующий маг
******

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



Цитата(zltigo @ Oct 12 2015, 01:01) *
Если нужен большой буфер, то половинки могут быть слишком большими - типа сутки заполнять придется sm.gif до начала разгрузки.

Ничуть не проще и не сложнее. Если буферов стало несколько, то уже без разницы два, четыре,...2048...

Тут есть еще одна нехорошесть, о которой я не подумал - один буфер прочитан на 94%, а второй заполнен на 99% и в это время винда на несколько мс уходит в себя - получаем прерывание чтения: второй буфер еще не готов к чтению, а первый уже прочитан. Т.е когда скорости чтения-записи примерно одинаковы на краях буферов получается очень маленький запас по чтению.
Насчет проще сомневаюсь - это опять возврат к кольцевому буферу с его непременными атрибутами -проверка количества заполненных буферов, управление потоком записи и пр.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 12 2015, 08:00
Сообщение #60


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



для этого используйте 3, 4 и т.д. буферов.
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 16:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016