Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Драйвер E20-10 для ядер Linux 2.4 ???

Вы не вошли.

 Поиск | Регистрация | Вход 

Ь Щ Е
26.05.2011 14:21:49
#26

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

и все же, есть ли в винде лимит какой-то? ну или не в винде то в железе компа.

26.05.2011 20:43:25
#27

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: Драйвер E20-10 для ядер Linux 2.4 ???

В любом случае, в USB скорость определяется самым медленным устройством. В случае E14-140 скорость будет full-speed для любой мат.платы. Это, собственно,  и является лимитом физически возможной скорости в данном случае.
В случае E20-10 устройство запрашивает high-speed, но, допустим, если мат.плата древняя с USB1.1, либо с USB2.0, но в биосе  high-speed запрещён (такое бывает), либо драйвер чипсета не стоит, поддерживающий high-speed, то скорость установится только full-speed и на частотах больше 500 кГц (1 МБ/c) E20-10 не сможет корректно работать...

26.07.2011 15:27:02
#28

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 676

Re: Драйвер E20-10 для ядер Linux 2.4 ???

На сайте выложен специализированный дистрибутив для МСВС 3.0 с поддержкой модулей E20-10,E-4-140, E14-440, E-154 - http://www.lcard.ru/download/lcomp_linux_2.4.32.tgz

Павел___
22.07.2014 13:49:12
#29

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Добрый день. Сегодня как раз потребовалось установить lcomp_linux_2.4.32.tgz под МСВС. Но при сборке каталога lcomp компилятор выдал:

[root@msvs lcomp]# make
g++ -fPIC -c -O3 -Wall -I/include -L/lib -I../include -L../lib -DLCOMP_LINUX=1 stubs.cpp
../include/stubs.h:45: error: 'struct _OVERLAPPED::<anonymous union>::_a' invalid; an anonymous union can only have non-static data members
../include/stubs.h:126: warning: 'void atomic_inc(atomic_t*)' defined but not used
../include/stubs.h:137: warning: 'void atomic_dec(atomic_t*)' defined but not used
make: *** [stubs.o] Error 1

Прочитал здесь: http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html
В stubs.h убрал в объединении имя структуры:

struct {
    ULONG Offset;
    ULONG OffsetHigh;
};

Вроде собралось, но вопрос уже больше к Вам - может где-то это имя структуры "_a" поглубже зашито и упадёт runtime (в Ваш код не лез)?... По ссылке там флаг компилятору указан, так чтобы не убирать имя вложенной структуры, но у меня с таким флагом не собиралось. Версия gcc:

[root@msvs ldevice_drv]# gcc --version
gcc (GCC) 3.3.6 release (MCBC-3.0 3.3.6-1vniins10)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@msvs ldevice_drv]#

Дальше каталог ./ldevusb_drv - собрался, объектник на выходе получил.

Следующий каталог ./ldevice_drv:

[root@msvs ldevice_drv]# make
gcc -O2 -DMODULE -DLCARD_DEBUG -D__KERNEL__ -W -Wall -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/2.4.32-vniins42/build/include   -c -o ldevice.o ldevice.c
ldevice.c: In function `ldev_add':
ldevice.c:85: error: `current' undeclared (first use in this function)
ldevice.c:85: error: (Each undeclared identifier is reported only once
ldevice.c:85: error: for each function it appears in.)
ldevice.c:88: warning: implicit declaration of function `preempt_schedule'
ldevice.c: In function `ldev_register':
ldevice.c:96: error: `current' undeclared (first use in this function)
ldevice.c: In function `ldev_remove':
ldevice.c:107: error: `current' undeclared (first use in this function)
ldevice.c: In function `ldev_init':
ldevice.c:150: warning: unused variable `i'
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h: In function `copy_segments':
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h:435: warning: unused parameter `p'
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h:435: warning: unused parameter `mm'
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h: In function `release_segments':
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h:436: warning: unused parameter `mm'
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h: In function `prefetch':
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h:43: warning: unused parameter `x'
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h: In function `prefetchw':
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h:48: warning: unused parameter `x'
/lib/modules/2.4.32-vniins42/build/include/linux/wait.h: In function `__remove_wait_queue':
/lib/modules/2.4.32-vniins42/build/include/linux/wait.h:251: warning: unused parameter `head'
ldevice.c: At top level:
ldevice.c:37: warning: `howmany' defined but not used
make: *** [ldevice.o] пЫЙВЛБ 1
[root@msvs ldevice_drv]#

Подцеплены только линуксовые хэдеры. Никакого `current' в указанных строках не вижу). Там только spin_lock() - она же file_list_lock() из ..../linux/fs.h. И spinlock_t - структура из одного int-а, объявленная в spinlock.h..... В чем причина - не знаю...

