C/C++ 임베디드 시스템 설계를 위한 툴

개요

임베디드 시스템 설계자들은 C와 같은 프로그래밍 언어를 사용하여 마이크로프로세서 또는 마이크로 컨트롤러 구조를 바탕으로 임베디드 시스템을 설계해왔습니다. C 언어가 보편적으로 사용됨에 따라, 다양한 라이브러리, 컴파일러, OS 등의 툴을 선택할 수 있는 토대가 마련되었습니다. FPGA(Field Programmable Gate Arrays)는 하드웨어 기술 언어(HDL)를 사용하여 재구성가능한 디지털 로직을 생성하기 위해 사용할 수 있는 임베디드 분야의 새로운 기술입니다. 그러나, 소프트웨어 엔지니어들이 하드웨어 기술 언어(HDL)를 사용하여 하드웨어를 표현하고 디지털 회로의 고성능 및 병렬 특성을 활용하기 위해서는 그들에게 익숙하지 않은 매우 다른 의미의 언어를 사용해야 합니다. 따라서, 소프트웨어 엔지니어들이 FPGA를 최대한 활용하기 위해서는 그들이 익숙하게 프로그래밍을 할 수 있는 FPGA 개발 환경을 제공해야 합니다. NI 하드웨어를 사용하는 임베디드 시스템 설계자들은 시스템을 구축할 때 다양한 프로그래밍 언어와 툴을 선택할 수 있습니다. 본 문서를 통해 NI 임베디드 시스템을 프로그래밍하는 방법과 필요한 소프트웨어를 다운로드하는 방법을 확인하십시오.

내용

NI 임베디드 시스템 구조 소개

NI 재구성가능한 I/O (RIO) 플랫폼은 Real-Time OS(RTOS)를 실행하는 마이크로프로세서와 FPGA의 두 가지의 프로그래밍 가능한 타겟으로 이루어집니다. 이로써 사용자들은 개별 작업의 중요도에 따라 FPGA와 RTOS간 코드를 분할할 수 있습니다.

그림 1. NI 임베디드 하드웨어 구조

NI 재구성가능한 하드웨어

임베디드 시스템을 설계할 때 FPGA를 사용하면 ASIC(어플리케이션 전용 집적 회로)를 맞춤 제작할 필요 없이 고성능 디지털 로직을 생성할 수 있습니다. 지금까지 FPGA 개발은 디지털 설계 엔지니어들이 작성한 VHDL 또는 Verilog와 같은 텍스트 기반의 언어를 사용하여 이루어졌습니다. 그러나 이러한 하드웨어 기술 언어는 의미가 어렵기 때문에 FPGA 디자인의 전 기능을 활용하기 어렵습니다. 따라서 임베디드 업계에서는 FPGA 디자인을 보다 추상적으로 표현하는 C언어를 하드웨어 언어로 변환해주는 툴, 또는 LabVIEW FPGA의 그래픽 프로그래밍 언어에 눈을 돌리기 시작했습니다.

그림 2. NI 임베디드 시스템 소프트웨어 구조

 

NI 임베디드 소프트웨어 구조

RTOS - LabVIEW Real-Time, C/C++, 텍스트 수학 또는 이 중 여러가지를 조합하여 임베디드 프로세서를 유연성있게 프로그래밍할 수 있습니다. 여러 소프트웨어 구조 중 선택하게 되면 LabVIEW의 기능을 활용하면서 과거 프로젝트에 사용했던 소스 코드를 통합할 수 있어 개발 시간을 줄일 수 있습니다.

FPGA - LabVIEW는 전 기능을 갖춘 프로그래밍 언어를 제공합니다. 따라서, C와 같은 텍스트 기반 프로그래밍 언어에 익숙한 사용자들도 FPGA를 활용하면서 LabVIEW를 쉽게 사용할 수 있습니다.

 

NI 임베디드 하드웨어 플랫폼 선택하기

