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. только если в системе может быть несколько экземпляров вашего драйвера, то они подерутся, наверное