Category: General LinuxCNC Questions
Hi,
I create some pins in the RT module, now I want to read and write pins' value in user space.I use the following code,but it failed.Is there any way to access RT module pins in the user space? The environment is Ubuntu20.04+xenomai3.1+linuxcnc2.9.Thanks!
int compId;
int ret;
hal_float_t *pin_value;
// init HAL
compId = hal_init("user_program");
if (compId < 0) {
rtapi_print("HAL init failed\n");
return -1;
}
pin_value = (hal_float_t*)hal_malloc(sizeof(hal_float_t));
ret = hal_pin_float_new("kernel_pin", HAL_IN, &pin_value, compId);
if (ret < 0) {
rtapi_print("getting or creating pin failed!\n");
hal_exit(compId);
return -1;
}
ret = hal_link("user_program.kernel_pin", "ALT.I2600");
if (ret < 0) {
fprintf(stderr, "cann't bind signal!\n");
hal_exit(compId);
return -1;
}
hal_ready(compId);
//*pin_value = 123.45;
//rtapi_print("value is: %f\n", *pin_value);
hal_exit(compId);
It prints some messages:
HAL: initializing hal_lib
HAL: initializing component 'user_program'
HAL: component 'user_program' initialized, ID = 28
smalloc_up: shmem available 1386552
HAL: ERROR: pin_new(kernel_pin) called with already-initialized memory
HAL: creating pin 'kernel_pin'
HAL: ERROR: data_ptr_addr not in shared memory