NI RIO 하드웨어는 어떤 까다로운 제어 및 모니터링 작업도 해결할 수 있는 최고의 상용 플랫폼입니다. 플랫폼에 기반한 본 방식을 사용하면, 고유의 디자인을 개발하는 데 많은 시간과 비용을 들일 필요 없이 작은 규모의 팀만으로 혁신적인 임베디드 시스템을 구축할 수 있습니다.

NI CompactRIO

NI Compact RIO 플랫폼은 고성능 및 신뢰성이 요구되는 어플리케이션을 위해 제작된 저가형의 재구성가능한 임베디드 시스템을 제공합니다. 본 시스템은 개방형 임베디드 구조, 작은 크기, 뛰어난 견고성 및 핫스왑 가능한 산업용 I/O 모듈을 특징으로 합니다. 플랫폼은 산업용 환경에 적합한 견고한 패키지형 임베디드 시스템입니다. CompactRIO 플랫폼과 더불어, NI Single-Board RIO는 패키지가 없다는 점을 제외하고 동일한 구조를 제공합니다.

NI PXI 또는 PC 기반

PXI는 측정 및 자동화 시스템을 위한 PC 기반의 견고한 플랫폼입니다. PXI는 PCI  버스 기능을 CompactPCI의 모듈형 Eurocard 패키지와 통합하고 특화된 동기화 버스 및 주요 소프트웨어 기능을 추가하였습니다. PXI는 제조 테스트, 국방/항공, 머신 모니터링, 자동차, 산업용 테스트 등의 어플리케이션에 적합한 저가의 고성능 배포용 플랫폼입니다. 1997년에 개발되고 1998년에 도입된 PXI는 PXI Systems Alliance (PXISA)이 관할하는 개방형 업계 표준입니다.

 

FPGA 개발에 NI LabVIEW 사용

LabVIEW는 병렬성 및 데이터 흐름을 명확하게 나타내므로 FPGA 프로그래밍에 적합합니다. C 언어에 익숙한 사용자들의 경우, LabVIEW FPGA Module을 사용하면 하드웨어 디자인을 익힐 필요 없이 각 디자인에 FPGA를 활용할 수 있습니다. 또한, FPGA Interface C API는 I/O 컨트롤 및 데이터 스트리밍을 위해 FPGA와 리얼타임 어플리케이션간 통신 계층을 제공합니다. 이 API를 사용하면, LabVIEW 그래픽 기반 툴을 사용하여 FPGA를 프로그래밍하고, LabVIEW 또는 C/C++ 툴 중 선택하여 시스템 내에서 프로세서를 프로그래밍할 수 있습니다.

LabVIEW FPGA Module을 사용하면 로우 레벨 하드웨어 기술 언어 또는 보드 레벨 디자인 없이도 측정 및 컨트롤 하드웨어를 맞춤 제작할 수 있습니다. 이같이 맞춤 제작된 하드웨어를 고유 타이밍 및 트리거링 루틴, 초고속 제어, 디지털 프로토콜 인터페이싱, 디지털 신호 처리(DSP) 뿐 아니라, 고속 하드웨어 신뢰성과 높은 결정성이 요구되는 여러 어플리케이션에 사용할 수 있습니다.

LabVIEW FPGA 관련 자료

» 튜토리얼: FPGA 기술 소개: 5가지 장점
» 튜토리얼: LabVIEW FPGA 시작하기
» 다운로드: LabVIEW FPGA Module 평가판

그림 3. LabVIEW FPGA의 Timed 루프

 

C/C++ Real-Time 어플리케이션 개발

여러 소프트웨어 구조 중 선택할 때에는 최적의 소프트웨어 디자인을 구현하기 위한 프로젝트의 요구사항을 반드시 파악해야 합니다. 이 때, 소프트웨어 성능 기대치, 프로젝트 기한, 기존 코드 재사용, 팀원들의 프로그래밍 언어 사용 실력 등 여러 가지 기술적인 요소를 고려해야 합니다.

