# 전체 애플리케이션을 위한 모듈 템플릿

An application can be written to run as either a task (a module with its own stack and process priority) or as a work queue task (a module that runs on a work queue thread, sharing the stack and thread priority with other tasks on the work queue). 대부분은, 리소스 최소화를 위하여 작업 대기열을 사용합니다.

Note

구조 개요 > 런타임 환경은 작업 및 작업 대기열 작업에 대한 자세한 정보를 제공합니다.

Note

첫 번째 응용 프로그램 자습서에서 배운 내용은 전체 응용 프로그램 작성과 관련이 있습니다.

# 작업 대기열 작업

PX4-Autopilot에는 작업 대기열 작업으로 실행되는 애플리케이션(모듈)을 작성하기 위한 템플릿이 포함되어 있습니다. src/examples/work_item (opens new window).

작업 대기열 작업 응용 프로그램은 작업 대기열 작업임을 지정하고 초기화중에 실행되도록 예약해야 한다는 점을 제외하고 일반(작업) 응용 프로그램과 동일합니다.

예제는 방법을 설명합니다. 요약:

  1. cmake 정의 파일(CMakeLists.txt (opens new window))에서 작업 대기열 라이브러리에 대한 종속성을 지정합니다.
    ...
    DEPENDS
       px4_work_queue
    
  2. ModuleBase 외에도 작업은 ScheduledWorkItem(ScheduledWorkItem.hpp (opens new window)에 포함)에서 파생되어야 합니다.
  3. 생성자 초기화에서 작업을 추가할 대기열을 지정합니다. work_item (opens new window) 예제는 아래와 같이 wq_configurations::test1 작업 대기열에 추가됩니다.
    WorkItemExample::WorkItemExample() :
        ModuleParams(nullptr),
        ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::test1)
    {
    }
    

Note

사용 가능한 작업 대기열(wq_configurations)은 WorkQueueManager.hpp (opens new window)에 나열됩니다.

  1. ScheduledWorkItem::Run() 메서드를 구현하여 "작업"을 수행합니다.
  2. task_spawn 메서드를 구현하여 작업이 작업 대기열임을 지정합니다(task_id_is_work_queue ID 사용).
  3. 예약 방법 중 하나를 사용하여 작업 대기열 작업을 예약합니다(예제에서는 init 방법 내에서 ScheduleOnInterval 사용).

# 작업

PX4/PX4-Autopilot에는 자체 스택에서 작업으로 실행되는 애플리케이션(모듈)을 작성하기 위한 템플릿이 포함되어 있습니다. src/templates/template_module (opens new window).

템플릿은 전체 애플리케이션에 필요하거나 유용한 다음과 같은 추가 기능/측면을 보여줍니다.

  • 매개변수에 액세스하고 매개변수 업데이트에 반응합니다.
  • uORB 구독 및 주제 업데이트 대기 중입니다.
  • 시작/중지/상태를 통해 백그라운드에서 실행되는 작업을 제어합니다. 그런 다음 module start [<arguments>] 명령을 직접 추가할 수 있습니다. 시작 스크립트.
  • 명령줄 인수 구문 분석.
  • 문서: PRINT_MODULE_* 메서드는 두 가지 용도로 사용됩니다(API는 소스 코드 (opens new window)에 문서화됨):
    • 콘솔에서 module help를 입력할 때 명령줄 사용법을 인쇄합니다.
    • 스크립트를 통해 자동으로 추출되어 모듈 & 명령 참조 페이지.