![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
У меня такая проблема. Иметься у нас плата АЦП фирмы Octagon модель 5710. Она вставляется в порт ISA. Путем установки перемычек можно установить базовый адрес платы (100H, 110H, …170H). Управление платой происходит путем записывания определенных битов (байтов) в адреса платы. Например, запуск преобразования платы происходит путем записи числа 255H на адрес BASE + 0, где я понял BASE – это базовый адрес. Считывание информации также происходит с определенных адресов. В Turbo – C используют операторы outportb и inportb(например outportb(0×21, а), inportb(BASE_5710 +2). Подскажите какие аналогичные операторы можно использовать в VC!!! Это первый вопрос. Еще при считывании информации мне нужно использовать прерывания IRQ, я так понял для этого нужно использовать класс CIM_IRQ. Мне бы кто-нибудь прокомментировал бы его на примере.
Честно говоря с понятием базового адреса я впервые столкнулся на этой плате, если у кого есть опыт работы с такой или аналогичной платы пишите и/или дайте ссылок. Это мой диплом, а осталось 1,5 месяца. Помогите бедному студенту Заранее спасибо! |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
читай DDK
|
|||
|
||||
Janus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
Халява! У нас лабы такие. Рыть надо в сторону всетаки не VC++, а Assembler. Например, ознакомься с топиком: http://forum.vingrad.ru/index.php?showtopic=58178. Возможны ассемблерные вставки в программу на C++ или отдельный модуль на асме. --------------------
Проект "Репликатор" |
|||
|
||||
adonin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 16.12.2005 Где: Новочеркасск Рост овская обл. Репутация: 2 Всего: 5 |
Не к ассемблеру, а к драйверу нулевого кольца. sgi1981 дал хорошую ссылку. Считаю необходимым повторить: I/O драйвер --------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР) |
|||
|
||||
Janus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
Да, и это тоже. В принципе, говорят, на С тоже можно работать с портами, но сам не знаю - не пробовал. --------------------
Проект "Репликатор" |
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Разве нету каковонибудь оператора в С++ который мог бы записывать в определенный адресс определеннлое значение, без асемблера? С портом незачем работать это точно. На турбо си вся программа состоит из двух операторов outportb(0×21, а), inportb(BASE_5710 +2)! Которые записывают и считывают данные с платы. Там есть байт готовности. Когда он равен 1 считываю данные, он снова становиться равен нулю, я опять жду когда он будет равен еденицы... Все считанные данны я записываю в файл... На Турбо СИ все так просто!
И еще я не знаю, что такое драйвер нулевого кольца... Может уж я думаю не под винду, а под ДОС писать... Спасибо за проявленную активность ![]() Добавлено @ 06:26 Вообще даже IRQ запросы не надо использовать. В ссылке которую вы дали я еще глубоко не разбирался, но при беглом осмотре там тоже используються эти два простых оператора: outportb(0x378, 0xFF); value = inportb(0x378); Куда делись такие хорошие операторы в VC!!! Добавлено @ 06:29 И кстати я не знаю, что такое DDK!!! Я далеко не гуру в С++... Добавлено @ 06:34 Еще что такое DDK... Я далеко не гуру в С++... |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
смотри в мсдн раздел
Device Input and Output Control (IOCTL) TIMA101, DDK device development kit Это сообщение отредактировал(а) chaos - 18.4.2006, 07:05 |
|||
|
||||
adonin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 16.12.2005 Где: Новочеркасск Рост овская обл. Репутация: 2 Всего: 5 |
вообще то Driver Development Kit.
Эти операторы напрямую записывают ваши данные в порты платы. Адрес порта вы передаёте в параметре. Они выполняют ассемблерную команду out NPort, Date Ещё раз говорю: одна из особенностей защищённого режима работы процессора состоит в том, что существуют "Привилегированные" команды, которые может выполнить только привилегированный код (Ядро, драйверы устройств). К этим командам относится и команда out При исполнении кода ядра и драйверов процессор переводится в привилегированное состояние (нулевое кольцо привилегий). Прикладные программы исполняются в 3-м кольце привилегий, поэтому команда out им недоступна. Для работы с устройством в Win NT нужно: 1) если есть драйвер устройства, испрользуйте его. Вам придётся изучить правила взаимодействия с драйвером. 2) если драйвера нет, пишем драйвер, который будет писать в порты устройства переданные ему из приложения данные. Вам придётся изучить технологию написания драйвера (благо, ничего особо сложного в этом нет). Насчёт команд IOCTL - эти команды передаются ДРАЙВЕРУ устройства. А тот уже записью в порты изменяет состояние устройства. З.Ы. Хорошее задание, на диплом - самое оно ![]() Это сообщение отредактировал(а) adonin - 18.4.2006, 07:49 --------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР) |
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Вот хоть какая то зацепка. Спасибо chaos! Щас буду разбираться! Но пока тема не закрыта!!!
Добавлено @ 08:00 adonin!!! Ты меня не пугай!!!Насчет драйвера не уверен надо поискать. Вроде в тех описании насчет драйвера ничего не ту!!! Писать драйвер, меня от этого сразу в холод и жар бросает... Щас если драйвер не найду то придеться что другое делать... Добавлено @ 08:03 adonin!!! Точно писать драйверы не сложно? Можно за неделю, вторую научиться? Там они пишуться на чем На С++ или на асемблере. Если на асемблере то это труба, ни когода его не юзал... |
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Я встрял плакал мой красный диплом, хоть какой-нибудь получить
![]() |
|||
|
||||
adonin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 16.12.2005 Где: Новочеркасск Рост овская обл. Репутация: 2 Всего: 5 |
Не сложно. Нужно только DDK где го раздобыть. Там много примеров и всё описано. Но если лень читать by English, могу выслать книжку на русском. Правда она криво распознана, и примеров в ней нет. Но базовые представления об архитектуре NT и структуре драйвера она даёт. Примеров полно в интернете. Сейчас поищу что нибудь. Пишутся драйверы на С++. Если нужно, Вы всегда можете сделать ассемблерную вставку в С++ код. --------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР) |
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Пожалуйсто делайте поправку что я не гуру в С++. Если что нибудь найдете шлите на ящик [email protected].
Спасибо вам за оказанное внимание ![]() Добавлено @ 08:24 Ксати adonin, мой номер аськи 234226513. Если что хотелось с вами держать связь... |
|||
|
||||
adonin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 16.12.2005 Где: Новочеркасск Рост овская обл. Репутация: 2 Всего: 5 |
TIMA101, выслал Вам книгу, и статейку одну. Там примеров несколько. Насчёт аськи: у меня её на шлюзе режут
![]() Добавлено @ 08:40 Если что, пишите в PM или на e-mail. (Значки внизу поста) --------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР) |
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
А вот под ДОС писать не легче будет?
|
|||
|
||||
adonin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 16.12.2005 Где: Новочеркасск Рост овская обл. Репутация: 2 Всего: 5 |
Легче. Dos не переводит процессор в защищённый режим, значит нет понятия привилегированных команд. Поэтому то в Turbo C и прокатывает outportb и inportb. Просто Вы спросили, как это сделать на VC, я вам ответил
![]() Это сообщение отредактировал(а) adonin - 18.4.2006, 09:52 --------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР) |
|||
|
||||
Lotrex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: 2 Всего: 3 |
А с самой платой никаких драйверов и API нету? Есть ишшо такая Numega Driver Studio. Вроде бы с ее использованием еще проще... А вообще, если можно - то надо писать под ДОС для начала.
|
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Посоветуйте как под ДОС написать для начала!!!
|
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Мне нужно только записывать некие значения в определенные адресса платы (BASE_5710 +2)... Прерывания я уже передумал использовать . Считывать значения я собираюсь через бит готовности. Когда он равен 1 считываю значения, жду когда он будет равен нулю и.т.п. Мне нужно лишь напрямую работать с паматью!!! Согласен даже на ДОС . Может нужно использовать ассемблеровские вставки? Я там уж погрузился в чтение про нулевое кольцо...
Короче пишите и спасибо за оказанное внимание!!! |
|||
|
||||
Janus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
Ну так тебеж сказали, с портами работать через in/out - на асме (вставку сделай). Это будет работать под ДОС. Чтобы тоже самое работало под Win, нужно сунуть прогу куда-то в реестр, чтобы она работала в нулевом кольце.
Но у меня тоже вопросик возник. Если я пишу под Win, как мне заменить ф-ции чтения/записи? Т.е. какая-то прога решила записать/прочитать что-то в/из COM. Нужно сделать так, чтобы эти операции происходили через мои процедуры. Как? Объявить и экспортировать какие-то спец. функции? Какие? Вообще, может, кто знает, где прочитать про написание драйвера под Win? --------------------
Проект "Репликатор" |
|||
|
||||
adonin |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 16.12.2005 Где: Новочеркасск Рост овская обл. Репутация: 2 Всего: 5 |
Используйте outportb и inportb, или
Это не поможет, в нулевое кольцо так не залезть. Перехватывайте API функции или пишите драйвер-фильтр.
В DDK самое полное описание. Или же Google: Примеры драйверов Добавлено @ 11:07 Написание драйверов --------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР) |
||||||||
|
|||||||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Мне бы подробнее как через асм всавку значение переменной записать в определенную ячейцу и считать значение переменной из определенной ячейки. Еще глупый вопрос: Память платы получаеться как бы видима компьютером и она адрессуеться через базовый адресс, как бы становиться частью памяти компа...
![]() Артем тебе спасибо за такое бескорыстное внимание! Это сообщение отредактировал(а) TIMA101 - 22.4.2006, 20:21 |
|||
|
||||
TIMA101 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Еще вопросик:
out Port, Data port - это адресс, если да то в каком виде Data - это имя перемменой, если да то какого типа.. |
|||
|
||||
DvarfInkvizitor |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 10.7.2006 Где: М.о. г. Климовск Репутация: нет Всего: нет |
Adonin, есть вопросик (никогда не писал на C++, с ассемблером знаком очень мало):
//мне нужно организовать передачу команд и данных с платой, установленной в ISA. Нужно ли как-то инициализировать работу с данным портом? Если да - то как? //надо под DOS в Turbo C. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |