Libuavcan

libuavcan_data_flow

  • C++ 표준 라이브러리에 의존을 최소화하여 다양한 플랫폼에 이식할 수 있다.
  • 표준 C++ 컴파일러로 컴파일 가능하고 다양한 아키텍쳐/OS에 사용 가능
  • MIT 라이선스로 누구나 자유롭게 사용할 수 있다.
  • 2개 컴포넌트
    • Cross-platform core
      • 플랫폼에 독립적으로 UAVCAN stack을 구현한 부분으로 가장 큰 컴포넌트가 된다.
    • Platform-specific drivers
      • 특정 OS/architecture에 대해 core를 사용하는 얇은 layer.
      • driver는 C++ interface class를 통해 core와 분리시킨다.
  • libuavcan core는 C++03이나 C++11 모드로 컴파일할 수 있다. C++11의 경우 추가 기능을 사용한다.(callback의 경우 함수포인터가 아니라 std::function을 통해 구현)
  • C++03 모드에서 구현은 거의 C++ 표준 라이브러리를 사용하지 않는다. 매우 제한된 C++ 지원하는 플랫폼에서 library를 사용할 수 있다.
  • C++11 모드는 표준 라이브러리를 사용한다.(<functional>)
  • library는 컴파일 시에 사용하는 실제 C++ 표준을 검출할 수 있지만 원하면, 예전 C++ 표준을 사용하기 위해서 덮어쓸 수 있다.
  • library는 특정 platform/application에 대한 구현을 튜닝하기 위해서 preprocessor symbol을 통해 컴파일시에 설정을 할 수 있다. 하지만 대부분의 경우 필요하지 않은데, 안전한 기본 값이 있거나 각 설정 옵션에 대해서 auto-detect setting이 제공되기 때문이다.
  • 임베디드 시스템이나 real-time 시스템에 적합하도록 library를 렌더링할 수 있는 특성을 가지고 있다.
    • heap을 전혀 사용하지 않는다.
    • 기본적으로 C++ exception을 사용하지 않는다. 하지만 library는 fatal error가 발생하면 exception을 throw하기 위해서 preprocessor symbol을 통해 설정할 수 있다.
    • RTTI(run-time type identification)를 사용하지 않는다.
    • 소스코드는 MISRA C++ 2008과 부분적으로 호환된다.
    • code는 unit test를 수행하고 정적분석 도구를 이용하여 유효성을 검사한다.
[기술정보] Libuavcan

답글 남기기