DSDL(Data structure description language)

  • DSDL은 CAN bus를 이용해서 교환하는 자료구조를 정의하는데 사용한다.
  • 모든 자료구조는 독립된 DSDL 파일에서 정의한다.
  • DSDL정의는 특정 프로그래밍 언어에 대해서 자동으로 코드를 생성한다.
  • DSDL 정의 파일에서 소스 코드를 생성하는 도구를 DSDL 컴파일러라고 부른다.

파일 구조(File Hierarchy)

  • DSDL 정의 파일은 정확히 하나의 자료구조를 정의한다.
    2가지 데이터 교환 모드가 있다.

    • Message broadcasting
    • Service invocation
  • 정의한 자료구조는 namespace에 내부에 포함된다.
    namespace는 또 다른 namespace에 포함될 수 있다. 이를 nested namespace라고 부른다. 다른 namespace에 속하지 않는 namespace를 root namespace라고 부른다. 모든 표준 data type은 uavcan이라는 root namespace에 속하게 된다. ex) equipment, protocol등과 같은 namespace가 여기에 속한다.
  • data type 이름은 다음과 같이 DSDL 소스 파일에서 정의된다.
    <data type name>.uavcan
  • 기본 data type ID는 필요에 따라서 DSDL 소스 파일로 정의할 수 있다.
    <default data type ID>.<data type name>.uavcan
  • namespace 구조는 DSDL 정의의 디렉토리 계층구조로 정의한다. 디렉토리가 namespace를 대표하는 경우 다음과 같은 된다.
    + uavcan        <— Root namespace
    + equipment  <— Nested namespace
    + …
    + protocol   <— Nested namespace
    + 341>nodeStatus.uavcan     <— Definition of data type  “uavcan.protocol.NodeStatus” type 정의, 기본 data type ID는 341
    +Timestamp.uavcan  <– “uavcan.Timestamp” type 정의, 기본 data type ID는 할당하지 않음.
  • 표준 data type이 아닌 경우 기본 data type을 명시적으로 정의할 필요가 없다. (vendor 지정 및 application이 지정하는 data type의 경우)
  • 만약 기본 data type ID가 DSDL 정의에 없다면, 실행시에 application이 할당한다. 모든 표준 data type은 기본 data type ID를 정의하고 있다.
  • data type 이름은 대소문자를 구별한다. foo.Bar와 foo.bar는 다른 것으로 인식한다. 하지만 단순히 대소문자가 다른 이름으로 구별하는 것은 가급적 피하는게 좋다. 대소문자를 구분하지 않는 파일시스템을 가지는 경우 문제가 될 수 있다.
  • data type은 다른 자료구조를 포함할 수 있다. 일부 자료구조는 포함하는 형태를 지원하도록 설계된 것도 있고 이 경우 특정 data type ID를 가질 필요가 없다.
    전체 data type 이름은 root namespace에서 구성하는 data type의 ID이다. 포함된 모든 namespace와 data type 이름은 ‘.’ 기호를 이용해서 연결할 수 있따. uavcan.protocol.file.Read와 같은 형태가 된다. 전체 data type 이름의 길이는 80 자를 넘을 수 없다. 밑에서 사용할 수 없는 문자셋에 대해서 다룬다.
  • 서비스 자료구조 (Service data structure)
    • 서비스 호출은 2가지 네트워크 교환 연산으로 구성되므로, 서비스를 위한 DSDL 정의는 반드시 2개 구조를 정의해야만 한다.
      • 요청부(request part) – 요청 전송 (client -> server)
      • 응답부(response part) – 응답 전송 (server -> client)
    • request와 response 자료구조 모두 동일한 DSDL 정의 파일에 위치하며 특수 구문으로 분리되어 있다.
      서비스 호출 자료구조는 nest구조를 가지지 않는다.

문법

  • 자료구조 정의는 attribute와 directive로 구성된다. 정의 파일의 라인에 많아야 1개 attribute 정의 혹은 기껏해야 하나의 directive를 포함한다. 동일한 라인에는 다른 attribute 정의와 directive를 동시에 포함할 수 없다.
  • attribute는 다음 중에 하나가 될 수 있다.
    • Field : application이 변경할 수 있는 변수로 네트워크상에서 교환된다.
    • Constant : 네트워크 교환에 사용하지 않는 불변의 값
  • directive는 DSDL 컴파일러을 지시하는 구문이다.
  • attribute와 directive와 별개로 DSDL 정의에는 다음과 같은 entity들을 포함할 수 있다.
    • Comments
    • Service response marker
  • 상세한 내용은 다음과 같다.
  • message data type을 위한 DSDL 정의는 다음과 같은 내용들만 포함할 수 있다.
    • Attribute definition (zero or more)
    • Directives (zero or more)
    • Comments (optional)
  • service data type을 위한 DSDL 정의는 다음과 같은 내용들만 포함할 수 있다.
    • Request part attribute definitions (zero or more)
    • Response part attribute definitions (zero or more)
    • Directives (zero or more)
    • Comments(optional)
    • Service response marker (정확히 1개만)
[기술정보] UAVCAN DSDL 스펙

답글 남기기