В этой главе:
Редактор ресурсов драйверов drvedit предназначен для :
Для запуска редактора драйверов из редактора схем выберите пункт Driver Editor меню Edit .
Для запуска редактора драйверов в командной строке наберите в окне терминала команду :
drvedit [ -p project -d path ] &
Где :
Чтобы получить полный список опций дайте команду
use drvedit
Общий вид окна редактора драйверов показан на рисунке .
Основное меню редактора состоит из двух пунктов Project и Help , причем Project доступен , если только редактор запущен из командной строки. В этом случае выбрав пункт меню Project, на экране появится подменю , в котором можно выбрать новый проект .
При выборе пункта Open открывается окно с перечнем проектов , находящихся в директории , которая указана в поле Project Path . Этот путь указывается при запуске drvedit и его можно изменять в окне . Проект выбираются из списка либо двойным нажатием кнопки "мышки", либо кнопкой Select.
После открытия проекта в основном окне появляется список доступных драйверов в виде узлов основного ствола дерева , а выбранные для данного проекта копии драйверов отображаются в виде ветвей дерева . В нашем примере это 818L_1 . Если в данном проекте драйвер не используется , то узел ображается в виде пересечения линий , иначе узел отображается в виде кнопки с '+' - в свернутом виде или '-' - в развернутом .
Для добавления новой копии какого - либо драйвера надо выбрать нужный тип драйвера и нажать кнопку Insert, после чего появится дополнительное окно для определения имени копии драйвера .
Это имя является уникальным для данного проекта и используется для идентификации драйвера . Вид этого окна приведен на рисунке .
Для удаления копии какого - либо драйвера надо выбрать нужную копию драйвера и нажать кнопку Delete , после чего копия драйвера будет исключена из проекта.
Редактор ресурсов драйверов дает возможность делать отдельные копии драйверов временно неактивными или переведенными в режим эмуляции . В основном окне снизу от списка драйверов расположены кнопки отражающие текущее состояние выбранного драйвера. Выбор состояния драйвера осуществляется путем нажатия на одну из кнопок состояния , при этом можно выбрать из трех вариантов :
Вид окна показан на рисунке.
Выделив курсором нужный драйвер и нажав кнопку Edit можно войти в режим редактирования ресурсов конкретного драйвера УСО .
Окно редактирования ресурсов драйвера показано на рисунке и позволяет редактировать ресурсы по нескольким разделам конфигурационного файла , доступ к которым осуществляется через механизм просмотра ветвей дерева.
Секции [Main] , [Base], [IRQ & DMA] и [Channels] являются обязательными и при их отсутствии - драйвера не смогут корректно работать .
Эти параметры расположены в нескольких секциях и включают в себя :
В этом окне конфигурируются ресурсы каналов
УСО .
Это касается УСО , которые имеют
каналы аналогового ввода / выхода и
счетно - импульсные входы .
Для аналоговых каналов
определяются значения следующих
шкал :
Кроме того указывается тип функции приведения к физической величине :
Все эти шкалы необходимо определить для того , чтобы драйвер мог привести значения преобразованные АЦП к физической величине . Для выходных каналов производится обратный пересчет от аналоговой величины к значению регистров УСО . Вид окна показан на рисунке .
Для аналоговых выходов определяется только шкала выходного диапазона платы и данные посылаются драйверу в виде значения электрического сигнала .
Для счетно - импульсных каналов задается только одна шкала - физическая , которая определяет цену одного импульса .
Редактор ресурсов позволяет конфигурировать специфические для каждого конкретного драйвера ресурсы , которые определяются при его разработке и описываются в дополнительных секциях конфигурационного файла . Этих секций может быть несколько . Пример окна с дополнительной секцией [ Advanced ] одного из таких драйверов показан на рисунке .
Настройки для каждой копии драйвера в проекте хранятся в одноименной поддиректории в файле :
/usr/rtw/apps/<имя проекта >/drv/<тип драйвера>/<имя копии >/driver.inf .
Информация для запуска драйверов проекта в файле:
/usr/rtw/apps/<имя проекта >/drv/drvstart.cfg .
Выход из редактора ресурсов драйверов осуществляется через кнопку Done .
Редактор-построитель драйверов drvbuilder предназначен для:
Для запуска редактора-построителя драйверов из редактора схем необходимо выбрать пункт Driver Builder меню Edit .
Для запуска редактора в командной строке необходимо набрать в окне терминала команду:
drvbuilder &
Для редактора - построителя драйверов имеется отдельная рабочая директория /usr/drvbuilder, которая имеет следующую структуру :
В основу концепции drvbuilder положена предпосылка , что типичный драйвер УСО представляет собой совокупность стандартных по функциональности процедур . При этом все процедуры разделяются на две категории :
Для пользователя Driver Toolkit интерес представляют процедуры второй категории . Это процедура - инициализации , процедуры ввода/вывода , обработчики прерывания и таймера , а также открытые заголовочные файлы .
Редактор drvbuilder позволяет в интерактивном режиме задать основные функциональные характеристики устройства УСО , после чего ему будут доступны для редактирования исходные модули тех процедур , чье наличие вытекает из функциональности драйвера .
Так , если УСО не имеет входов/выходов какого-либо типа , то и процедуры ввода-вывода для данного типа будут недоступны для редактирования . Любая процедура может остаться неотредактированной . Разработка процедур ведется на языке С для компилятора Watcom C 10.6 , имеется встроенная поддержка компиляции и сборки готовых программ драйверов .
После запуска программы drvbuilder отрывается интерфейсное окно , в котором можно выбрать уже имеющийся в наличии драйвер и провести необходимые корректировки , либо открыть новую разработку - при этом будет создан отдельный каталог , в который будут экспортированы все необходимые для разработки шаблоны . Вид окна показан на рисунке .
На следующем рисунке показано окно, в котором создается проект нового драйвера 812PG , при открытом текущем проекте драйвера 818L.
Задание функциональных особенностей драйвера осуществляется в интерактивном режиме в два этапа :
Условный переключатель имеет два положения , левое соответствует - ВЫКЛ , а правое - ВКЛ . Выбор осуществляется манипулятором "мышь" .
При включении механизма IRQ - программа предлагает (курсор становится в в виде руки ) указать тип канала с которым связан этот механизм .
Каждому типу соответствует своя процедура - обработчик .
После того как определены основные функциональные особенности драйвера - можно переходить к процессу разработки аппаратно-зависимых процедур - для этого надо выбрать пункт основного меню Source , после чего открывается окно для редактирования исходных текстов и загружается исходный модуль процедуры init .В этом окне имеется свое меню , основной пункт которого Source , позволяющий выбирать процедуры , доступные для корректировки . Вид этого окна показан на рисунке .
Редактирование
и компиляция исходных модулей
Редактирование исходных модулей можно вести как в основном окне Source Editor , так и в редакторе VEDIT - для этого надо нажать на кнопку Vedit в нижней части окна . Если часть информации была набрана в основном окне редактора , а затем появилась потребность продолжить работу в VEDIT , то все наработки будут перенесены в окно VEDIT . Работа в редакторе VEDIT - стандартная .
После того как исходный текст набран - надо вернутся в окно Source Edit и нажать кнопку Make для компиляции процедуры и дальнейшей прилинковки ее к основному телу драйвера . Вид этого окна показан на рисунке . Результаты компиляции отображаются в окне .
Основные соглашения
по именам переменных и процедур
Для эффективного использования механизма гибкого конфигурирования драйверов разработчику своих драйверов должны быть доступны ресурсы драйвера , которые могут редактироваться, с этой целью определен перечень глобальных переменных и сервисных процедур .
Глобальные переменные :
Часть ресурсов драйверов уникальна и может быть разработчиком описана в дополнительных секциях конфигурационного файла .
С целью упростить и унифицировать доступ к таким ресурсам в процедуре init , для разработчика предоставлена библиотечная процедура GetItemData. Синтаксис ее следующий:
Void * СfgGetValue( char *section , char * item ) ,
Где :
Возвращает :
адрес области данных item .
Кроме того можно использовать две процедуры для приведения входных аналоговых данных к электрической и физической величинам .
void electric_scale ( int idx , short value, float r_min , float r_max, const short MAX_AD),
где :
void phisical_scale ( int idx ) ,
где :
idx - номер канала ;
Чтобы иметь доступ в объекте RTWin к буферу с данными , полученными через механизм DMA , необходимо используя библиотечную функцию shmemmove() , перенести данные из буфера DMA в область памяти, доступную для блок-функции RTWin GetDMABuffer.
Рекомендуется в процедуре interrupt_handler вставить вызов этой функции.
Пример :
Для доступа к внутренним массивам данных по всем типам входных каналов предназначены макроопределения :
По завершению разработки загрузочный модуль драйвера находится в директории /usr/drvbuilder/bin , а заготовка конфигурационного файла driver.inf в директории с исходными текстами драйвера . Если драйверу необходимо использование нестандартных ресурсов для конфигурирования , то необходимо внести новую секцию и соответствующие поля в заготовку конфигурационного файла , в соответствии с его синтаксисом .
Для интеграции драйвера в CACSD RTWin надо перенести драйвер и конфигурационный файл в директорию /usr/rtw/drv/<имя драйвера>, после этого драйвер готов к использованию в составе CACSD RTWin совместно с пакетом Driver Toolkit .
Заголовок секции
Описание параметров секции
- int := параметр целого типа, знаковое ;
- float := - // - вещественного типа ;
- bool := булевый параметр ;
- string := параметр строкового типа ;
- range := для диапазона допустимых значений( только для чисел);
- list := для перечня допустимых значений .
Пример файла конфигурации
[main]