임베디드 개발 C vs C++ 질문입니다.

   조회 12028   추천 0    

안녕하세요 얼마전에 라즈베리 관련하여 질문 올리고 다시 질문드립니다.


현재 라즈베리호환보드(오랜지파이 H3) 에서 무선통신모듈(Zigbee 등)을 사용하여 시제품 개발을 진행중입니다.

지난 번 질문처럼 개발언어로 C++ 을 사용하려는데.. 검색을 하다보니.. C++  은 C 에 비해 기능이 많고 방대해서 임베디드에는 C 를 더 많이 사용한다는 얘기를 들었습니다.

그래서 갑자기 걱정이 드는데요.. 주된 이유가 임베디드 장치는 경우에 따라 리소스( cpu, ram 등)가 매우 제한적이라 가벼운 C를 사용하는 것 같은데요..


실제로 임베디드 개발에서 C++ 을 사용하는 경우나 경험자분 계시면 대략 어느정도의 차이나 제약이 있는 지 궁금합니다. 

특히 boost / stl 등 c++ 라이브러리를 사용하는데 있어서 문제가 없는지 ..

약간 구체적인 질문인데.. 마땅히 올릴 곳이 없어서 여기에 질문드립니다. ^^ 


감사합니다.~

서버/하드웨어에 관심이 많습니다
짧은글 일수록 신중하게.
DAP박인호 2017-08
옛날 생각나게 하는 질문이네요.
HW제어에 관심이 많아 학부때
관련 C 프로그램밍을 배웠었는데
느낌은 C를 가장한 어셈블러
     
안규민 2017-08
저는 C는 거의 모르고.. C++도 초보수준이라, 그나마 객체지향으로 하려고 C++ 을 하려고 하는데, 최신 C+11 은 뭔가 제가 모르는게 많네요 ㅠ
아싸조쿠나 2017-08
대충 경험으로 이야기 드리면 그냥 데모에 필요한 예제소스나 오픈소스가 C면 C로 C++이면 C++로 했던거 같네요.
     
안규민 2017-08
통신 관련 오픈소스이고 C/C++ 모두 가능한데.. 저는 가급적 C++ 을 사용하려고 합니다.
이장원 2017-08
PC가 Raspberry Pi 보다 느리던 몇 십 년 전에 하던 말이 계속 전해지는 것 같습니다.

메모리 누수나 보안 문제를 최소화하려면 C++ 최신 규격과 라이브러리를 쓰는 편이 좋습니다.
     
안규민 2017-08
답변 감사합니다. boost 라이브러리를 사용하려고 하는데.. 임베디드에 사용해도 될런지.. 고민중입니다.
          
이장원 2017-08
많이들 사용하는 것으로 알고 있습니다.
안규민 2017-08
답변 감사합니다.. 예제소스는 C/C++ 다 존재하는데.. 개발타겟 보드가 아직 미확정인 상황에서 무작정 C++ 을 사용해도 문제가 없을지 고민중입니다.
     
pilsuni 2017-08
하드웨어 프로그램의 경우에는 원하는 기능이 샘플로 존재하는 언어로 개발하는게 가장 좋습니다 ^^
박문형 2017-08
저야 프로그램에 피읍만 나와도 모르는 사람입니다만..

자기가 자신있게 다룰 수 있는 언어로 제작하는게 좋아 보입니다..
     
안규민 2017-08
둘 다 자신이 없는게 문제입니다. ㅠㅠ
pilsuni 2017-08
하드웨어(라즈베리파이, 특정 MCU)에 의존적인 프로그램은 해당 하드웨어가 지원해주는 언어를 사용할 수 밖에 없습니다. 선택권한이 없어요. 원하는 기능이 구현된 샘플언어를 사용합니다. ^^

하드웨어에 의존적인 경우, 프로그램에 동영상을 재생하는 기능을 넣었는데, 해당 하드웨어에서 동영상 재생 기능을 지원하지 않는다면, 동영상은 재생이 않된다고 봐야 겠죠...(예전 아이폰을 생각하시면 됩니다. mpeg4 디코더만 하드웨어에 넣어두고, 다른 형식의 동영상은 재생을 지원하지 않았지요)
물론, 하드웨어가 지원하지 않더라도, 기능은 구현할 수 있습니다. 하지만, 하드웨어가 지원하는 기능을 구현할 때 4줄의 명령어로 되는것이 지원하지 않는 하드웨어에서는 2K~3K정도의 라인으로 구현된다고 생각해 보세요. 효율적이지 않습니다.(컴파일된 어셈레벨에서 50줄과 1백만줄의 차이가 날 수 있습니다. 기능은되나 느릴확율이 상당히 높습니다.)

그리고, 컴파일이 정상적으로 되고, 정상적인 실행이 되는지 샘플을 컴파일하여 확인하고, 하드웨어의 한계성을 확인해 볼 필요가 있습니다.
(책자에 된다는 기능이 실제로 작업시 안되는 경우가 허다하며, 제조사에 따지다보면 펌웨어(또는 OS) 업그레이드 후, 지원하지 않는다,,, 이런 답변도 흔하게 듣게됩니다.)
     
