PCI контроллер. Halcompail и драйвер.
-
- Опытный
- Сообщения: 142
- Зарегистрирован: 18 июн 2015, 17:25
- Репутация: 13
- Настоящее имя: Юрий
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
А как тоже самое сделать в юзерспейс компоненте? Предыдущий вариант, так понимаю, не подходит.
Вроде как есть аргументы: void userinit(int argc, char **argv){}
Как их передать из loadusr my_comp ?
Вроде как есть аргументы: void userinit(int argc, char **argv){}
Как их передать из loadusr my_comp ?
- merkwurdigliebe
- Мастер
- Сообщения: 608
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
по-моему, просто так и передать:
loadusr my_comp param1 param2 param3
а в userinit() их в argv их в виде текстовых и найдете. но я не пробовал
loadusr my_comp param1 param2 param3
а в userinit() их в argv их в виде текстовых и найдете. но я не пробовал
Последний раз редактировалось merkwurdigliebe 24 мар 2017, 23:46, всего редактировалось 1 раз.
-
- Опытный
- Сообщения: 142
- Зарегистрирован: 18 июн 2015, 17:25
- Репутация: 13
- Настоящее имя: Юрий
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
пробовал подобным способом. Пока не поучилось. В понедельник еще поэкспериментирую.
- merkwurdigliebe
- Мастер
- Сообщения: 608
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
да вроде работает
Код: Выделить всё
dmitry@atom:~/git/usercomp$ cat argv.comp
component argv "argv test";
option userspace yes;
option userinit yes;
pin out float out;
license "GPLv2 or later";
;;
#include <unistd.h>
void userinit(int argc, char *argv[]) {
int i;
for(i = 0; i < argc; i++)
rtapi_print_msg(RTAPI_MSG_ERR, "arg %d: %s\n", i, argv[i]);
}
void user_mainloop(void) {
while(1) {
usleep(1000);
FOR_ALL_INSTS() out = drand48();
}
}
dmitry@atom:~/git/usercomp$ halcmd loadusr argv one two three=val 4444
dmitry@atom:~/git/usercomp$ arg 0: argv
arg 1: one
arg 2: two
arg 3: three=val
arg 4: 4444
-
- Опытный
- Сообщения: 142
- Зарегистрирован: 18 июн 2015, 17:25
- Репутация: 13
- Настоящее имя: Юрий
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Немного не правильно делал, значит, я )
-
- Опытный
- Сообщения: 142
- Зарегистрирован: 18 июн 2015, 17:25
- Репутация: 13
- Настоящее имя: Юрий
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Попробовал. Спасибо, за пример. До этого я не просек значение аргументов: что argc - количество опций, а *argv - массив с их значениями.
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Вот такой вопрос. Как изменить папку, ну или указать папку в которой будут искаться include
т.е. Если записать include <...> то реально будет поиск к конкретной папке. Что если нужных библиотек там нет.
И вообще когда пишешь простое приложение и компилируешь gcc всё находиться(в другом месте). А если halcompail, то поиск в другом месте происходит.
Отличаются ли библиотеки в разных местах (может одни какие-нибудь реалтаймовские, а другие нет. Ну или как то ещё) или одинаковое назначение их?
т.е. Если записать include <...> то реально будет поиск к конкретной папке. Что если нужных библиотек там нет.
И вообще когда пишешь простое приложение и компилируешь gcc всё находиться(в другом месте). А если halcompail, то поиск в другом месте происходит.
Отличаются ли библиотеки в разных местах (может одни какие-нибудь реалтаймовские, а другие нет. Ну или как то ещё) или одинаковое назначение их?
Я не волшебник я пока учусь......
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Опция компилятора "-I".T00T писал(а):Вот такой вопрос. Как изменить папку, ну или указать папку в которой будут искаться include
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Это для halcompail, или GCC
Я не волшебник я пока учусь......
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Компилятор - это gcc. halcompile не компилятор, для компиляции он зовёт gcc.
P.S. Советую освоить gcc и до кучи make и рассмотреть Makefile'ы от других проектов - вопросов сильно поубавится...
P.S. Советую освоить gcc и до кучи make и рассмотреть Makefile'ы от других проектов - вопросов сильно поубавится...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Но makefile halcompile создаёт сам. Как посмотреть что он создаёт, и внести изменения?
Я не волшебник я пока учусь......
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Например в его исходниках.T00T писал(а):Как посмотреть что он создаёт
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Короче проблема такая - Хочу поэкспериментировать с сокетами.
Написал тестовую прогу, в ней include <sys/socket.h>
Всё компилируется и работает.
Теперь если попытаться модуль с функциями сокета собрать halcompile пишет нет такого файла( include <sys/socket.h>). Походу не там ищет.
Как понять где он ищет, просто у меня складывается впечатление что ищет он там где надо, но не находит.
Всё это дело под ubuntu 10.04
Написал тестовую прогу, в ней include <sys/socket.h>
Всё компилируется и работает.
Теперь если попытаться модуль с функциями сокета собрать halcompile пишет нет такого файла( include <sys/socket.h>). Походу не там ищет.
Как понять где он ищет, просто у меня складывается впечатление что ищет он там где надо, но не находит.
Всё это дело под ubuntu 10.04
Я не волшебник я пока учусь......
- merkwurdigliebe
- Мастер
- Сообщения: 608
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
сокеты только в юзерспейсе, если это риалтайм компонент под RTAI ядром - то не получится. под RTAI был TCP/IP стек - RTNet, по-моему. но это - геморрой, там свои драйверы сетевых карт (пара штук), свои утилиты типа rtifconfig и т.п.
а вот если собрать linuxcnc под RT_PREEMPT ядро - тогда пожалуйста
а вот если собрать linuxcnc под RT_PREEMPT ядро - тогда пожалуйста
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
А как тогда драйвер 7i76e и прочие, в userspice ?
Я не волшебник я пока учусь......
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Они только под RT_PREEMPT работают.T00T писал(а):А как тогда драйвер 7i76e и прочие
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Вот возник тут вопрос. Как правильно работать с прерываниями в модулях для LinuxCNC. Какие особенности из-за того что работаем с RTAI ядром.
Я не волшебник я пока учусь......
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Как и везде - максимально быстро завершать работу обработчика прерывания.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Ну это конечно понятно. Решил тут поэкспериментировать с прерываниями.
Вот так объявляю функцию, и сама функция. Внутри функции прерывания пара присваиваний и больше ничего.
Т.к. функция маленькая, то достаточно только верхнего прерывания, нижняя часть будет в основной функции, которая вызывается раз в сервопериод.
Прерывание тоже вызывается раз в сервопериод, но может и чаще.
После подключения такого модуля всё начинает подтормаживать.
Может просто у меня комп слабый(какой то ATLON уровня пентиум3). Хотя модуль без прерываний не оказывает заметного влияния.
Просто есть функции реалтаймовские rt_irq_new() и подобные. Для чего они нужны, в чём особенность их использования?
Как с этим дела обстоят у других плат? Я так понял что прерывания нигде не используют, а используется polling. Но есть 7i76e ethernet, и тут волей неволей приём пакетов через прерывания. Получается что на такой плате тоже будет заметное снижение производительности, т.к. к ней можно и 7i77 подцепить, а там нужно постоянно опрашивать енкодеры. И поэтому тоже будет прерывание раз в сервопериод.
Вот так объявляю функцию, и сама функция. Внутри функции прерывания пара присваиваний и больше ничего.
Код: Выделить всё
///////////REQUEST INTERRUPT//////////////////////////
retval = request_irq(pdev->irq,hand_interrupt, IRQF_SHARED, driver_NAME, st_dev);
if (retval) goto fail2;
irqreturn_t hand_interrupt (int irq, void *dev_st)
{
priv_pci_t *base_struct;
base_struct = dev_st;
if(base_struct->id == IDCODE)
{
base_struct->cnt++;
...
return IRQ_HANDLED;
}
else
return IRQ_NONE;
}
Прерывание тоже вызывается раз в сервопериод, но может и чаще.
После подключения такого модуля всё начинает подтормаживать.
Может просто у меня комп слабый(какой то ATLON уровня пентиум3). Хотя модуль без прерываний не оказывает заметного влияния.
Просто есть функции реалтаймовские rt_irq_new() и подобные. Для чего они нужны, в чём особенность их использования?
Как с этим дела обстоят у других плат? Я так понял что прерывания нигде не используют, а используется polling. Но есть 7i76e ethernet, и тут волей неволей приём пакетов через прерывания. Получается что на такой плате тоже будет заметное снижение производительности, т.к. к ней можно и 7i77 подцепить, а там нужно постоянно опрашивать енкодеры. И поэтому тоже будет прерывание раз в сервопериод.
Я не волшебник я пока учусь......
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
И там тоже не используется, ибо незачем. Драйвер сетевой карты сам со всем этим справляется.T00T писал(а):Но есть 7i76e ethernet, и тут волей неволей приём пакетов через прерывания.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...