예를 들어, 시스템 설계자들은 리얼타임 어플리케이션을 프로그래밍 할 때 기존 프로젝트의 C/C++ 코드를 통합하면서 LabVIEW의 기능을 최대한 활용하여 높은 생산성을 구현할 수 있어야 합니다. 이를 위한 한 가지 방법은 C 또는 C++ 공유 라이브러리를 LabVIEW 어플리케이션에서 호출하는 것으로, 이 라이브러리는 병렬 스레드 스케쥴링을 사용합니다. 이 때, 내장된 LabVIEW 신호 처리 함수 또는 LabVIEW MathScript RT Module로 .m 알고리즘을 사용하면 개발이 더 수월합니다. 또 다른 방법으로는 어플리케이션을 개발, 디버깅한 후에 Eclipse 또는 다른 통합 개발 환경(IDE)을 사용하여 C 또는 C++로 작성된 임베디드 프로세서에 배포하는 방법으로, 이 때 FPGA 프로그래밍에 LabVIEW를 활용할 수 있습니다.

4가지 기본 설계 패턴:

그림 4. C/C++ 임베디드 소프트웨어 설계 구조

 

Real Time 및 FPGA 개발에 LabVIEW 사용

이 경우 LabVIEW Real-Time ModuleLabVIEW FPGA Module을 사용하여, Real-Time 어플리케이션 및 FPGA 코드에 하나의 LabVIEW 환경과 언어를 사용하게 되므로 개발 과정이 단순해집니다. 또한 LabVIEW는 RIO 스캔 엔진 옵션을 제공하므로, 스캔 엔진을 사용하면 FPGA 프로그래밍 필요 없이 LabVIEW Real-Time에서 각 I/O 모듈에 직접 접근할 수 있습니다.

 

LabVIEW에서 C/C++ 라이브러리 또는 어플리케이션 호출

리얼타임 어플리케이션을 프로그래밍할 때 LabVIEW를 사용하면, 내장된 신호 처리 함수 및 네트워크 통신을 활용할 수 있습니다. 또한, LabVIEW는 코드의 개별 섹션을 자동 병렬화 하므로 여러 개의 스레드를 일일이 관리하지 않아도 됩니다. LabVIEW에서 C/C++ 공유 라이브러리를 호출하거나 LabVIEW Real-Time 실행파일과 병렬로 C/C++ 어플리케이션을 실행함으로써 기존의 C 또는 C++ 코드를 재사용할 수 있습니다. 다음의 여러 방식 중 선택하여 C/C++ 공유 라이브러리를 통합하거나 외부 어플리케이션과 통신할 수 있습니다.

    • LabVIEW 라이브러리 함수 호출 노드 - 이 함수를 사용하여 LabVIEW에서 C/C++ DLL 또는 Linux 공유 라이브러리 함수를 직접 호출할 수 있습니다. [라이브러리 함수 호출 노드]를 설정하여 라이브러리, 함수, 파라미터, 노드의 반환값, 호출 형식, 함수 콜백을 지정할 수 있습니다. LabVIEW 데이터 타입은 C/C++ 라이브러리 함수에 대해 입력으로 전달되며 출력으로 반환됩니다.
    • 공유 라이브러리 반입 마법사 - 이 툴은 VI의 LabVIEW 프로젝트 라이브러리를 공유 라이브러리로 생성하므로, 함수를 보다 쉽게 사용할 수 있으며 각 사용마다 라이브러리 함수 호출 노드를 설정할 필요가 없습니다.
    • 시스템 실행 VI - 이 함수를 사용하여 LabVIEW 코드에서 다른 명령 라인 어플리케이션 또는 Linux 스크립트 파일을 실행하거나 시작할 수 있습니다. 이 VI를 사용하면, 실행 명령이 지원하는 모든 파라미터를 사용자 명령 안에 포함시킬 수 있습니다 단, NI Linux Real-Time만 이 기능을 제공합니다.
    • Localhost 통신 - 병렬 프로그램은 localhost TCP/IP 함수를 사용하여 서로 통신하여 데이터를 주고 받습니다.

NI 임베디드 하드웨어를 위한 C/C++ 코드를 컴파일하기 위해 하단의 C/C++ 개발 툴 섹션을 참조하여 본인의 하드웨어에 맞는 C/C++ 툴체인을 검색하십시오.