안규민 2017-08
답변 감사합니다. 하드웨어가 우선 정해져야 하는 건 분명하군요.. 많은 도움이 되었습니다.
스톤콜드 2017-08
제가 개발한건 아니고 포그해서 라즈베리파이에 올려서 쓰는 C++프로그램이 있습니다 (boost + Wt)
컴파일시간은 더럽게 오래걸리고 의존성으로 인한 사이즈는 크지만 성능은 괜찮습니다
     
안규민 2017-08
정보 감사합니다~ 한번 확인해보겠습니다 ~
임베디드도 그 규모에 따라 다릅니다. glibc 기반의 full functional 시스템이면 STL 써도 문제 없고요. 메모리나 스토리지 footprint를 최대한 줄여야 하는 시스템이면 그냥 C로 가시는게 안전합니다.
     
안규민 2017-08
답변 감사합니다. 아직 규모를 확인할 수 있는 단계는 아니라서.. 당장은 라즈베리 호환보드를 사용중입니다.
차후에 양산단계에서 디테일한 칩셋 등을 선정하기 전에 다시 한번 확인해야 할 듯 합니다.
감사합니다.
오홍식 2017-08
C가 C++보다 가볍다라는 얘기가 있던 시점은 아주 오래전 입니다..
같은 수준으로 구현했을 때 OpenGL이 D3D보다 성능이 떨어진다던지, 전자회로를 만들때 0.1uF을 쓰지 않으면 무식하다는등
왜? 왜 굳이 그 용량인가 라고 질문하면 제대로 설명하는 사람을 찾기 힘든 그런 부류입니다.
그리고 STL과 잘 작성된 단순 C를 비교하면 예외나 범위 구분등이 들어가 있는 STL이 느린건 당연하지만 이건 언어의 차이가 아니라 안정성을 보장하기 위한 확인등이 들어간 것 입니다. MS의 STL 조금만 뜯어보면 바로 확인 가능한 초보적인 내용입니다.
C++11이 구식이 되어가는 지금시점에서는 오히려 C++만으로 작성하라, 또는 C로만 작성하라는 요구사항을 맞출수 있는 엔지니어를 찾기도 힘들겁니다..
다만, STL과 BOOST는 조금 애매한것이.. STL의 성능는 C++/C로 갈리는것이 아니라 컴파일러와 그 런타임을 제공하는 쪽의 능력에 달려있고
BOOST 역시 언어의 차이가 아니라 그 라이브러리를 제공하는 쪽의 능력에 따라 달라집니다.
인스트럭션 수준까지 병목 찾아 분석하고 함수포인터에 어셈등을 자유롭게 쓰면서 타겟 시스템에 맞춰 최적화를 할 수 있는 수준의 고수가 하는 말이 아니라면
더해서, 주 목적이 최적화가 아니라 구현 자체라면, 굳이 귀 기울여 들을 필요는 없을것 같습니다.

마지막으로, 시스템을 완전히 파악하고 있는 경우라면 C건 C++이건 표준으로 잘 작성한것이 STL등으로 만든것 보다 성능은 좋습니다. 임베디드라면 그 차이는 더 큽니다.
STL등, 소위 라이브러리는 일반적인 경우들에 대해 검토하는 루틴등이 들어가 있지만, 정확히 고려되어 예외 판별을 삭제 가능하다면 그 판별에 걸리는 시간만큼 리소스를 절약할수 있는건 당연합니다.
     
안규민 2017-08
답글이 늦었습니다. 답변 감사합니다.
C/C++ 의 차이는 거의 없다고 봐도 무방하군요.. 컴파일러나 런타임은 아직 타겟보드 스펙이 확정이 되지 않은 상태라.. 우선은 시중의 arm7 기반 보드로 개발을 진행중입니다.
나중에 비용문제만 발생하지 않으면 비슷한 사양으로 결정날 듯 한데요.. 아직은 거의 실험적인 단계라서..
다시 한번 답변 감사드립니다~


QnA
제목Page 1884/5725
2014-05   5240364   정은준1
2015-12   1765798   백메가
2017-08   3545   쭈니쭈누아빠
2017-08   4413   일론머스크
2017-08   3283   두cpu
2017-08   16794   김건우
2017-08   3745   Sakura24
2017-08   3718   에코리터
2017-08   5148   자연인
2017-08   3565   김윤술
2017-08   3582   에르티
2017-08   12029   안규민
2017-08   3993   witbox
2017-08   6001   정우람나무
2017-08   3876   winner712
2017-08   3573   오현골
2017-08   3261   하셀호프
2017-08   8725   미수맨
2017-08   3813   코쿠
2017-08   3285   김건우
2017-08   3919   씨형
2017-08   3272   이대겸