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

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

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

Сообщение T00T » 13 ноя 2016, 11:12

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

result.txt
сообщение об ошибке
(5.71 Кб) Скачиваний: 144
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 706
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение merkwurdigliebe » 13 ноя 2016, 14:11

по-моему, при вызове DDcontr вы передаете ей неинициализированный указатель sd_data1
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение T00T » 13 ноя 2016, 18:23

Вызов этой функции, её содержимое. указатели и вызов её - всё по аналогии функции update port. В такой конфигурации всё компилируется, если же что-нибудь изменить то компилироваться не будет. Я пробовал записывать в структуре не указатели на float, __s32 и т.д., а сами float и т.д., результат тот же.
В 81 строке str_step_t *sd_data1;
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 706
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение merkwurdigliebe » 13 ноя 2016, 18:57

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" ;)
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение T00T » 13 ноя 2016, 20:07

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

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

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

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

Сообщение T00T » 13 ноя 2016, 20:18

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;

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

Теперь вопрос: Такой метод объявления нужен исходя из того что это по идее модуль ядра? Или можно просто взять и объявить структуру и передавать её указатель?
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 706
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение merkwurdigliebe » 13 ноя 2016, 20:37

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

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

Сообщение T00T » 13 ноя 2016, 20:47

merkwurdigliebe писал(а):нет, не все в порядке. sd_data1 - это статическая переменная типа "указатель на структуру какую-то там". значение этой переменной - адрес структуры. по-умолчанию статические переменные инициализируются нулями.

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

Ну и указатель должен указывать на этот участок.

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

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

Сообщение T00T » 13 ноя 2016, 20:50

merkwurdigliebe, А в вашем проекте PCI модуль это корка для софтового процессора?
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 706
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение merkwurdigliebe » 13 ноя 2016, 21:07

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


ага, только это называется "выделить память" под структуру. и ее адрес присвоить переменной sd_data1 - т.е. проинициализировать

T00T писал(а):А в вашем проекте PCI модуль это корка для софтового процессора?


нет, PCI корка сама по себе. с софкор процессором у них общее двухпортовое ОЗУ. ну и прерывания...
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение T00T » 13 ноя 2016, 22:34

merkwurdigliebe писал(а): PCI корка сама по себе

А эта корка от Xilinx или нет?
Я просто под этот корпус не нашёл, пришлось самому написать.......
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 706
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

Сообщение merkwurdigliebe » 13 ноя 2016, 22:57

нет, слейв подтырил у латтис (тсс...), мастера дописал
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение T00T » 14 ноя 2016, 00:32

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

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

Сообщение merkwurdigliebe » 14 ноя 2016, 01:44

данные burst'ами передавать - иначе не успеваю
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

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

Сообщение PKM » 30 дек 2016, 19:53

А как насчет выходов степ/дир?
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4193
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 675
Медальки:
Настоящее имя: Андрей

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

Сообщение mmv » 31 дек 2016, 20:59

Первый комплект пробуем испытывать уже.
mmv
Опытный
 
Сообщения: 131
Зарегистрирован: 24 май 2016, 21:58
Репутация: 13

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

Сообщение AlexeyChelny » 18 янв 2017, 07:32

Как продвигаются дела с ethernet вариантом ваших плат?
AlexeyChelny
Новичок
 
Сообщения: 6
Зарегистрирован: 14 янв 2017, 10:33
Откуда: Набережные Челны
Репутация: 2
Настоящее имя: Алексей

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

Сообщение T00T » 18 янв 2017, 20:57

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

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

Сообщение T00T » 19 мар 2017, 22:08

Подскажите как передавать параметры для подгружаемого модуля. Что то типа того:
loadrt pid names=pid.x - загружается компонент PID и ему передаётся имя через некую переменную, в данном случае name.
Как эту переменную обрабатывать в модуле?
Я не волшебник я пока учусь......
T00T
Мастер
 
Сообщения: 706
Зарегистрирован: 16 дек 2011, 12:07
Репутация: 89

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

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

http://linuxcnc.org/lucid/docs/2.7/html ... rtapi.html

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

char *names[MAX_CHAN] ={0,};
RTAPI_MP_ARRAY_STRING(names, MAX_CHAN,"pid names");
merkwurdigliebe
Мастер
 
Сообщения: 203
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 144

Пред.След.

Вернуться в LinuxCNC

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

Зарегистрированные пользователи: 19bvn58, aftaev, at90, Bing [Bot], Сергей72, Erch_84, FL@gMan, frezeryga, Google [Bot], Kachik, maagalex, nemo-light, PKM, ScrewDriver, sima8520, stav7, trafbite, UAVpilot, Umnik, Yandex [bot]

Поделиться

Reputation System ©'