노트: 이 중 일부 구조는 NI Linux Real-Time에서만 지원됩니다. 어플리케이션을 LabVIEW Real-Time 어플리케이션과 병렬 실행하거나 시스템 실행 VI를 사용하는 기능은 NI Linux Real-Time을 실행하는 임베디드 타겟에서만 지원됩니다.

 

C/C++ Real-Time 어플리케이션에서 LabVIEW 라이브러리 호출

주요 Real-Time 어플리케이션이 C 또는 C++로 작성된 경우, LabVIEW 공유 라이브러리를 만들고 C/C++ 코드에서 이를 호출하면, 신호 처리에 LabVIEW 분석 함수를 사용할 수 있습니다.

» 외부 어플리케이션에 사용하기 위해 LabVIEW 공유 라이브러리 만드는 방법 알아보기

데이터를 FPGA에 전달하고 FPGA를 제어할 때 충돌을 피하기 위해, LabVIEW 또는 C/C++ 코드에서 FPGA에 대한 하나의 참조를 여십시오. 이 경우, FPGA 제어 및 데이터 전달은 섹션 4에서 언급된 FPGA Interface C API를 사용하여 C/C++ 프로그램에서 처리됩니다. NI 임베디드 하드웨어를 위한 C/C++ 코드를 컴파일 하기 위해, 하단의 C/C++ 개발 툴 섹션을 참조하여, 본인의 하드웨어에 맞는 C/C++ 툴체인을 검색하십시오.

 

C/C++ Real-Time 어플리케이션

또한, 어플리케이션을 개발, 디버깅한 후에 Eclipse 또는 다른 통합 개발 환경(IDE)을 사용하여 C 또는 C++로 작성된 임베디드 프로세서에 배포하면, FPGA 프로그래밍에 LabVIEW를 활용하면서 개발할 수 있습니다. FPGA Interface C API는 I/O 컨트롤 및 데이터 스트리밍을 위해 FPGA와 리얼타임 어플리케이션간 통신 계층을 제공합니다. 이 API는 FPGA 컨트롤, 인디케이터, DMA FIFO, 인터럽트 및 배열에 접근하기 위한 인터페이스를 제공합니다.

모든 NI 임베디드 제품에 사용 가능한 호환되는 C/C++ 컴파일러 및 툴체인이 있습니다. 하단의 C/C++ 개발 툴 섹션을 참조하여 사용중인 NI 임베디드 하드웨어에 맞는 C/C++ 툴체인과 개발자 튜토리얼을 확인하십시오.

 

FPGA Interface C API 사용하기

C/C++ 개발자들은 FPGA Interface C API를 사용하면, 임베디드 컨트롤 및 수집 어플리케이션에 LabVIEW FPGA 및 NI 임베디드 하드웨어를 편리하게 활용할 수 있습니다. FPGA Interface C API를 사용하면, 그래픽 기반의 LabVIEW를 사용하여 NI 하드웨어에서 FPGA를 프로그래밍하고, Eclipse, Wind River Workbench, 또는 GNU Compiler Collection (GCC) 툴체인과 같은 C/C++ 툴을 사용하여 RTOS를 프로그래밍할 수 있습니다.

FPGA Interface C API는 여기에서 무료로 다운로드할 수 있습니다. API는 I/O 컨트롤 및 데이터 스트리밍을 위해 FPGA와 리얼타임 어플리케이션간 통신 계층을 제공합니다. LabVIEW FPGA 코드가 개발되면 헤더 파일이 생성됩니다. 헤더 파일은 FPGA 컨트롤, 인디케이터, DMA FIFO, 인터럽트 및 배열에 대한 C 참조를 제공합니다. FPGA Interface C API는 RIO 스캔 엔진에 대한 인터페이스를 제공하지 않습니다.

