Skip to content

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

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). 대부분은, 리소스 최소화를 위하여 작업 대기열을 사용합니다.

Architectural Overview > Runtime Environment provides more information about tasks and work queue tasks.

All the things learned in the First Application Tutorial are relevant for writing a full application.

작업 대기열 작업

ModuleBase 외에도 작업은 ScheduledWorkItem(ScheduledWorkItem.hpp에 포함)에서 파생되어야 합니다.

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

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

  1. cmake 정의 파일(CMakeLists.txt)에서 작업 대기열 라이브러리에 대한 종속성을 지정합니다.

    ...
    DEPENDS
       px4_work_queue
  2. ScheduledWorkItem::Run() 메서드를 구현하여 "작업"을 수행합니다.

  3. 생성자 초기화에서 작업을 추가할 대기열을 지정합니다. work_item 예제는 아래와 같이 wq_configurations::test1 작업 대기열에 추가됩니다.

    cpp
    WorkItemExample::WorkItemExample() :
        ModuleParams(nullptr),
        ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::test1)
    {
    }

    The available work queues (wq_configurations) are listed in WorkQueueManager.hpp.

:::

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

작업

문서: PRINT_MODULE_* 메서드는 두 가지 용도로 사용됩니다(API는 소스 코드에 문서화됨):

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

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