Developing HAL component in c
17 Oct 2020 11:01 - 17 Oct 2020 11:03 #186347
by MasterTom
Developing HAL component in c was created by MasterTom
I started a simple component: tomtom.c
I tested it with: halcmd loadrt tomtom
I got:
Waiting for component 'tomtom' to become ready..Waited 3 seconds for master. giving up.
Note: Using POSIX realtime ..........................................................................................................................................
..............
According to existing components in linuxcnc-dev/src/hal/components I created the following code:
With this code I get additional prints
Waiting for component 'tomtom' to become ready..Waited 3 seconds for master. giving up.
Note: Using POSIX realtime
> STEP 1
> STEP export pins
> DONE export pins
> STEP export hal_export_funct
> DONE export hal_export_funct
> CALL hal_ready
> DONE CALL hal_ready
..........................................
==> rtapi_app_main was successfully finished.
What is the problem?
How to really debug such code?
//
//
I tested it with: halcmd loadrt tomtom
I got:
Waiting for component 'tomtom' to become ready..Waited 3 seconds for master. giving up.
Note: Using POSIX realtime ..........................................................................................................................................
..............
According to existing components in linuxcnc-dev/src/hal/components I created the following code:
With this code I get additional prints
Waiting for component 'tomtom' to become ready..Waited 3 seconds for master. giving up.
Note: Using POSIX realtime
> STEP 1
> STEP export pins
> DONE export pins
> STEP export hal_export_funct
> DONE export hal_export_funct
> CALL hal_ready
> DONE CALL hal_ready
..........................................
==> rtapi_app_main was successfully finished.
What is the problem?
How to really debug such code?
//
//
#include "rtapi.h" /* RTAPI realtime OS API */
#include "rtapi_app.h" /* RTAPI realtime module decls */
#include "hal.h" /* HAL public API decls */
/* module information */
MODULE_AUTHOR("TomTom");
MODULE_DESCRIPTION("First Test");
MODULE_LICENSE("GPL");
typedef struct {
int counter_limit_top;
int counter_limit_bottom;
int increment;
hal_bit_t *up; /* true-->up false-->down*/
hal_bit_t *start; //true-->run false-->stop */
hal_s32_t *counter;
} hal_tomtom_t;
static hal_tomtom_t *p_tom_data;
static int comp_id; /* component ID */
static void tomtom_realtimefunction(void *arg, long period);
static int _counter_value;
int rtapi_app_main(void)
{
rtapi_print("--------------------------> STEP 1\n");
comp_id = hal_init("Tom Test");
if (comp_id < 0)
{
rtapi_print_msg(RTAPI_MSG_ERR,
"Tom Test: ERROR: hal_init() failed\n");
return -7;
}
p_tom_data = hal_malloc(sizeof(hal_tomtom_t));
if (p_tom_data == 0)
{
rtapi_print_msg(RTAPI_MSG_ERR,
"Tom Test: ERROR: hal_malloc() for p_tom_dat \n");
hal_exit(comp_id);
hal_exit(comp_id);
return -11;
}
// init
p_tom_data->increment = 1;
p_tom_data->counter_limit_bottom = -100;
p_tom_data->counter_limit_top = 100;
p_tom_data->increment = 1;
// export pins
rtapi_print("--------------------------> STEP export pins\n");
int ret_val = hal_pin_bit_new("TomTomCounter.start/stop", HAL_IN, &(p_tom_data->start),comp_id);
if (ret_val != 0)
{
return -12;
}
rtapi_print("--------------------------> DONE export pins\n");
ret_val = hal_pin_s32_new("TomTomCounter.Counter", HAL_OUT,&(p_tom_data->counter),comp_id);
if (ret_val != 0)
{
return -14;
}
rtapi_print("--------------------------> STEP export hal_export_funct\n");
ret_val = hal_export_funct("Tom Tom",tomtom_realtimefunction, &p_tom_data, 0, 0,comp_id);
if (ret_val != 0)
{
rtapi_print_msg(RTAPI_MSG_ERR,
"WEIGHTED_SUM: ERROR: group %d export failed\n");
hal_exit(comp_id);
return -15;
}
rtapi_print("--------------------------> DONE export hal_export_funct\n");
rtapi_print("--------------------------> CALL hal_ready\n");
hal_ready(comp_id);
rtapi_print("--------------------------> DONE CALL hal_ready\n");
return 0;
}
void rtapi_app_exit(void)
{
rtapi_print("--------------------------> EXIT called\n");
hal_exit(comp_id);
}
void tomtom_realtimefunction(void *arg, long period)
{
rtapi_print("-cyclic\n");
return;
p_tom_data = (hal_tomtom_t*)arg;
if (p_tom_data->start)
p_tom_data->counter++;
rtapi_print_msg(RTAPI_MSG_ERR, "Hallo");
}
Last edit: 17 Oct 2020 11:03 by MasterTom. Reason: Additional question
Please Log in or Create an account to join the conversation.
17 Oct 2020 12:06 #186351
by dgarrett
A likely cause:
The name of the component and the file name must agree.
Replied by dgarrett on topic Developing HAL component in c
I started a simple component: tomtom.c
...
comp_id = hal_init("Tom Test");
A likely cause:
The name of the component and the file name must agree.
The following user(s) said Thank You: MasterTom
Please Log in or Create an account to join the conversation.
17 Oct 2020 12:55 #186352
by MasterTom
Replied by MasterTom on topic Developing HAL component in c
Hi,
I'm sorry. I'm new to LinuxCNC.
Now it is working better.
But there is no call hal_export_funct.
What could be the problem?
Thanks Thomas
I'm sorry. I'm new to LinuxCNC.
Now it is working better.
But there is no call hal_export_funct.
What could be the problem?
Thanks Thomas
Please Log in or Create an account to join the conversation.
17 Oct 2020 13:06 #186353
by dgarrett
suggest:
Replied by dgarrett on topic Developing HAL component in c
But there is no call hal_export_funct.
suggest:
//ret_val = hal_export_funct("Tom Tom",tomtom_realtimefunction, &p_tom_data, 0, 0,comp_id);
ret_val = hal_export_funct("tomfunc",tomtom_realtimefunction, p_tom_data, 0, 0,comp_id);
Please Log in or Create an account to join the conversation.
17 Oct 2020 13:23 #186356
by MasterTom
Replied by MasterTom on topic Developing HAL component in c
unfortunality it doesn't get cyclic:
these are what I got from halcmd;
tom@linuxcnc:/usr/lib/linuxcnc/modules$ halcmd -V loadrt tomtom
HAL: initializing hal_lib
HAL: initializing component 'halcmd5893'
HAL: component 'halcmd5893' initialized, ID = 10
HAL: removing component 10
HAL: releasing RTAPI resourcesHAL: component 10 removed, name = 'halcmd5893'
HAL: initializing hal_lib
/usr/bin/rtapi_app load tomtom
HAL: initializing component 'halcmd5893'
smalloc_dn: shmem available 347760
HAL: component 'halcmd5893' initialized, ID = 02
Note: Using POSIX realtime
> STEP 1
> STEP export pins
> DONE export pins
> STEP export hal_export_funct
> DONE export hal_export_funct
> CALL hal_ready
> DONE CALL hal_ready
<commandline>:0: Component 'tomtom' ready
<commandline>:0: Program '/usr/bin/rtapi_app' started
smalloc_up: shmem available 347047
<commandline>:0: Realtime module 'tomtom' loaded
HAL: removing component 02
HAL: releasing RTAPI resourcesHAL: component 02 removed, name = 'halcmd5893'
these are what I got from halcmd;
tom@linuxcnc:/usr/lib/linuxcnc/modules$ halcmd -V loadrt tomtom
HAL: initializing hal_lib
HAL: initializing component 'halcmd5893'
HAL: component 'halcmd5893' initialized, ID = 10
HAL: removing component 10
HAL: releasing RTAPI resourcesHAL: component 10 removed, name = 'halcmd5893'
HAL: initializing hal_lib
/usr/bin/rtapi_app load tomtom
HAL: initializing component 'halcmd5893'
smalloc_dn: shmem available 347760
HAL: component 'halcmd5893' initialized, ID = 02
Note: Using POSIX realtime
> STEP 1
> STEP export pins
> DONE export pins
> STEP export hal_export_funct
> DONE export hal_export_funct
> CALL hal_ready
> DONE CALL hal_ready
<commandline>:0: Component 'tomtom' ready
<commandline>:0: Program '/usr/bin/rtapi_app' started
smalloc_up: shmem available 347047
<commandline>:0: Realtime module 'tomtom' loaded
HAL: removing component 02
HAL: releasing RTAPI resourcesHAL: component 02 removed, name = 'halcmd5893'
Please Log in or Create an account to join the conversation.
17 Oct 2020 13:41 #186359
by dgarrett
try:
Note: during debugging,if hal exits abnormally you
may need to issue $ halrun -U
Replied by dgarrett on topic Developing HAL component in c
unfortunality it doesn't get cyclic
try:
$ cat tst.hal # create this file
# (adjust component and funct names as reqd)
loadrt tomtest
loadrt threads name1=t period1=25000 period2=1000000
addf tomfunc t
start
$ halrun tst.hal
Note: during debugging,if hal exits abnormally you
may need to issue $ halrun -U
Please Log in or Create an account to join the conversation.
17 Oct 2020 15:34 #186366
by MasterTom
Replied by MasterTom on topic Developing HAL component in c
Hi,
thanks for your great support. My component is working now (also under linuxcnc)
Best reagrds Thomas
thanks for your great support. My component is working now (also under linuxcnc)
Best reagrds Thomas
Please Log in or Create an account to join the conversation.
Time to create page: 0.123 seconds