다음은 개발 과정을 단계별로 설명합니다.

  1. LabVIEW FPGA VI를 개발하고 컴파일합니다. 이 때 비트파일이 생성됩니다.
  2. FPGA Interface C API generator를 시작합니다. 비트 파일에 기반하여 C 헤더 파일이 생성됩니다.
  3. C/C++ 어플리케이션에 헤더 파일을 포함합니다.
  4. 어플리케이션을 생성하여 임베디드 타겟에 배포합니다.

 

FPGA Interface C API 관련 자료

» 다운로드: FPGA Interface C API
» 사용자 매뉴얼: FPGA Interface C API 도움말

 

NI CompactRIO C/C++ 개발 툴

CompactRIO 임베디드 시스템은 최신 임베디드 프로세서 및 RTOS 기술을 통합합니다. NI RIO 제품군은 x86 및 PowerPC 프로세서를 망라하며 현재 ARM 기반 시스템도 포함합니다. 본 제품들은 여러 C/C++ 컴파일러 및 툴체인과 연동됩니다. 어떤 프로세서 기술이 본인의 임베디드 하드웨어와 연동되는지 확인하기 위해 기술지원 데이터베이스 문서 또는 그림 5를 참조하십시오.


그림 5. CompactRIO C/C++ 개발 툴

 

ARM 및 x86에 기반한 NI Linux Real-Time OS


NI는 Linux에 기반한 RTOS인 NI Linux Real-Time을 개발하기 위해 투자를 확대하였습니다. 본 기술을 통해 더 개방적인 CompactRIO 플랫폼을 구현하게 되었으며, 이로써 사용자들은 LabVIEW 코드 뿐 아니라 커뮤니티를 통해 지원되는 Linux 라이브러리를 사용할 수 있게 되었습니다. 또한, Linux OS를 사용하면 기존의 C/C++ 코드를 보다 쉽게 포팅할 수 있으며, 개발자들은 Eclipse 또는 선호하는 IDE를 사용하여 코드를 개발, 디버깅하고 CompactRIO 타겟에 배포할 수 있습니다.

NI Linux Real-Time에 기반한 CompactRIO 디바이스에 대해 더 알아보기


필요한 소프트웨어 툴체인
  1. RTOS— 다음 중 최소 한 가지:
    1. LabVIEW Real-Time Module
    2. Eclipse (ARM 컴파일러용 GNU/Linux 포함),
    3. GNU/Linux 컴파일러:
  2. RTOS-FPGA 통신 계층—FPGA Interface C API (버전 13.0 또는 상위 버전)
  3. FPGA 개발— 다음의 모든 사항 필수:
    1. LabVIEW (Full 또는 상위 버전)
    2. LabVIEW FPGA Module
    3. NI-RIO 디바이스 드라이버 (2013 버전 또는 상위 버전)

개발자를 위한 자료

» 튜토리얼: NI Linux Real-Time, Eclipse Edition용 C/C++ 개발 툴 사용 시작하기
» 튜토리얼: NI Linux Real-Time를 실행하는 CompactRIO에서 LabVIEW에 C 코드 통합하기
» 예제: NI Linux Real-Time 및 Eclipse용 FPGA Interface C API 예제
» 사용자 그룹: NI Linux Real-Time 커뮤니티

 

VxWorks Real-Time OS를 실행하는 PowerPC 버전


CompactRIO 및 NI Single-Board RIO의 PowerPC 버전은 Wind River VxWorks RTOS를 실행합니다. 바이너리(2진수)는 PowerPC PPC603 구조에 컴파일되고 표준 VxWorks 라이브러리에 연결된 모든 툴체인을 사용하여 생성됩니다. NI는 VxWorks용 바이너리를 개발할 때 고급 디버깅 기능, 종합 개발 환경 및 기술 지원을 제공하는 Wind River Workbench를 사용할 것을 권장합니다.


필요한 소프트웨어 툴체인
  1. RTOS— 다음 중 최소 한 가지:
    1. LabVIEW Real-Time Module 
    2. GCC
    3. Wind River Workbench
  2. RTOS-FPGA 통신 계층—FPGA Interface C API
  3. FPGA 개발— 다음의 모든 사항 필수:
    1. LabVIEW (Full 또는 상위 버전)
    2. LabVIEW FPGA Module
    3. NI-RIO 디바이스 드라이버

