Добрый день! Можно ли получить пример (исходник и скомпилированный файл) драйвера клавиатуры на C без ассемблерных вставок, самого-самого простого, например, который раскладку переключает не обычным способом, а любой другой клавишей. Спасибо.
Кулаков. Программирование на аппаратном уровне. Зубков Программирование на ассмблере для DOSa, Windowsa, Unixa
n0name Так это все ассемблер... Если с сями я еще туда-сюда, то ассемблер с нуля не хочется изучать. Мне бы на сях исходник драйвера в режиме ядра.
ну тогда на sysbin.com поищи среди сорцов ОСей, там всегда должен быть драйвер клавы, правда за простоту его не поручусь
n0name Вот поэтому сюда и написал. Сложных дров много, хотелось бы начать с о-о-очень простого на сях.
Great Согласен. Но принцепиально и на сях можно накатать, если уж Unix накатали ssa774 Изучать асм снала и не надо. Советовал бы Зубкова (т. к. у меня его книжка-малышка есть), откроешь главу "Программирования на уровне партов ввода/ввывода" там и описывается как ф-ционирует клава. Ищещь любой исходник на Ся, описывающий работу в режиме ядра и дело в шляпе.
ssa774 низкоуровневую часть все равно придеться писать на асме без портов ты просто очередной символ не получишь
ну для работы с портами вв в си написать пару макросов и всё. Тогда асма не понадобится в принципе. Ну хотя еще надо будет в постановке/обработке прерываний тоже асм использовать, хотя это не точно, тк не знаю поддерживает ли тот компилятор которым собирается пользоватся ТС каких-нибудь функций, типа set_interrupt().
Но ни в одном нормально написанном на Сях драйвере ассемблер не нужен. Для его исключения можно использовать функции HAL и, в крайнем случае, intrinsic`и компилятора (или если их нет, написать самому, как предложил noname). А уж драйвер клавиатуры и подавно не такая вещь, в которой нельзя обойтись без ассемблерного кода
в том или ином виде ассемблер все равно будет: хоть через вставки, хоть через макросы (готовые или самописные)
rei3er Вообще ассемблер влюбом случае будет (буть то драйвер или простая прекладная программа). Ну а если найти специализированный Си для написания драйверов, то прекрастно можно пользоваться только ф-циями из библиотек входящих в состав компилятора. Там прекрастно могут найтица ф-ции типа outport, inport и т. д. Типа этого есть в Turbo C, для вызова прерываний, и если я не ошибаюсь работа с портами ввода, вывода на верхнем уровне и без явного использования ассемблера.
нет, конечно, если рассматривать конечный результат, то да но одно дело, когда в программе только код на С, и другое дело, когда есть нечто не сишное в том или ином виде на уровне исходного кода
Основная цель изоляции ассемблера - обеспечить переносимость и удобочитаемость кода, а для этого годится любой из кучи предложенных выше способов. В Windows NT все низкоуровневые операции болтаются в нескольких десятках ассемблерных файлов с хорощо документированными интерфейсами, поэтому использовать экспортируемые из них функции никаких проблем не представляет