Как написать программу на ASM под виндой?

Тема в разделе "WASM.BEGINNERS", создана пользователем седьмой, 29 июн 2017.

Метки:
  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    седьмой,
    самое время вернуться к твоей первой теме на сайбере про LPT-порт и ферму, там было несколько страниц и тебя все отговаривали... Просто перечитай сообщения внимательно
    и да статьи с wasm.ru перенесены на wasm.in, сперва в "ручном" режиме Процессор Intel в защищенном режиме, а потом все статьи были перенесены автоматически Процессор Intel в защищенном режиме
     
    Последнее редактирование: 4 июл 2017
  2. horpis_real

    horpis_real Active Member

    Публикаций:
    0
    Регистрация:
    5 дек 2016
    Сообщения:
    141
    седьмой, вы, подозреваю, хотите сразу за изделие взятся ?
     
    седьмой нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    horpis_real,
    так у седьмой некая программа под DOS через LPT-порт управляет жутко секретным "доильным аппаратом с вертикальным взлетом", эту проблему уже год, как обсуждают и советами помогают, с самого начала ему советовали на микроконтроллере всё сделать
     
  4. horpis_real

    horpis_real Active Member

    Публикаций:
    0
    Регистрация:
    5 дек 2016
    Сообщения:
    141
    Чую неверный системный подход.
     
  5. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    Да помогали и не год, а сентября примерно, и я эту работу сделал, осталось только прикрутить мой код в общий проект, жду пока другое ПО будет готово и железо. Думаю не доильный аппарат, кто его знает что там на другом конце кабеля от компьютера будет находиться, теоретически все может быть. Просто надеюсь, что это не последняя тема, будут еще заказы и хочу подстраховаться, разобраться с драйвером на винде, только и всего. Не думаю что моя работа, чем то отличается от каких либо других, просто когда спрашивали зачем нужен драйвер под досом не знал как объяснить, что ms-dos использую для конкретной работы, а не просто так трачу время свое и других от нечего делать, так появился доильный аппарат, мне тогда казалось, что вполне могла быть такая реальная ситуация.
    Микл, по моему вы зря это написали, сейчас тема еще больше запутается, вот кто и что тут чует и как это относится к настройке драйвера под виндоус?
    конечно, а что тянуть?
    там было много тем, они все были об одном и том же, потому что сперва нормально отвечали, потом находился умник который говорил, что дос умер и тема закрывалась, приходилось открывать новую и там их наплодилась куча, я читаю их иногда, но что вы конкретно имеете в виду? И чем мне эти темы сейчас помогут?
     
    Последнее редактирование: 4 июл 2017
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Тема не запутается, но вот под Win x64 драйвера писать IMHO еще рано, хотя можно взять готовый из DDK максимально подстроить под себя и его использовать
     
    седьмой нравится это.
  7. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    Хорошо попробую, наверно WDK вы имели в виду? Я его сам найду этот код? Который мне максимально подойдет или вы дадите на него ссылку? Хорошо попробую скачать и посмотреть, спасибо за помощь.
     
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Тебе нужно в разделе "низкоуровневое программирование" по поводу драйверов пообщаться с "Убежденным", но не забывай читать и перечитывать книги, иногда такие перлы выдаешь :lol: ну да без обид, научишься, сам поймешь...
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Я вам советую USB платку взять. Это будет проще.

    Я вам уже писала надо читать MSDN. DDK раньше был закрытым, потом его объединили с SDK и получился WDK.
    Справочные материалы из WDK доступны на MSDN. Но WDK всё равно надо скачать, там и заголовочные файлы там утилиты.

    Это вам не потребуется.
    Это всё верно. Но введение должно быть другим. Майкрософт выделяет 6 уровней абстракций, у меня чуть больше.
    Начинать надо с application programming interface, придумываете интерфейс, а далее решаем как будем делать драйвер.
    Драйвер это по сути реализация этого API. Отсюда вывод драйвера бывают двух типов, ядерные и пользовательского пространства. Может вам вообще драйвер ядра ненужен! Или нужен?
    А Солдатов пишет о драйверах ядра. Там очень много особых, специфичных вещей.
    И порой мне кажется что мйкрософт специально всё старается усложнить.
    Вот это не поменялось. Но установку я бы делала как описано в WDK, а не как у Солдатова.
    Проблема в другом ядро меняется. Меняются скелеты драйверов(модели драйверов, стеки драйверов) , а значит и за ними меняются сами драйвера.
    Но на самом деле по вашу железку нет готового скелета.


    Даже не переживайте это вообще не где толком не описано.
    Многоядерный процессор. представь несколько процессоров под одной крышечкой в оной коробочке. Вот это и есть многоядерный процессор.
    Какую роль? - широкую. Вы привыкли работать с синхронным кодом, теперь вы должны освоить ещё два вида асинхронный и параллельный. Косякову вас будет много. И подводных камней там хватает.

    Сколько потоков может быть в одном ядре? Тут у вас путаница. Скажем так есть потоки ОС и есть потоки ядра. Потоки ядра это гипетригенг/гиперзеадинг(HT). Теперь забудьте это вариант термина и используете термин логические ядра. Физическое ядро как бы делиться на "логические" ядра. Что касается потоков ОС. Далее просто потоков. То их может быть сколько угодно, обычно раньше память заканчивалась. Если поток не спит и не ждёт, то он исполняется на одном ядре. Но потоки могут перемещаться между ядрами.
    Каким образом зависит от ядер и потоков? Я не знаю.
    Уровня драйвера не существует. Я уже говорила, что драйвер он работает на уровнях абстракции. А не наоборот.
    Управлять потоками ядрами вы можете от куда хотите. В приделах дозволенного.

    ioctl передаёт управление в том же потоке откуда его вызвали. IRQ привязано к ядру. А вот обработчик IRQL если не ошибаюсь допускает возможность предшествования по потокам, но это не стандартная возможность.

    Эта преувеличение.
     
    Последнее редактирование: 4 июл 2017
    седьмой, Коцит, Mikl___ и ещё 1-му нравится это.
  10. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Более того винда никогда не использовала аппаратную многозадачность )

    Но конечно, зависит от того что он понимает под многозадачностью и аппаратурой )) Ибо исходя из ответов - мне кажется ему нужно все ж начать с теории и не делать поспешных громких выводов и подобных утверждений
     
    Mikl___ и horpis_real нравится это.
  11. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    Это я помню, я убежденного держу в резерве на самый последний этап - отладки драйвера, если до этого дойдет дело :censored:
    Теорию я читаю, сам знаю что надо пролистать всю литературу и WDK скачал для 7й винды, поставлю сейчас.
     
    Последнее редактирование: 5 июл 2017
  12. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    Это форум он для этого и служит что бы разбираться с чем либо непонятным, поэтому громкие выводы или негромкие это не имеет значение. Это не статья на сайте, тут любой может что то спросить, и любой кто знает немного больше может ответить, а может не отвечать если не хочет. По моему я правила не нарушил, что не понял то спросил.
    И вот этот ваш ответ о чем? Я же не это спросил. Конечно порт например Сом не может работать одновременно в разных потоках, он железный каждый физический контакт может принимать один сигнал, но остальные то функции драйвера теоретически могут выполняться в разных потоках и на на разных ядрах, не вижу ничего смешного в вопросе.@TermoSINteZ,
     
  13. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    Спасибо огромное Pavia за подробное объяснение, немного прояснилось, буду еще читать. Но почему вы советуете взять USB платку, а если USB порт просто есть на компьютере, наверно можно просто использовать этот порт? Мне казалось, что драйвер к USB порту написать трудно, даже понять просто протокол передачи данных через USB и то сложно, (по сравнению с Сом портом или LPT) а тем более написать драйвер к нему или все проще на самом деле?
     
  14. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    А интерфейса нет в задаче, нужно просто принять сигналы с внешнего генератора через любой разъем, сейчас у меня настроен под досом прием сигнала на LPT порт, вы предложили настроить прием через USB порт. Поэтому надо просто принять перепад напряжения на входе, посчитать определенное количество этих перепадов (фронтов) и выдать код через Сом порт на внешнее устройство ( но там не серийный сом порт, а сом порт интерфейсной платы Элкус и для передачи и приема данных есть свой драйвер), затем получить ответный код с внешнего устройства, проанализировать его и выдать некий код через Сом порт ( в этот раз уже штатный/серийный сом порт) на другой комп с виндой. Но можно и тут использовать не Сом порт, а USB. На любой материнке USB портов сейчас бывает достаточно много и два уже точно должны быть без всякого расширения. Причем есть некоторые временные ограничения. Таким образом получается, что надо написать драйвер на 2 порта USB или по одному драйверу на каждый USB вот это я еще не понял, надо наверно начать писать, после прочтения литературы и тогда что то прояснится.
     
  15. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    И как это связано с аппаратной многозадачностью в защищенном режиме?
    А я не смеюсь, мне просто грустно.
    И да - какой вопрос такой и ответ.

    Это я добавил к ответу Pavia,
    Не забывайте, что правильно поставленный вопрос - это 50 процентов успеха.
     
  16. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    не грустите, ваша грусть кода к драйверу не прибавит, просто можете не писать в этой теме, а то мне вас жаль и не знаю чем помочь. А забывать мне нечего, как умею и понимаю так и пишу, это форум не русского языка и литературы. Тут каждый пишет то чего ему не ясно и вообще мы ушли мимо темы.
     
  17. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    Pavia, Я кажется понял с чего вы предложили начать писать драйвер , вот нашел подходящий пример на сайте Майкрософт "Пользовательские образцы USB устройстваПоказывает, как взаимодействовать с устройством USB, используя пространство имен Windows.Devices.Usb. " попробую с ним пока разобраться, если я вас правильно понял.
     
  18. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    седьмой,

    > Но почему вы советуете взять USB платку

    Потому что у этого порта свой протокол обмена. Ваш периферийный контроллер должен использовать этот протокол. Он включён в библиотеки PIC. Но можно использовать промежуточную платку, которая сама будет заниматься протоколом и имеет порты I/O для подачи ваших сигналов.
     
  19. седьмой

    седьмой Member

    Публикаций:
    0
    Регистрация:
    27 июн 2017
    Сообщения:
    66
    Адрес:
    г.Киров
    А мне зачем библиотеки PIC, это же вы имеете в виду микроконтроллер. У меня в проекте с который я работаю есть мой компьютер под досом, в котором установлена специализированная интерфейсная плата Элкус с Сом портом для связи с внешним устройством через этот порт (этот драйвер уже есть, причем под любую операционную систему). Еще есть внешнее устройство это генератор, с него поступают импульсы заданной частоты, я на своем ПК (под досом) эти импульсы считаю и в определенный момент отправляю данные через плату Элкус во внешнее устройство, затем получаю ответную информацию, анализирую ее и отправляю результат на другой комп, на котором установлена винда и с того другого компа идет управление железом, которое тоже связано с тем же внешним устройством, но уже по силовой части. Драйвер виндовс мне нужен, что бы можно было обьединить вместе 2 компьютра в один в идеале, но при этом быстродействие чтения сигналов с драйвера внешнего устройства и драйвера ( сейчас порта LPT, потом надеюсь будет USB если получится) от внешнего генератора не должно ухудшиться. На первом этапе хочу просто комп с досом, заменить на комп с виндой. Зачем мне в этой структуре нужен микроконтроллер, и зачем мне отдельная плата для порта USB, если в работе я использую промышленный комп и количество портов могу изначально заказать в таком количестве которое необходимо. Или я вас не так понял?
     
  20. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Почему USB плата?
    В DOS'е вы крутили цикл и читали данные с LPT через порты(далее режим PIO).
    Виндоус это многозадачная ОС, с вытисняющей многозадачностью. Это значит что в любое время вашу задачу могут остановить и отдать управление другой задачи.
    При таком подходе вы будете терять данные. От нескольких мкс до долей секунд.
    Отсюда вывод windows заточен на пакетную передачу данных.
    Как быть с портами такими как LPT которые появились до виндоуса?
    1) Выход первый действуем как варвары чётко и эффективно. Залазим в ядро и запрещаем прерывания на время работы вашей программы.
    2) Контроллёр DMA. Но проблема в устройстве LPT. В виндоусе все написано за вас достаточно обычному приложению открыть файл 'LPT1' и читать-писать данные. Как в обычный файл. А они сами будут уходить в порт.
    2.1) С ценарий первый. Всё работает. Но тут выясняется, что скорость меньше чем через PIO.
    2.2) Сценарий второй. Включаем режим ЕСP.
    Скорость выше чем в PIO. Но беда в том, что по правилам ECP вы должны слать байты не абы как. А с маркерами начала, конца и делать синхропаузы.
    3) Ещё одно решение это USB - плата.
    Скажем так, виндоус заточен на пакетную передачу данных. И те скорости которые вы хотите можно получить только на отдельной железки и после переупаковать данные в пакеты.
    Вот в USB как вы наверно понимаете это запрещено. Вы не можете переключать или читать кажды бит с USB. Иногда говорят, что это интерфейсный порт.
    Зато это можно делать на GPIO портах. В компьютере они сделаны без привязки к DMA поэтому медленные в отличии от микроконтроллёров. Где вам никто не мешает делать простой цикл. А в нормальных микроконтроллеёах есть свой DMA который может работать с GPIO.

    Остаётся это упаковат в USB и на стороне компьютера расспокавать.
    Разобраться с USB трудно. Дело в том что его разрабатывали индусы. Амерекацы выполнели перевод на английский, но с кучей ошибок. А потом вы читаете русский перевод в котором ещё куча ошибок. Но если вы посмотрите примеры, то увидете как там всё просто.

    П.С. Память у меня девечья, могла что-то напутать.
     
    Последнее редактирование: 6 июл 2017
    horpis_real и седьмой нравится это.