В этом каталоге, ldevice_drv, при скачивании архива уже находились два собранных объектника от ldevice_drv и ldevusb_drv. Запустил скрипт start - создал ссылки, как я понимаю, только со второго раза: 

[root@msvs ldevice_drv]# ./start
rmmod: module ldevusb is not loaded
rmmod: module ldevice is not loaded

[root@msvs ldevice_drv]#
[root@msvs ldevice_drv]# ./start
[root@msvs ldevice_drv]#    

После всех make-ов много варнингов - с переменными неиспользуемыми ладно, но встречаются и по делу.

Пример из папки ./test - собрался, запустился, что-то выдал .)

Вопросы по сборке каталогов остаются. В инструкции по инсталяции ничего не сказано, про то, что объектник из ldevusb_drv нужно перетащить в ldevice_drv - не просто ведь так он там оказался .)

23.07.2014 12:46:51
#30

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Я точно не помню уже что там было. С эти МСВС одни сложности. Я смог его установить только на очень древней машине и в конечном итоге это работало на ядре без smp. Кроме этого мне кажется что 3.3.6 это второй компилятор в системе, а основной чуть ли не 2.9.5. C заказчиком я помню были сложности как раз с тем что драйвера я собирал системным, а в Qt  они работали с опциональным...

Павел___
25.07.2014 07:15:25
#31

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

В системе нашел три версии gcc (2.9, 3.3, 4.1). На этот раз собирал версией 2.95.4:

[root@msvs ldevice_drv]# gcc -v
Reading specs from /usr/lib/gcc-lib/i586-linux/2.95.4/specs
gcc version 2.95.4 20010319 (prerelease/franzo/20011204)

Каталог ./lcomp с Вашим кодом собрался без изменения stubs.h. На счет ./ldevice_drv - ошибка по-прежнему осталась:

