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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

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

Сообщение Гагарин » 23 мар 2017, 15:15

А как тоже самое сделать в юзерспейс компоненте? Предыдущий вариант, так понимаю, не подходит.
Вроде как есть аргументы: void userinit(int argc, char **argv){}
Как их передать из loadusr my_comp ?
Гагарин
Опытный
 
Сообщения: 118
Зарегистрирован: 18 июн 2015, 17:25
Репутация: 12
Настоящее имя: Юрий

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

Сообщение merkwurdigliebe » 24 мар 2017, 19:36

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

loadusr my_comp param1 param2 param3

а в userinit() их в argv их в виде текстовых и найдете. но я не пробовал
Последний раз редактировалось merkwurdigliebe 24 мар 2017, 23:46, всего редактировалось 1 раз.
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение Гагарин » 24 мар 2017, 21:44

пробовал подобным способом. Пока не поучилось. В понедельник еще поэкспериментирую.
Гагарин
Опытный
 
Сообщения: 118
Зарегистрирован: 18 июн 2015, 17:25
Репутация: 12
Настоящее имя: Юрий

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

Сообщение merkwurdigliebe » 25 мар 2017, 00:05

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

Код: Выделить всёРазвернуть
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
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение Гагарин » 25 мар 2017, 15:20

Немного не правильно делал, значит, я )
Гагарин
Опытный
 
Сообщения: 118
Зарегистрирован: 18 июн 2015, 17:25
Репутация: 12
Настоящее имя: Юрий

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

Сообщение Гагарин » 27 мар 2017, 08:37

Попробовал. Спасибо, за пример. До этого я не просек значение аргументов: что argc - количество опций, а *argv - массив с их значениями.
Гагарин
Опытный
 
Сообщения: 118
Зарегистрирован: 18 июн 2015, 17:25
Репутация: 12
Настоящее имя: Юрий

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

Сообщение T00T » 28 май 2017, 21:56

Вот такой вопрос. Как изменить папку, ну или указать папку в которой будут искаться include
т.е. Если записать include <...> то реально будет поиск к конкретной папке. Что если нужных библиотек там нет.
И вообще когда пишешь простое приложение и компилируешь gcc всё находиться(в другом месте). А если halcompail, то поиск в другом месте происходит.
Отличаются ли библиотеки в разных местах (может одни какие-нибудь реалтаймовские, а другие нет. Ну или как то ещё) или одинаковое назначение их?
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 707
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение UAVpilot » 28 май 2017, 22:32

T00T писал(а):Вот такой вопрос. Как изменить папку, ну или указать папку в которой будут искаться include

Опция компилятора "-I".
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16164
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3943
Медальки:
Настоящее имя: Сергей

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

Сообщение T00T » 28 май 2017, 22:42

Это для halcompail, или GCC
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 707
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение UAVpilot » 28 май 2017, 22:46

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

P.S. Советую освоить gcc и до кучи make и рассмотреть Makefile'ы от других проектов - вопросов сильно поубавится... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16164
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3943
Медальки:
Настоящее имя: Сергей

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

Сообщение T00T » 28 май 2017, 22:56

Но makefile halcompile создаёт сам. Как посмотреть что он создаёт, и внести изменения?
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 707
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение UAVpilot » 29 май 2017, 00:22

T00T писал(а):Как посмотреть что он создаёт

Например в его исходниках.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16164
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3943
Медальки:
Настоящее имя: Сергей

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

Сообщение T00T » 30 май 2017, 23:29

Короче проблема такая - Хочу поэкспериментировать с сокетами.
Написал тестовую прогу, в ней include <sys/socket.h>
Всё компилируется и работает.
Теперь если попытаться модуль с функциями сокета собрать halcompile пишет нет такого файла( include <sys/socket.h>). Походу не там ищет.
Как понять где он ищет, просто у меня складывается впечатление что ищет он там где надо, но не находит.
Всё это дело под ubuntu 10.04
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 707
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение merkwurdigliebe » 31 май 2017, 04:05

сокеты только в юзерспейсе, если это риалтайм компонент под RTAI ядром - то не получится. под RTAI был TCP/IP стек - RTNet, по-моему. но это - геморрой, там свои драйверы сетевых карт (пара штук), свои утилиты типа rtifconfig и т.п.
а вот если собрать linuxcnc под RT_PREEMPT ядро - тогда пожалуйста
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение T00T » 31 май 2017, 10:12

А как тогда драйвер 7i76e и прочие, в userspice ?
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 707
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение UAVpilot » 31 май 2017, 12:59

T00T писал(а):А как тогда драйвер 7i76e и прочие

Они только под RT_PREEMPT работают.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16164
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3943
Медальки:
Настоящее имя: Сергей

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

Сообщение T00T » 28 ноя 2017, 21:47

Вот возник тут вопрос. Как правильно работать с прерываниями в модулях для LinuxCNC. Какие особенности из-за того что работаем с RTAI ядром.
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 707
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение UAVpilot » 29 ноя 2017, 02:13

Как и везде - максимально быстро завершать работу обработчика прерывания.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16164
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3943
Медальки:
Настоящее имя: Сергей

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

Сообщение T00T » 30 ноя 2017, 00:05

Ну это конечно понятно. Решил тут поэкспериментировать с прерываниями.
Вот так объявляю функцию, и сама функция. Внутри функции прерывания пара присваиваний и больше ничего.
Код: Выделить всёРазвернуть
///////////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 подцепить, а там нужно постоянно опрашивать енкодеры. И поэтому тоже будет прерывание раз в сервопериод.
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 707
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение UAVpilot » 30 ноя 2017, 01:22

T00T писал(а):Но есть 7i76e ethernet, и тут волей неволей приём пакетов через прерывания.

И там тоже не используется, ибо незачем. Драйвер сетевой карты сам со всем этим справляется.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 16164
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 3943
Медальки:
Настоящее имя: Сергей

Пред.След.

Вернуться в LinuxCNC

Кто сейчас на конференции

Зарегистрированные пользователи: Argon-11, artmec, Barbossa, bass, Bing [Bot], Google [Bot], guges, Igor26rus, iMaks-RS, jkwe45, kalini4, leprud, mhael, Newengine, Nikomas, Quark, Rom327, savo, sergx99, tbc, vovafed, vvgr, Yandex [bot], Владимир_36, ДмитрийП, шпиндель

Поделиться

Reputation System ©'