개발자를 위한 자료

» 튜토리얼: 완벽 가이드: C/C++로 NI VxWorks Real-Time 컨트롤러 프로그래밍
» 튜토리얼: cRIO-901x 및 기타 VxWorks 타겟을 위한 공유 라이브러리 개발하기

 

Phar Lap Real-Time OS를 실행하는 x86 버전


CompactRIO 하드웨어의 x86 버전은 Phar Lap RTOS를 실행합니다. NI는 본 임베디드 타겟을 위한 C/C++ 바이너리를 생성할 때 Visual C++ 2003 및 2008 컴파일러를 사용할 수 있음을 확인하였습니다.


필요한 소프트웨어 툴체인
  1. RTOS— 다음 중 최소 한 가지:
    1. LabVIEW Real-Time Module
    2. Visual C++
  2. RTOS-FPGA 통신 계층—FPGA-Interface C API
  3. FPGA 개발— 다음의 모든 사항 필수:
    1. LabVIEW (Full 또는 상위 버전)
    2. LabVIEW FPGA Module 
    3. NI-RIO 디바이스 드라이버

 

NI PXI 또는 PC 기반 C/C++ 개발 툴

NI PXI 컨트롤러에는 FPGA가 내장되어 있지 않습니다. 플랫폼은 전적으로 선택이 가능하므로, 각 어플리케이션에 맞는 섀시, 컨트롤러 및 모듈을 선택할 수 있습니다. 여러 PXI R 시리즈 FPGA 기반 모듈과 수 백 종류의 기타 PXI 하드웨어 모듈 중 선택하여 시스템을 구축할 때 최상의 유연성을 경험할 수 있습니다.

NI는 NI LabWindows™/CVI(ANSI C IDE)를 제공하여, x86 기반 PXI 및 PC 기반 임베디드 시스템의 개발을 간소화합니다. LabWindows/CVI는 C++ 컴파일러 또는 라이브러리를 포함하지 않습니다. C++ 개발자들은 선호하는 IDE를 사용하여 NI PXI용 어플리케이션 또는 PC 어플리케이션을 개발할 수 있습니다.

그림 7. PXI 또는 PC 기반 C/C++ 개발 툴

LabWindows/CVI를 사용하면, 통합된 드라이버 API, I/O 설정 어시스턴트, 측정 및 분석 라이브러리, 종합 디버깅 및 코드 최적화 툴을 사용하여 개발 시간을 단축할 수 있습니다.

LabWindows/CVI 어플리케이션에 기존의 C 소스 코드를 재사용할 수 있고 LabWindows/CVI Real-Time Module을 사용하여 IDE를 벗어나지 않고 원격 Real-Time 타겟에서 배포 및 디버깅을 할 수 있습니다. NI는 모든 PXI 및 PC 하드웨어를 위한 직관적인 고성능 드라이버 API를 제공하며, I/O 컨트롤 및 데이터 스트리밍을 위한 FPGA Interface C API를 제공합니다.


필요한 소프트웨어 툴체인
  1. RTOS— 다음 중 최소 한 가지:
    1. LabVIEWLabVIEW Real-Time Module
    2. LabWindows/CVI LabWindows/CVI Real-Time Module
  2. Windows—LabVIEW, LabWindows/CVI for ANSI C, 또는 기타 C/C++용 IDE
PXI R 시리즈 FPGA 하드웨어 사용시 추가 소프트웨어 필요
  1. 프로세서-FPGA 통신 계층—FPGA-Interface C API
  2. FPGA 개발—LabVIEW FPGA Module

개발자를 위한 자료

» 제품 페이지: LabWindows/CVI에 대해 더 알아보기
» 튜토리얼: LabWindows/CVI로 R 시리즈 FPGA 인터페이스 호스트 어플리케이션 구축하기
» 다운로드: LabWindows/CVI IDE 평가판 

 

The mark LabWindows is used under a license from Microsoft Corporation. Windows is a registered trademark of Microsoft Corporation in the United States and other countries.