If I dont put while(1) I doen’t do anything because the app is returning 1 and get out of the main 
And I thought in a the task code we always put the code into a while loop;
I try to create its own thread but It’s still does nothing
__EXPORT int debug_main(int argc, char *argv[]);
int debug_thread_main(int argc, char *argv[]);
int todo(int argc, char *argv[]);
int debug_main(int argc, char *argv[])
{
px4_task_spawn_cmd("debug",
SCHED_DEFAULT,
SCHED_PRIORITY_DEFAULT,
2000,
debug_thread_main,
(char * const *)&argv[0]);
return 1;
}
int debug_thread_main(int argc, char *argv[]){
struct hrt_call call;
struct timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = 1000000; //1msec
hrt_call_every( &call,
ts_to_abstime(&ts),
ts_to_abstime(&ts),
(hrt_callout)todo,
NULL);
return 1;
}
int todo(int argc, char *argv[]){
PX4_INFO("Was done !");
return 1;
}
And this also doesn’t work:
static bool thread_should_exit = false; /**< daemon exit flag */
static bool thread_running = false; /**< daemon status flag */
static int daemon_task; /**< Handle of daemon task / thread */
__EXPORT int debug_main(int argc, char *argv[]);
int debug_thread_main(int argc, char *argv[]);
int todo(int argc, char *argv[]);
static void usage(const char *reason);
void
usage(const char *reason)
{
if (reason) {
warnx("%s\n", reason);
}
warnx("usage: daemon {start|stop|status} [-p <additional params>]\n\n");
}
int debug_main(int argc, char *argv[])
{
if (argc < 2) {
usage("missing command");
return 1;
}
if (!strcmp(argv[1], "start")) {
if (thread_running) {
warnx("daemon already running\n");
/* this is not an error */
return 0;
}
thread_should_exit = false;
daemon_task = px4_task_spawn_cmd("debug",
SCHED_DEFAULT,
SCHED_PRIORITY_DEFAULT,
2000,
debug_thread_main,
(argv) ? (char *const *)&argv[2] : (char *const *)NULL);
return 0;
}
if (!strcmp(argv[1], "stop")) {
thread_should_exit = true;
return 0;
}
if (!strcmp(argv[1], "status")) {
if (thread_running) {
warnx("\trunning\n");
} else {
warnx("\tnot started\n");
}
return 0;
}
usage("unrecognized command");
return 1;
}
int debug_thread_main(int argc, char *argv[]){
struct hrt_call call;
struct timespec ts;
thread_running = true;
ts.tv_sec = 0;
ts.tv_nsec = 1000000; //1msec
while (!thread_should_exit) {
hrt_call_every( &call,
ts_to_abstime(&ts),
ts_to_abstime(&ts),
(hrt_callout)todo,
NULL);
} warnx("[daemon] exiting.\n");
thread_running = false;
return 0;
}
int todo(int argc, char *argv[]){
PX4_INFO("Was done !");
return 1;
}