[root@msvs ldevice_drv]# make
gcc -O2 -DMODULE -DLCARD_DEBUG -D__KERNEL__ -W -Wall -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/2.4.32-vniins42/build/include   -c -o ldevice.o ldevice.c
In file included from /lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h:13,
                 from /lib/modules/2.4.32-vniins42/build/include/linux/list.h:6,
                 from /lib/modules/2.4.32-vniins42/build/include/linux/module.h:13,
                 from ldevice.c:4:
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h: In function `copy_segments':
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h:435: warning: unused parameter `p'
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h:435: warning: unused parameter `mm'
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h: In function `release_segments':
/lib/modules/2.4.32-vniins42/build/include/asm/processor.h:436: warning: unused parameter `mm'
In file included from /lib/modules/2.4.32-vniins42/build/include/linux/list.h:6,
                 from /lib/modules/2.4.32-vniins42/build/include/linux/module.h:13,
                 from ldevice.c:4:
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h: In function `prefetch':
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h:43: warning: unused parameter `x'
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h: In function `prefetchw':
/lib/modules/2.4.32-vniins42/build/include/linux/prefetch.h:48: warning: unused parameter `x'
In file included from /lib/modules/2.4.32-vniins42/build/include/linux/fs.h:12,
                 from ldevice.c:5:
/lib/modules/2.4.32-vniins42/build/include/linux/wait.h: In function `__remove_wait_queue':
/lib/modules/2.4.32-vniins42/build/include/linux/wait.h:251: warning: unused parameter `head'
In file included from /lib/modules/2.4.32-vniins42/build/include/linux/fs.h:384,
                 from ldevice.c:5:
/lib/modules/2.4.32-vniins42/build/include/linux/quota.h: At top level:
/lib/modules/2.4.32-vniins42/build/include/linux/quota.h:176: warning: no previous prototype for `mark_info_dirty'
ldevice.c: In function `ldev_add':
ldevice.c:85: `current' undeclared (first use in this function)
ldevice.c:85: (Each undeclared identifier is reported only once
ldevice.c:85: for each function it appears in.)
ldevice.c:88: warning: implicit declaration of function `preempt_schedule'
ldevice.c: In function `ldev_register':
ldevice.c:96: `current' undeclared (first use in this function)
ldevice.c: In function `ldev_remove':
ldevice.c:107: `current' undeclared (first use in this function)
ldevice.c: At top level:
ldevice.c:145: warning: missing initializer
ldevice.c:145: warning: (near initialization for `ldev_fops.owner')
ldevice.c: In function `ldev_init':
ldevice.c:150: warning: unused variable `i'
ldevice.c: At top level:
ldevice.c:37: warning: `howmany' defined but not used
make: *** [ldevice.o] пЫЙВЛБ 1

Что можете предложить? Пересобрать ядро без smp? Честно говоря, понятия не имею как это делается. Может man какой есть? Да и как это отразится на работе, скажем, других программ, установленных на машине?

Как быть с теми двумя собранными Вами объектниками ldevice_drv и ldevusb_drv, которые уже находились в скаченном мной с Вашего сайта архиве? Ведь когда я позаимствовал оттуда ldevice.o, который у меня не собирается, то тестовый пример вроде как запустился. Этого недостаточно? Он был собран без smp и у меня, в конечном итоге, всё равно корректной работы не выйдет?

p.s. Был закуплен E14-140М. Предполагается, что библиотека будет использоваться для него.

25.07.2014 11:52:34
#32

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Драйвер E20-10 для ядер Linux 2.4 ???

У меня есть еще такой ldevice.c более поздний где включен #include <linux/smp_lock.h>

#include <linux/config.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>

#include <linux/smp_lock.h>

#include <linux/kernel.h>
#include <linux/major.h>

может он соберется если добавить...

Павел___
01.08.2014 07:42:03
#33

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Да, действительно, достаточно было добавить один заголовочник:

#include <asm/smplock.h>

Все собралось, запустилось, тестовый пример устройство опрашивает. Будем разбираться в функциях самой библиотеки. Спасибо за помощь в установке. Но вопросы, скорее всего, еще появятся.

Павел___
12.08.2014 12:38:21
#34

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Добрый день. Возникло несколько вопросов.


Когда я первый раз запускал тестовый пример, все, судя по всему, отработало нормально - плата опрашивалась. Тогда, с подключенным генератором(вроде бы была синусойда 50KHz), записался файл test.dat(4 Mb). Теперь же при подключении устройства и запуске примера работа обрывается, когда функция CreateInstance(atoi(argv[1])) возвращает нулевой указатель. Последний рабочий раз плату отсоединял уже после отключения компьютера. А когда подсоединял снова на генераторе было изначально выставлено 1 MHz, потом уже я изменил на 100 KHz, не помню вот только сигнал подавался сразу, или после изменения частоты - может в этом причина... Как-то это могло повлиять?


Кстати, я так и не разобрался как мне прочитать записанный файл test.dat. Сама задача простая: необходимо входной аналоговый сигнал в реальном времени после оцифровки отображать на экране компьютера. Т.е, проще говоря, нужно как-то извлечь из этого файла набор точек (x, y).

12.08.2014 13:09:45
#35

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Драйвер E20-10 для ядер Linux 2.4 ???

я надеюсь при подсоединении устройства драйвер запустился? Можно под Windows проверить работоспособность установив lcomp и запуститв примеры...

Павел___
13.08.2014 09:41:41
#36

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Работает. Причина: start.sh почему-то линки только со второго раза создает.

Вопрос с прочтением записанных бинарных данных test.dat остался. В каком виде данные забираются из памяти платы? По примеру, там, как только половина буфера накапливается, происходит сброс данных. Но что там и в каких структурах хранится?

Павел___
13.08.2014 09:49:33
#37

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Slot parameters
Base    0
BaseL   0
Mem     0
MemL    0
Type    1f
DSPType 0
Irq     0
Load Bios 1
Plata Test 0


Read FLASH
SerNum       1D899061
BrdName      E140
Rev          B
DspType     
IsDacPresent
Quartz       16000000


alloc size 10000384
Buffer size(word): 131072
Pages:             32
IrqStep:           4096
FIFO:              0
Rate:              100

13.08.2014 12:19:12
#38

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Драйвер E20-10 для ядер Linux 2.4 ???

отсчеты там лежат по кадрам 0 1 2 3 0 1 2 3....

Павел___
14.08.2014 12:24:34
#39

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Poul пишет:

отсчеты там лежат по кадрам 0 1 2 3 0 1 2 3....

А можно поподробнее, пожалуйста.

14.08.2014 12:50:25
#40

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Драйвер E20-10 для ядер Linux 2.4 ???

куда уж подробней. лежат отсчеты с ацп если опрашивается 4 канала, то так и лежат signed short числами друг за другом.

Павел___
18.08.2014 13:15:17
#41

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Как эти числа в вольты преобразовать?... Что-то непонятное я получаю, поэтому и спрашиваю Вас поподробнее...


1) На аналоговый вход подается sin - 10KHz, +/-0,5V. Частота опроса каналов в кадре t1.dRate = 100.0 (КГц). Строю график, точки беру из двоичного файла, ставлю их с шагом 0, 00001(шаг по времени взятия отсчетов). В итоге в файле больше 2 000 000 точек и график для меня совсем непонятный: https://yadi.sk/i/pMLb3oIWZvoHp

2) Вход:  sin - 10KHz, +/-0,5V; t1.dRate = 20.0; шаг по времени получается 0, 00005. График: https://yadi.sk/i/LI1ukl2AZvoHg

3) Вход:  sin - 10KHz, от 0V до 1V; t1.dRate = 20.0; шаг - 0, 00005. График: https://yadi.sk/i/fGko-zdLZvoHP

У меня используется один канал, синхронизация по нему же.


И еще, t1.Chn[0] = 0x20; - это усиление по 0 каналу 0x20 ? Можно это пояснить? Попробовал разные значения - на выходе ничего не меняется, оставил - 0x1.

18.08.2014 13:59:42
#42

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Драйвер E20-10 для ядер Linux 2.4 ???

0x20 это должно быть 1 усиление и однополюсный 0 канал. 0x1 это уже должене быть 1 канал в дифф режиме. Посмотрите в описании модуля про логический номер канала.

18.08.2014 14:09:42
#43

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Павел___ пишет:

Как эти числа в вольты преобразовать?...

e14_140_programmers_guide.pdf параграф 3.2.1: нижняя граница диапазона соответствуют коду -8000, верхняя - +8000 (после коррекции калибровочными коэффициентами).

На графиках масштаб не позволяет рассмотреть частоту полезного сигнала (при 10 кГц и частоте дискретизации 100 кГц период 10 точек, а на частоте дискретизации 20 кГц - 2 точки, это частота Найквиста, сигнал ровно на ней подавать не очень корректно). Вот эта "жирная линия" может быть искомой синусоидой.
А можете вместо картинок дать ряд из нескольких десятков последовательных отсчетов в виде чисел?

Павел___
20.08.2014 08:33:41
#44

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Прочитал про логические каналы и про границы диапазона отсчетов после использования калибровочных коэффициентов. Результаты по сути не изменились...


На графиках масштаб не позволяет рассмотреть частоту полезного сигнала

Я эти графики показываю, чтобы видно было, что в целом вся картина неверная, не говоря уже о том, чтобы высматривать маленькие периоды. Калибровка, на сколько я понимаю, - это смещение и масштаб, - стало быть вид самой характеристики то же не поменяется.


Попробовал вот так (аналоговый вход - sin, 10KHz; rate = 100KHz):

1) t1.Chn[16] = 0x30 - сигнал подается на Х16, однофазный, без усиления: https://yadi.sk/i/fqs3PfC3a5mTZ

2) Тот же 16 канал в дифф. режиме без усиления: t1.Chn[16] = 0xF - https://yadi.sk/i/PfQSc7U3a5mTP

С усилением, когда t1.Chn[16] = 0x4F, - картинка по форме такая же, но с максимумом не в ~-900, а в ~-600...


А можете вместо картинок дать ряд из нескольких десятков последовательных отсчетов в виде чисел?

Весь файл с отсчетами, целиком(в текстовом виде).

1) Аналоговый вход - sin, 10KHz; rate = 100KHz; дифф. режим - https://yadi.sk/d/P5P7efyNa5mEa

2) Аналоговый вход - sin, 1KHz; rate = 50KHz; дифф. режим - https://yadi.sk/d/iw0qtETEa5mES

20.08.2014 15:40:41
#45

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Драйвер E20-10 для ядер Linux 2.4 ???

как под windows L-Graph показывает картинку? как работает все это под Linux с драйверами lcomp_linux.tgz не для мсвс?

Павел___
21.08.2014 07:43:38
#46

Гость

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Poul пишет:

как под windows L-Graph показывает картинку? как работает все это под Linux с драйверами lcomp_linux.tgz не для мсвс?

Хорошо, я посмотрю. Но мне всё же кажется, что я как-то неверно режим задаю... Я точно правильно задал управляющий байт АЦП?... Говорю, потому что когда я неправильный канал указывал в этом байте(до тех пор пока не посмотрел после Вашего комментария) картинка-то у меня всё равно такая же была!... С другой стороны, когда я задал усиление:

когда t1.Chn[16] = 0x4F, - картинка по форме такая же, но с максимумом не в ~-900, а в ~-600...

... отклик какой-то от системы был, а значит канал правильно задан(картинка же неверная потому что разбавляется со всех других не заземленных)...


У меня сейчас фактически используется одна ножка - Х16, другие каналы не заземлены (хотя в руководстве написано надо бы), - может здесь причина?... Может синхронизацию нужно убрать с Х16 и как-то по-другому её задать?...

21.08.2014 08:17:54
#47

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Павел___ пишет:

У меня сейчас фактически используется одна ножка - Х16, другие каналы не заземлены (хотя в руководстве написано надо бы), - может здесь причина?...

- Хотя бы примеры подключения посмотрите:
http://lcard.ru/download/e14-140_conn_examples.pdf

21.08.2014 11:10:46
#48

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: Драйвер E20-10 для ядер Linux 2.4 ???

Павел___ пишет:

У меня сейчас фактически используется одна ножка - Х16, другие каналы не заземлены (хотя в руководстве написано надо бы)

Хотя бы AGND и GND32 подключены, как в руководстве написано?
А X16 - это канал 16, так что у него младшие 4 бита селектора 0x0F (там с нуля считается).
Если Вы прочитаете 3.2.3. Логический номер канала АЦП, то будет сразу видно, что:
0x20 - это режим с общей землей, вход X1, усиление 1x.
0x4F - это режим дифференциальный, вход X16-Y16, усиление 4x.
0x30 - это режим с общей землей, вход Y1 (канал 17, считая с 1), усиление 1x.
Для входа X16 с общей землей возможные значения с разными усилениями - 0x2F, 0x6F, 0xAF, 0xEF.
Чтобы включать Xn в дифференциальном режиме, Yn обязательно должен быть подключен.

Можно для простоты написать макро для вычисления логического номера канала:

#define GAIN_E140(n) ((((n) > 1) + ((n) > 4) + ((n) > 16)) << 6)
/* дифференциальный, gain = 1, 4, 16, 64, ch = 1..16 */
#define CHSEL_DIFF_E140(gain, ch) ((((ch) - 1) & 0x0F) | GAIN_E140(gain))
/* общ. земля, gain = 1, 4, 16, 64, ch = 1..32 */
#define CHSEL_COMGND_E140(gain, ch) ((((ch) - 1) & 0x1F) | 0x20 | GAIN_E140(gain))