Real Time + Video Processing
Делаю систему, которую необходимо подключить к Компу для подсчетов в реальном времени.
Для этого приходится писать под DOS (Знаю к сожалению только С и Ассемблер).
Можете ли вы мне помочь со следующими вопросами ?
Если я DOSе, могу ли я использовать фитчи видео карты ?(Я имею ввиду без DirectX итп)
Если заслать картинку в память видео карты, будет ли процессор отвлекаться?
Где достать подробное описание программирования видео карты ?
Как по вашему можно достигнуть максимально Real Time расчетов ?
Да, если напишешь свой драйвер.
Тут зависит от того, какаю карта имеется ввиду. Если обычная (S)VGA то там без проблем, а для 3д-акселераторов там каждому свой писать придется..
См выше. Зависит от карты.
См выше. Зависит от карты. :)
Странный вопрос... Рассчетов ЧЕГО?
Если просто абстрактных рассчетов, то отрубить все прерывания, забыть про видео и считать, считать, считать... :) Если каких-то конкретных, то надо смотреть по их специфике.
Я электронщик, поэтому прошу прощения за быть может некорректные вопросы.
Делаю систему, которую необходимо подключить к Компу для подсчетов в реальном времени.
Для этого приходится писать под DOS (Знаю к сожалению только С и Ассемблер).
Можете ли вы мне помочь со следующими вопросами ?
Если я DOSе, могу ли я использовать фитчи видео карты ?(Я имею ввиду без DirectX итп)
Если заслать картинку в память видео карты, будет ли процессор отвлекаться?
Где достать подробное описание программирования видео карты ?
Как по вашему можно достигнуть максимально Real Time расчетов ?
В dos-е многое из Вам необходимого делается через порты. У всех VGA/SVGA видеокарт есть свои особенности, но есть и базовые основы. Практически нереально использовать дополнительные возможности видеокарты без знания ее индивидуальных особенностей на аппаратном уровне. Если ваше самодельное устройство и есть видеокарта, то вам легче. В ином случае вообше непонятно, зачем при высокой скорости получения данных с устройства использовать особенности разных видеокарт. Расчеты и отображение каких-то данных для пользователя - это разные вещи. В противном случае юзер половины не успеет заметить.
Ситуация такая: Некое устройство, которое я построил я с высокой частотой выборки с ADC через USB загоняю в комп. Там процессор загружен большим кол-вом мат-расчетов, но как результат расчетов выдаёт на экран только координаты точки, причем фоном мне нужно иметь на экране картинку. Нежелательно чтоб процессор отвлекался еще и на графику.
Это должно быть какие-то общие фитчи для всех карт - никакой 3D, или других наворотов.
Еще раз - я електронщик, и к сожалению знаю не слишком глубоко Програмирование... так что прошу прощения за некорректность вопросов ;)
можно попробовать писать сразу в видеобуффер, вот только не знаю, как будет со скоростью. И еще проблемы с вертикальной синхронизацией
Так под DOSом иначе никак. Стандартные функции слишком тормозные.
С синхронизацией никаких проблем. Можно отлавливать начало обратного хода луча (хотя если этого не делать проблем тоже никаких. Это было актуально только для CGA.)
Но даже если проблема остается, могу помочь с производительными примерами на Pascal и Borland C++ 3.1
Могу сказать, что обновление экрана пусть даже стандартными функциями 2 раза в секунду (больше просто не надо) займет на процессоре P200 MMX не больше какихто долей от производительности процессора.
Позвольте несогласиться. Если перерисовывать картинку полностью (в противном случае чем не подходит мой метод с накладкой новых данных на статичный фон?) то придется так-же перерисовывать и график (или что там надо рисовать), а тут уже всё зависит от его сложности и количества элементов. Из личного опыта могу сказать, что несколько тысяч элементов способны несколько притормозить работу. (машина у меня правда была послабже)
Позвольте несогласиться. Если перерисовывать картинку полностью (в противном случае чем не подходит мой метод с накладкой новых данных на статичный фон?) то придется так-же перерисовывать и график (или что там надо рисовать), а тут уже всё зависит от его сложности и количества элементов. Из личного опыта могу сказать, что несколько тысяч элементов способны несколько притормозить работу. (машина у меня правда была послабже)
%)
Это дело техники и опыта. Кто Вас заставляет вычислять график каждый раз, если он не изменяется? Тем более в вычислениях Вам не помогут дополнительные возможности видеокарт.
%) Это дело техники и опыта. Кто Вас заставляет вычислять график каждый раз, если он не изменяется? Тем более в вычислениях Вам не помогут дополнительные возможности видеокарт.
Посмотрите внимательнее.. Я не говорил о ВЫЧИСЛЕНИИ. Вопрос в том, что при перерисовке фона кажды раз придется заново наносить график на фон. Полностью. И если он достаточно большой и сложный - повторная ОТРИСОВКА (без вычислений) может занять изрядно времени. А если это делать в realtime-е - может вобще сожрать уйму ресурсов. Это как раз и было в свое время выяснено в результате опыта.
Посмотрите внимательнее.. Я не говорил о ВЫЧИСЛЕНИИ. Вопрос в том, что при перерисовке фона кажды раз придется заново наносить график на фон. Полностью. И если он достаточно большой и сложный - повторная ОТРИСОВКА (без вычислений) может занять изрядно времени. А если это делать в realtime-е - может вобще сожрать уйму ресурсов. Это как раз и было в свое время выяснено в результате опыта.
Но чем здесь может помочь опция? прорисовка, если Вы ее делаете правильно, больше практически не оптимизируется... опять-таки, на чем и с использованием чего Вы пишите.
Я, видимо, что то пропустил.. Какая опция?
Еще раз повторяю: я предлагаю не перерисовывать всю картинку в целом, а лишь дополнять ее новыми элементами(как это реализуется конкретно - надо смотреть уже по ситуации). В этом случае на, собственно, отрисовку, ресурсов уйдет микроскопически мало. Если, конечно, задача позволяет воспользоваться подобным методом. Если нет - надо смотреть, что можно еще придумать.
Что подразумевается под "правильно"?
Очень часто(реально - практически всегда) "правильно" можно вполне оптимизировать до некоторого очень частного случая, которой в данной (иногда - только данной) ситуации является ещё более "правильным" :)
...так что опять таки надо подробно смотреть задачу:
- является ли фон статичным
- является ли график статичным (в т.ч. масштаб)
- новые данные дополняют или обновляют старые
- и т.д...
ЗЫ: Кстати, на счёт "не оптимизируется" это Вы зря. Как показывает практика даже оптимальный до предела (на взгляд автора) код (не алгоритм, а уже код) другим, часто, вполне оптимизируется еще сильнее.
На этой почве даже конкурсы устраивают. (демопати тому хороший пример)
Согласен по поводу оптимизации. Тогда можете с чистой совестью переходить на ассемблер - вот там все будет летать. да и не обязательно все на асме писать, можно основной код программы на паскале или си а ядро прорисовки на асмовских вставках.
Да я, в общем, так и работаю :)
Только мы от темы несколько отклонились. Судя по отсутствию комментариев от автора вопроса он уже давно решил эту проблему.:)
Да я, в общем, так и работаю :)
Только мы от темы несколько отклонились. Судя по отсутствию комментариев от автора вопроса он уже давно решил эту проблему.:)
%) Да! Он тихонько удалился со сцены и оставил нас в горячей дискуссии %)) маладец %)