px4 Daemon 만들기

px4에서 application을 만드는 방법은 http://dev.px4.io/tutorial-hello-sky.html 에서 다루고 있다. 그럼 daemon은 어떻게 만드는가?

daemon은 왜 만드나?

application은 nsh에서 유저가 실행을 해주거나, rc.init 스크립트에서 background로 실행해야 한다. daemon은 유저가 shell에서 직접 실행하지 않고도 백그라운드로 실행할 수 있다.

px4의 주요앱은 daemon으로 만들어져 있다. https://github.com/PX4/Firmware/blob/master/src/examples

Daemon app example

다음은 daemon 앱 예제코드 이다.

https://github.com/PX4/Firmware/tree/master/src/examples/px4_daemon_app

px4_daemon_app_main.c

daemon app main함수. 데몬을 만들고 실행, 끝, 상태등을 볼 수 있는 기능을 넣는다.

__EXPORT int px4_daemon_app_main(int argc, char *argv[]);
int px4_daemon_app_main(int argc, char *argv[])
{
}

px4_task_spawn_cmd은 데몬(px4_daemon_thread_main 함수)을 만들수 있는 task 만들수 실행한다.

daemon_task = px4_task_spawn_cmd("daemon",
        SCHED_DEFAULT,
        SCHED_PRIORITY_DEFAULT,
        2000,
        px4_daemon_thread_main,
        (argv) ? (char *const *)&argv[2] : (char *const *)NULL);

앱 코드가 들어간다.

int px4_daemon_thread_main(int argc, char *argv[])
int px4_daemon_thread_main(int argc, char *argv[]) 
{
      while(true){

              sleep(10);
              if(thread_should_exit)  break;
      }
      return 0;
}

Daemon 실행하기

NSH> px4_daemon_app   stop

NSH> top