PCI контроллер. Halcompail и драйвер.
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Требуется помощь спецов
Хотел допилить драйвер STEP DIR.
Добавил в рабочую версию структуру str_step_t, функцию расчёта параметров движения DDcontr и вызов этой функции.
Всё вроде в порядке, компилируется без ошибок.
Но Linuxcnc не запускается. Если закоментировать вызов этой функции, то всё запускается.
Какие у кого мысли?
Хотел допилить драйвер STEP DIR.
Добавил в рабочую версию структуру str_step_t, функцию расчёта параметров движения DDcontr и вызов этой функции.
Всё вроде в порядке, компилируется без ошибок.
Но Linuxcnc не запускается. Если закоментировать вызов этой функции, то всё запускается.
Какие у кого мысли?
Я не волшебник я пока учусь......
- merkwurdigliebe
- Мастер
- Сообщения: 609
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
по-моему, при вызове DDcontr вы передаете ей неинициализированный указатель sd_data1
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Вызов этой функции, её содержимое. указатели и вызов её - всё по аналогии функции update port. В такой конфигурации всё компилируется, если же что-нибудь изменить то компилироваться не будет. Я пробовал записывать в структуре не указатели на float, __s32 и т.д., а сами float и т.д., результат тот же.
В 81 строке str_step_t *sd_data1;
В 81 строке str_step_t *sd_data1;
Я не волшебник я пока учусь......
- merkwurdigliebe
- Мастер
- Сообщения: 609
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
ну. определен указатель, значение его NULL. вы этот NULL передаете DDcontr и там разыменовываетеT00T писал(а):str_step_t *sd_data1;
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"
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Да, всё понял. Уже разобрался. Подскажите а что точно обозначает данная строка:
str_step_t *sd_data1;
Это объявление структуры типа str_step_t, с указателем на неё *sd_data1? В том случае указатель должен указывать на такую структуру.
Или это просто объявление указателя *sd_data1 пустого ну и якобы он потом будет указывать на структуру типа str_step_t.
Я не волшебник я пока учусь......
str_step_t *sd_data1;
Это объявление структуры типа str_step_t, с указателем на неё *sd_data1? В том случае указатель должен указывать на такую структуру.
Или это просто объявление указателя *sd_data1 пустого ну и якобы он потом будет указывать на структуру типа str_step_t.
Я не волшебник я пока учусь......
Я не волшебник я пока учусь......
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
С этим то как раз всё в порядке sd_data1 - это грубо говоря адрес, я его вот тут передаюmerkwurdigliebe писал(а):ikor = DDcontr( sd_data1,*(port-> digital_out_step));
...
ftemp = *(data_sd->l_move) + ccor - *(data_sd->cord_tek);
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;
Я просто забыл что по тому адресу пока ничего нет. Нужно просто освободить место под такую структуру и всё время обращаться к этому адресу.
Теперь вопрос: Такой метод объявления нужен исходя из того что это по идее модуль ядра? Или можно просто взять и объявить структуру и передавать её указатель?
Я не волшебник я пока учусь......
- merkwurdigliebe
- Мастер
- Сообщения: 609
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
нет, не все в порядке. sd_data1 - это статическая переменная типа "указатель на структуру какую-то там". значение этой переменной - адрес структуры. по-умолчанию статические переменные инициализируются нулями. больше в программе присваиванией этой переменной нет. и в функцию DDcontr в качестве первого аргументы вы передаете значение sd_data1 т.е. NULLT00T писал(а): ikor = DDcontr( sd_data1,*(port-> digital_out_step));
С этим то как раз всё в порядке sd_data1 - это грубо говоря адрес, я его вот тут передаю
ikor = DDcontr( sd_data1,*(port-> digital_out_step));
нет, вы создаете еще одну (локальную) переменную типа "указатель на str_step_t" и присваиваете ей адрес, переданный в первом аргументе, т.е. NULLЗатем в теле функции:
__s32 DDcontr(void *farg,float ccor)
str_step_t *data_sd;
Я создаю структуру типа str_step_t *data_sd;
А потом её указатель перемещаю на тот адрес data_sd = farg;
ну сейчас-то нет никакого метода да, можно объявить статическую переменную типа str_step_t. только если в системе может быть несколько экземпляров вашего драйвера, то они подерутся, наверноеТеперь вопрос: Такой метод объявления нужен исходя из того что это по идее модуль ядра? Или можно просто взять и объявить структуру и передавать её указатель?
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Я и говорю:merkwurdigliebe писал(а):нет, не все в порядке. sd_data1 - это статическая переменная типа "указатель на структуру какую-то там". значение этой переменной - адрес структуры. по-умолчанию статические переменные инициализируются нулями.
Ну и указатель должен указывать на этот участок.T00T писал(а):Я просто забыл что по тому адресу пока ничего нет. Нужно просто освободить место под такую структуру и всё время обращаться к этому адресу.
Спасибо за ответы.....
Я не волшебник я пока учусь......
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
merkwurdigliebe, А в вашем проекте PCI модуль это корка для софтового процессора?
Я не волшебник я пока учусь......
- merkwurdigliebe
- Мастер
- Сообщения: 609
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
ага, только это называется "выделить память" под структуру. и ее адрес присвоить переменной sd_data1 - т.е. проинициализироватьНужно просто освободить место под такую структуру и всё время обращаться к этому адресу.
нет, PCI корка сама по себе. с софкор процессором у них общее двухпортовое ОЗУ. ну и прерывания...T00T писал(а):А в вашем проекте PCI модуль это корка для софтового процессора?
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
А эта корка от Xilinx или нет?merkwurdigliebe писал(а): PCI корка сама по себе
Я просто под этот корпус не нашёл, пришлось самому написать.......
Я не волшебник я пока учусь......
- merkwurdigliebe
- Мастер
- Сообщения: 609
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
нет, слейв подтырил у латтис (тсс...), мастера дописал
- merkwurdigliebe
- Мастер
- Сообщения: 609
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
данные burst'ами передавать - иначе не успеваю
- PKM
- Почётный участник
- Сообщения: 4263
- Зарегистрирован: 31 мар 2011, 18:11
- Репутация: 705
- Настоящее имя: Андрей
- Откуда: Украина
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
А как насчет выходов степ/дир?
Re: PCI контроллер. Halcompail и драйвер.
Первый комплект пробуем испытывать уже.
Комплект плат PinCET для модернизации станков на Linuxcnc.
http://www.cnc-club.ru/forum/viewtopic. ... 16#p268407
http://www.cnc-club.ru/forum/viewtopic. ... 16#p268407
-
- Новичок
- Сообщения: 6
- Зарегистрирован: 14 янв 2017, 10:33
- Репутация: 2
- Настоящее имя: Алексей
- Откуда: Набережные Челны
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Как продвигаются дела с ethernet вариантом ваших плат?
-
- Мастер
- Сообщения: 742
- Зарегистрирован: 16 дек 2011, 12:07
- Репутация: 100
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
Подскажите как передавать параметры для подгружаемого модуля. Что то типа того:
loadrt pid names=pid.x - загружается компонент PID и ему передаётся имя через некую переменную, в данном случае name.
Как эту переменную обрабатывать в модуле?
loadrt pid names=pid.x - загружается компонент PID и ему передаётся имя через некую переменную, в данном случае name.
Как эту переменную обрабатывать в модуле?
Я не волшебник я пока учусь......
- merkwurdigliebe
- Мастер
- Сообщения: 609
- Зарегистрирован: 17 дек 2013, 22:14
- Репутация: 580
- Откуда: București
- Контактная информация:
Re: PCI контроллер. Halcompail и драйвер.
http://linuxcnc.org/lucid/docs/2.7/html ... rtapi.html
в данном случае
char *names[MAX_CHAN] ={0,};
RTAPI_MP_ARRAY_STRING(names, MAX_CHAN,"pid names");
в данном случае
char *names[MAX_CHAN] ={0,};
RTAPI_MP_ARRAY_STRING(names, MAX_CHAN,"pid names");