В общем то пока актуальных вопросов 2.
Знатоки си подскажите......
Первый вопрос такой:
объявление структуры данных такое и выделение под него памяти
Код: Выделить всё
typedef struct {
void *mem_base;
__u32 io_base;
int len;
hal_bit_t *digital_in[32]; /* ptrs for digital input pins 0 - 31 */
hal_bit_t *digital_out[32]; /* ptrs for digital output pins 0 - 31 */
} to_pci_t;
/* pointer to array of evoreg_t structs in shared memory, 1 per port */
static to_pci_t *device_data;
...................
device_data = hal_malloc(num_ports * sizeof(to_pci_t));
if (device_data == 0) {
rtapi_print_msg(RTAPI_MSG_ERR,"to_pci: ERROR: hal_malloc() failed\n");
r = -1;
goto fail0;
}
Тут без вопросов.
Передаём пины in в хал.
Код: Выделить всё
for ( i=0; i<=31;i++) {
retval = hal_pin_bit_newf(HAL_OUT, &(device_data->digital_in[i]),
comp_id, "to_pci.%d.pin-%02d-in", 1, i);
функция которая опрашивает пины.
Код: Выделить всё
void update_port(void *arg, long period){
to_pci_t *port;
__u32 tmp,mask;
int pin;
port = arg;
// read digital inputs
tmp=*((__u32*)ttmp);
mask = 0x00000001;
for (pin=0 ; pin < 31 ; pin++) {
*(port->digital_in[pin]) = (tmp & mask) ? 1:0 ;
mask <<= 1;
}
}
ttmp - адрес ячейки откуда данные надо брать
В переменную tmp данные поступают верно!!!!!
Косяк вот тут:
*(port->digital_in[pin]) = (tmp & mask) ? 1:0 ;
По моему написано всё верно.
Компилиться без ошибок и варнингов.
Если эту функцию убрать, то AXIS запускается, и идёт постоянное обращение к устройству, но соответственно данные не передаются.
Если убрать звёздочку то варнинг - типа не тот тип данных... AXIS запускается, и идёт постоянное обращение к устройству, данных уже и не может быть.
А если эту функцию поставить то EMC начинает загружаться, происходит первое обращение к устройству и.......
Всё рухнулось
Код: Выделить всё
Print file information:
RUN_IN_PLACE=no
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/usr/bin
LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/share/linuxcnc/tcl/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.5
LINUXCNC - 2.8.0-pre1-693-g65603e7
Machine configuration directory is '/home/vladimir/linuxcnc/configs/my-conf'
Machine configuration file is 'my.ini'
INIFILE=/home/vladimir/linuxcnc/configs/my-conf/my.ini
PARAMETER_FILE=
TASK=milltask
HALUI=
DISPLAY=axis
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
Found file:./my.hal
Starting TASK program: milltask
Starting DISPLAY program: axis
USRMOT: ERROR: command timeout
USRMOT: ERROR: command timeout
USRMOT: ERROR: command timeout
USRMOT: ERROR: command timeout
waiting for s.axes
waiting for s.axes
waiting for s.axes
waiting for s.axes
waiting for s.axes
waiting for s.axes
waiting for s.axes
waiting for s.axes
waiting for s.axes
Shutting down and cleaning up LinuxCNC...
USRMOT: ERROR: command timeout
Killing task linuxcncsvr, PID=7314
Killing task milltask, PID=7352
USRMOT: ERROR: command timeout
USRMOT: ERROR: command timeout
Timeout, trying kill -9
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Debug file information:
Can not find -sec RS274NGC -var PARAMETER_FILE -num 1
Waiting for component 'inihal' to become ready...................................A configuration error is preventing LinuxCNC from starting.
More information may be available when running from a terminal.
...7314
. PID TTY STAT TIME COMMAND
7352
PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
.. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
.. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
.. PID TTY STAT TIME COMMAND
7352 ? S 0:00 milltask -ini /home/vladimir/linuxcnc/configs/my-conf/my.ini
.
<commandline>:0: milltask exited without becoming ready
PID TTY STAT TIME COMMAND
Stopping realtime threads
Unloading hal components
Kernel message information:
[ 6851.911482] I-pipe: Domain RTAI registered.
[ 6851.911498] RTAI[hal]: <3.8.1> mounted over IPIPE-NOTHREADS 2.6-03.
[ 6851.911502] RTAI[hal]: compiled with gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) .
[ 6851.911510] RTAI[hal]: mounted (IPIPE-NOTHREADS, IMMEDIATE (INTERNAL IRQs DISPATCHED), ISOL_CPUS_MASK: 0).
[ 6851.911513] PIPELINE layers:
[ 6851.911517] f9c1ce20 9ac15d93 RTAI 200
[ 6851.911520] c085cb20 0 Linux 100
[ 6851.948897] RTAI[malloc]: global heap size = 2097152 bytes, <BSD>.
[ 6851.949141] RTAI[sched]: IMMEDIATE, MP, USER/KERNEL SPACE: <with RTAI OWN KTASKs>, kstacks pool size = 524288 bytes.
[ 6851.949147] RTAI[sched]: hard timer type/freq = APIC/16744233(Hz); default timing: periodic; linear timed lists.
[ 6851.949152] RTAI[sched]: Linux timer freq = 250 (Hz), TimeBase freq = 1808525000 hz.
[ 6851.949155] RTAI[sched]: timer setup = 999 ns, resched latency = 2943 ns.
[ 6851.949331] RTAI[usi]: enabled.
[ 6852.104947] RTAI[math]: loaded.
[ 6852.221876] to_pci: io_base: E2000000, mem_base: f9406000
[ 6852.222191] to_pci: installed driver for 1 card(s)
[ 6852.255359] RTAPI: Task 1[f3faf800]: Fault with vec=14, signo=11 ip=f93f602a.
[ 6852.255365] RTAPI: This fault may not be recoverable without rebooting.
[ 6861.087174] to_pci: exit
[ 6863.381923] RTAI[math]: unloaded.
[ 6863.484825] SCHED releases registered named ALIEN RTGLBH
[ 6863.501744] RTAI[malloc]: unloaded.
[ 6863.600020] RTAI[sched]: unloaded (forced hard/soft/hard transitions: traps 0, syscalls 0).
[ 6863.606360] I-pipe: Domain RTAI unregistered.
[ 6863.606374] RTAI[hal]: unmounted.
В чём косяк
[ 6852.255359] RTAPI: Task 1[f3faf800]: Fault with vec=14, signo=11 ip=f93f602a.
[ 6852.255365] RTAPI: This fault may not be recoverable without rebooting.
Что то не туда пишется походу....
Я не волшебник я пока учусь......