PCI контроллер. Halcompail и драйвер.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Гагарин
Опытный
Сообщения: 142
Зарегистрирован: 18 июн 2015, 17:25
Репутация: 13
Настоящее имя: Юрий
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение Гагарин »

А как тоже самое сделать в юзерспейс компоненте? Предыдущий вариант, так понимаю, не подходит.
Вроде как есть аргументы: void userinit(int argc, char **argv){}
Как их передать из loadusr my_comp ?
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 608
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 580
Откуда: București
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение merkwurdigliebe »

по-моему, просто так и передать:

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 и драйвер.

Сообщение merkwurdigliebe »

да вроде работает

Код: Выделить всё

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 - массив с их значениями.
T00T
Мастер
Сообщения: 742
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 100
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение T00T »

Вот такой вопрос. Как изменить папку, ну или указать папку в которой будут искаться include
т.е. Если записать include <...> то реально будет поиск к конкретной папке. Что если нужных библиотек там нет.
И вообще когда пишешь простое приложение и компилируешь gcc всё находиться(в другом месте). А если halcompail, то поиск в другом месте происходит.
Отличаются ли библиотеки в разных местах (может одни какие-нибудь реалтаймовские, а другие нет. Ну или как то ещё) или одинаковое назначение их?
Я не волшебник я пока учусь......
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение Serg »

T00T писал(а):Вот такой вопрос. Как изменить папку, ну или указать папку в которой будут искаться include
Опция компилятора "-I".
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
T00T
Мастер
Сообщения: 742
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 100
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение T00T »

Это для halcompail, или GCC
Я не волшебник я пока учусь......
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение Serg »

Компилятор - это gcc. halcompile не компилятор, для компиляции он зовёт gcc.

P.S. Советую освоить gcc и до кучи make и рассмотреть Makefile'ы от других проектов - вопросов сильно поубавится... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
T00T
Мастер
Сообщения: 742
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 100
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение T00T »

Но makefile halcompile создаёт сам. Как посмотреть что он создаёт, и внести изменения?
Я не волшебник я пока учусь......
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение Serg »

T00T писал(а):Как посмотреть что он создаёт
Например в его исходниках.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
T00T
Мастер
Сообщения: 742
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 100
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение T00T »

Короче проблема такая - Хочу поэкспериментировать с сокетами.
Написал тестовую прогу, в ней include <sys/socket.h>
Всё компилируется и работает.
Теперь если попытаться модуль с функциями сокета собрать halcompile пишет нет такого файла( include <sys/socket.h>). Походу не там ищет.
Как понять где он ищет, просто у меня складывается впечатление что ищет он там где надо, но не находит.
Всё это дело под ubuntu 10.04
Я не волшебник я пока учусь......
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 608
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 580
Откуда: București
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение merkwurdigliebe »

сокеты только в юзерспейсе, если это риалтайм компонент под RTAI ядром - то не получится. под RTAI был TCP/IP стек - RTNet, по-моему. но это - геморрой, там свои драйверы сетевых карт (пара штук), свои утилиты типа rtifconfig и т.п.
а вот если собрать linuxcnc под RT_PREEMPT ядро - тогда пожалуйста
T00T
Мастер
Сообщения: 742
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 100
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение T00T »

А как тогда драйвер 7i76e и прочие, в userspice ?
Я не волшебник я пока учусь......
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение Serg »

T00T писал(а):А как тогда драйвер 7i76e и прочие
Они только под RT_PREEMPT работают.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
T00T
Мастер
Сообщения: 742
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 100
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение T00T »

Вот возник тут вопрос. Как правильно работать с прерываниями в модулях для LinuxCNC. Какие особенности из-за того что работаем с RTAI ядром.
Я не волшебник я пока учусь......
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение Serg »

Как и везде - максимально быстро завершать работу обработчика прерывания.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
T00T
Мастер
Сообщения: 742
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 100
Контактная информация:

Re: PCI контроллер. Halcompail и драйвер.

Сообщение T00T »

Ну это конечно понятно. Решил тут поэкспериментировать с прерываниями.
Вот так объявляю функцию, и сама функция. Внутри функции прерывания пара присваиваний и больше ничего.

Код: Выделить всё

///////////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 и драйвер.

Сообщение Serg »

T00T писал(а):Но есть 7i76e ethernet, и тут волей неволей приём пакетов через прерывания.
И там тоже не используется, ибо незачем. Драйвер сетевой карты сам со всем этим справляется.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «LinuxCNC»