문제

나는 임베디드 시스템을위한 프로그램, 특히 부트 로더를 작성하고 있습니다. 나는 C 라이브러리를 사용하여 일부 하드웨어 구성 요소와 상호 작용하고 C 또는 C ++로 작성할 수 있습니다. 내가 하나를 선택 해야하는 이유가 있습니까? C ++의 객체 지향 특징이 필요하지 않지만 더 강한 유형 시스템이 있습니다. 프로그램을 더욱 강력하게 만드는 다른 언어 기능을 가질 수 있습니까? 일부 사람들은 C ++를 피하는 것을 알고 있습니다. 큰 펌웨어 이미지를 생성 할 수는 있지만 항상 그렇지는 않습니다.

도움이 되었습니까?

해결책

이것은 대답하기위한 특히 간단한 질문이 아닙니다. 그것은 다음을 포함한 여러 요인에 따라 다릅니다.

  • 코드를 레이아웃하는 방법.
  • 대상에 사용할 수있는 C ++ 컴파일러가 있는지 여부 (및 부트 로더를 사용하려는 다른 대상).
  • 응용 프로그램에 코드 크기가 얼마나 중요한지 (우리는 다른 답변에서 제안한대로 MB가 아닌 10% 추가로 이야기하고 있습니다).

개인적으로, 나는 내 코드를 배치하는 방법으로 수업을 정말 좋아합니다. C 코드를 작성하더라도 파일 스코프 정적 함수가 "시뮬레이션"멤버 함수와 (일부) 파일 스코프 정적 변수를 "시뮬레이션"으로 멤버 변수를 "시뮬레이션"하는 모듈 식 파일의 모든 것을 유지하는 경향이 있습니다. 그러나, 기존의 내장 프로젝트의 대부분 (모두 부트 로더를 포함하여 최대 최대 128kb의 플래시이지만 일반적으로 적음은 비교적 소규모입니다. 나는 C ++로의 이동을 확실히 고려하고 있습니다.

클래스만큼 멀리 가지 않더라도 단순히 참조, 과부하 및 템플릿을 사용하는 경우 C ++에게 상당한 이점이 있습니다. 확실히, 나는 동적 메모리 할당 (신규) 사용을 포함하여 더 많은 고급 기능을 사용하지 않는 것을 중단합니다. 그런 다음 가능한 경우 임베디드 C에서 동적 메모리 할당 (Malloc 등)을 피할 것입니다.

C ++ 컴파일러가있는 경우 (G ++ 만 있더라도) 추가 유형 확인을 위해 코드를 실행하는 것이 좋습니다. 이는 코드의 문제 수를 줄일 수 있습니다. C ++ 컴파일러는 정적 분석 도구조차도 발견되지 않는 몇 가지 사항을 선택할 수 있습니다.

사람들이 C ++를 거부하는 많은 잘못된 이유에 대한 좋은 토론은 embedded.com에 대한 Dan Saks의 기사.

다른 팁

부트 로더의 경우 명백한 선택은 C, 특히 임베디드 시스템에서 C입니다. 생성 된 코드는 금속에 가깝고 디버깅하기가 매우 쉽습니다. 어셈블리에 떨어질 수 있습니다. 이는 C ++에서는주의를 기울이지 않고 빠르게 어려워집니다. 또한 C 도구 체인은 C ++ 공구 체인보다 훨씬 유비쿼터스이므로 더 많은 플랫폼에서 부트 로더를 사용할 수 있습니다. 마지막으로, 생성 된 바이너리는 일반적으로 더 작으며 C 스타일을 작성할 때 메모리를 덜 사용합니다.

객체 방향을 사용할 필요가 없다면 C. 간단한 선택을 사용하십시오. 동일한 작업을 수행하면서 더 간단하고 쉽습니다.

일부 다이 하드는 동의하지 않지만 OO는 C ++> C를 만드는 이유이며, 그 반대는 많은 상황에서도 그 반대도 마찬가지입니다.

C ++를 사용해야 할 특정 이유가 없다면 C를 사용합니다. 부트 로더의 경우 실제로 OO가 필요하지 않습니다.

작업을 수행 할 가장 간단한 도구를 사용하십시오.

C로 프로그램을 작성하는 것은 C ++로 작성하는 것과 다릅니다. C ++에서만 수행하는 방법을 알고 있다면 선택은 C ++입니다. 부트 로더를 작성하려면 코드를 최소화하는 것이 좋습니다. 따라서 표준 C ++ 라이브러리를 비활성화해야 할 것입니다. C로 쓰는 방법을 알고 있다면 C를 사용해야합니다. 그러한 종류의 작업에 더 일반적인 선택입니다.

이전 답변의 대부분은 부트 로더가 작고 간단하다고 가정합니다. 그러나 더 복잡해지면 (즉, 이더넷 포트, USB 포트 또는 직렬 포트에서로드 할 수 있어야합니다 ... 기존 코드를 닦아 내기 전에로드되는 코드를 검증해야합니다. 등) C ++를 고려할 수 있습니다.

또한 부트 로더와 응용 프로그램은 일반적으로 어느 정도의 공통 코드를 공유하므로 응용 프로그램과 동일한 언어를 사용하여 코드 공유를 용이하게하는 것을 고려할 수도 있습니다.

C 언어는 C ++보다 구문 분석하기가 쉽습니다. 이는 유효한 C와 유효한 C ++가 모두 C 프로그램으로 더 빠르게 컴파일되는 프로그램을 의미합니다. 아마도 큰 관심사는 아니지만 C ++가 아마도 과도한 또 다른 이유 일뿐입니다.

C ++ 및 Objchoose와 함께 사용하여 필요한 언어 기능을 사용하십시오. 사용중인 C ++ 추상화를 이해하는 한 여전히 출력 객체 코드를 완전히 제어 할 수 있습니다.

가상 기능을 사용하지 않으면 OO를 사용하면 여전히 잘 작동 할 수 있습니다. std :: string과 같은 값을 전달하기 위해 많은 복사가 필요한 불변의 객체 유형을 피하십시오. 그러나 런타임 성능에 실제로 영향을 미치지 않고도 템플릿과 같은 기능을 사용할 수 있습니다.

사용 ~와 함께 µClibc. 코드를 더 간단하게 만들고 발자국을 줄입니다. 다음에서 찾을 수 있습니다. www.uclibc.org.

부트 로더와 같은 특정 작업의 경우 C ++를 사용하지 않을 것입니다. 표준 C ++ 라이브러리는 부트 로더에서 원하는 것이 아니라 최소한 두 MB라고 생각합니다. C와 함께 가십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top