Страница 13 из 19

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

Добавлено: 13 ноя 2016, 11:12
T00T
Требуется помощь спецов :)
Хотел допилить драйвер STEP DIR.
Добавил в рабочую версию структуру str_step_t, функцию расчёта параметров движения DDcontr и вызов этой функции.
Всё вроде в порядке, компилируется без ошибок.
Но Linuxcnc не запускается. Если закоментировать вызов этой функции, то всё запускается.
Какие у кого мысли?
to_pci4.c
файл драйвера
(14.29 КБ) 1064 скачивания
result.txt
сообщение об ошибке
(5.71 КБ) 1120 скачиваний

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

Добавлено: 13 ноя 2016, 14:11
merkwurdigliebe
по-моему, при вызове DDcontr вы передаете ей неинициализированный указатель sd_data1

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

Добавлено: 13 ноя 2016, 18:23
T00T
Вызов этой функции, её содержимое. указатели и вызов её - всё по аналогии функции update port. В такой конфигурации всё компилируется, если же что-нибудь изменить то компилироваться не будет. Я пробовал записывать в структуре не указатели на float, __s32 и т.д., а сами float и т.д., результат тот же.
В 81 строке str_step_t *sd_data1;

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

Добавлено: 13 ноя 2016, 18:57
merkwurdigliebe
T00T писал(а):str_step_t *sd_data1;
ну. определен указатель, значение его NULL. вы этот NULL передаете DDcontr и там разыменовываете

ikor = DDcontr( sd_data1,*(port-> digital_out_step));
...
ftemp = *(data_sd->l_move) + ccor - *(data_sd->cord_tek);

"thou shalt not follow the null pointer, for chaos and madness awaits thee at its end" ;)

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

Добавлено: 13 ноя 2016, 20:07
T00T
Да, всё понял. Уже разобрался. Подскажите а что точно обозначает данная строка:
str_step_t *sd_data1;
Это объявление структуры типа str_step_t, с указателем на неё *sd_data1? В том случае указатель должен указывать на такую структуру.

Или это просто объявление указателя *sd_data1 пустого ну и якобы он потом будет указывать на структуру типа str_step_t.

Я не волшебник я пока учусь......

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

Добавлено: 13 ноя 2016, 20:18
T00T
merkwurdigliebe писал(а):ikor = DDcontr( sd_data1,*(port-> digital_out_step));
...
ftemp = *(data_sd->l_move) + ccor - *(data_sd->cord_tek);
С этим то как раз всё в порядке sd_data1 - это грубо говоря адрес, я его вот тут передаю
ikor = DDcontr( sd_data1,*(port-> digital_out_step));

Затем в теле функции:
__s32 DDcontr(void *farg,float ccor)
{
str_step_t *data_sd;
Я создаю структуру типа str_step_t *data_sd;
А потом её указатель перемещаю на тот адрес data_sd = farg;

Я просто забыл что по тому адресу пока ничего нет. Нужно просто освободить место под такую структуру и всё время обращаться к этому адресу.

Теперь вопрос: Такой метод объявления нужен исходя из того что это по идее модуль ядра? Или можно просто взять и объявить структуру и передавать её указатель?

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

Добавлено: 13 ноя 2016, 20:37
merkwurdigliebe
T00T писал(а): ikor = DDcontr( sd_data1,*(port-> digital_out_step));
С этим то как раз всё в порядке sd_data1 - это грубо говоря адрес, я его вот тут передаю
ikor = DDcontr( sd_data1,*(port-> digital_out_step));
нет, не все в порядке. sd_data1 - это статическая переменная типа "указатель на структуру какую-то там". значение этой переменной - адрес структуры. по-умолчанию статические переменные инициализируются нулями. больше в программе присваиванией этой переменной нет. и в функцию DDcontr в качестве первого аргументы вы передаете значение sd_data1 т.е. NULL
Затем в теле функции:
__s32 DDcontr(void *farg,float ccor)
str_step_t *data_sd;
Я создаю структуру типа str_step_t *data_sd;
А потом её указатель перемещаю на тот адрес data_sd = farg;
нет, вы создаете еще одну (локальную) переменную типа "указатель на str_step_t" и присваиваете ей адрес, переданный в первом аргументе, т.е. NULL
Теперь вопрос: Такой метод объявления нужен исходя из того что это по идее модуль ядра? Или можно просто взять и объявить структуру и передавать её указатель?
ну сейчас-то нет никакого метода :) да, можно объявить статическую переменную типа str_step_t. только если в системе может быть несколько экземпляров вашего драйвера, то они подерутся, наверное

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

Добавлено: 13 ноя 2016, 20:47
T00T
merkwurdigliebe писал(а):нет, не все в порядке. sd_data1 - это статическая переменная типа "указатель на структуру какую-то там". значение этой переменной - адрес структуры. по-умолчанию статические переменные инициализируются нулями.
Я и говорю:
T00T писал(а):Я просто забыл что по тому адресу пока ничего нет. Нужно просто освободить место под такую структуру и всё время обращаться к этому адресу.
Ну и указатель должен указывать на этот участок.

Спасибо за ответы.....

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

Добавлено: 13 ноя 2016, 20:50
T00T
merkwurdigliebe, А в вашем проекте PCI модуль это корка для софтового процессора?

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

Добавлено: 13 ноя 2016, 21:07
merkwurdigliebe
Нужно просто освободить место под такую структуру и всё время обращаться к этому адресу.
ага, только это называется "выделить память" под структуру. и ее адрес присвоить переменной sd_data1 - т.е. проинициализировать
T00T писал(а):А в вашем проекте PCI модуль это корка для софтового процессора?
нет, PCI корка сама по себе. с софкор процессором у них общее двухпортовое ОЗУ. ну и прерывания...

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

Добавлено: 13 ноя 2016, 22:34
T00T
merkwurdigliebe писал(а): PCI корка сама по себе
А эта корка от Xilinx или нет?
Я просто под этот корпус не нашёл, пришлось самому написать.......

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

Добавлено: 13 ноя 2016, 22:57
merkwurdigliebe
нет, слейв подтырил у латтис (тсс...), мастера дописал

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

Добавлено: 14 ноя 2016, 00:32
T00T
А зачем там мастер то?

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

Добавлено: 14 ноя 2016, 01:44
merkwurdigliebe
данные burst'ами передавать - иначе не успеваю

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

Добавлено: 30 дек 2016, 19:53
PKM
А как насчет выходов степ/дир?

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

Добавлено: 31 дек 2016, 20:59
mmv
Первый комплект пробуем испытывать уже.

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

Добавлено: 18 янв 2017, 07:32
AlexeyChelny
Как продвигаются дела с ethernet вариантом ваших плат?

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

Добавлено: 18 янв 2017, 20:57
T00T
Пока работаем над этим.

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

Добавлено: 19 мар 2017, 22:08
T00T
Подскажите как передавать параметры для подгружаемого модуля. Что то типа того:
loadrt pid names=pid.x - загружается компонент PID и ему передаётся имя через некую переменную, в данном случае name.
Как эту переменную обрабатывать в модуле?

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

Добавлено: 19 мар 2017, 23:52
merkwurdigliebe
http://linuxcnc.org/lucid/docs/2.7/html ... rtapi.html

в данном случае

char *names[MAX_CHAN] ={0,};
RTAPI_MP_ARRAY_STRING(names, MAX_CHAN,"pid names");