PIC 코딩을 위해 C ++을 사용할 수 있습니까? C ++을 사용하지 못하게하는 하드웨어 제한이 있습니까? C 대신 C ++를 사용할 때 생성 된 .hex 파일의 크기와 프로그램 실행 시간이 얼마나 증가합니까? 현재 PIC에 C ++을 사용하는 것이 실제로 가능합니까? 이에 대한 향후 계획이나 지속적인 개발이 있습니까?
PIC 코딩을 위해 C ++을 사용할 수 있습니까? C ++을 사용하지 못하게하는 하드웨어 제한이 있습니까? C 대신 C ++를 사용할 때 생성 된 .hex 파일의 크기와 프로그램 실행 시간이 얼마나 증가합니까? 현재 PIC에 C ++을 사용하는 것이 실제로 가능합니까? 이에 대한 향후 계획이나 지속적인 개발이 있습니까?
답변:
PIC 코딩을 위해 C ++을 사용할 수 있습니까?
예, 지금 가능합니다. dsPIC의 경우 IAR Systems C ++ 컴파일러가 있습니다 (매우 오래되었지만 지원되지는 않음).
또 다른 옵션은 C ++에서 C 로의 변환기를 사용하는 것입니다. 사전 빌드 단계를 사용하여 C ++를 C로 변환 한 다음 C를 일반 C 컴파일러에 제공하십시오. LLVM 또는 Comeau의 C ++ 컴파일러 를 살펴보십시오 . Comeau는 $ 50에 불과하지만 전체 툴체인과 라이브러리가 제대로 작동하려면 약간의 노력이 필요할 것입니다.
C ++을 사용하지 못하게하는 하드웨어 제한이 있습니까?
짧은 대답입니다. 하드웨어 제한이 없습니다. 긴 대답으로 C ++은 힙 및 / 또는 스택을 사용하도록 권장합니다. RAM이 제한된 소형 MCU는 어려움을 겪습니다.
힙 / 스택으로 어려움을 겪는 이유는 무엇입니까? 두 가지 이유 : A) 많은 MCU는 RAM이 제한되어있어 힙에는 충분하지 않으며 스택에는 거의 없습니다. B) 많은 MCU가 포인터를 제대로 처리하지 않으므로 스택에서 변수를 사용하면 실제로 성능이 저하됩니다.
사람들이 MCU에서 C ++ 사용에 대해 물을 때 C ++과 C를 비교하는 것이 건설적인 것으로 나타났습니다. MCU에서 C에 대해 똑같은 질문이 계속되었습니다. 사람들은 그 아이디어를 곤경에 빠뜨렸다. 256 바이트 RAM MCU의 고급 언어 불가능한. 그러나 이제 우리는 그것이 가능하다는 것을 알고 있습니다. PIC12에 대해 C를 작성했습니다. 문제 없어요. A) 소프트웨어 개발자가 약간 조심해야한다는 것을 알고 있기 때문에 가능합니다 : malloc () 등을 사용하지 마십시오 .B) 컴파일러는 특히 MCU 용으로 작성되었습니다. 컴파일러는 메모리 할당에 특히주의를 기울이고 힙을 만들려고 시도하지 않으며 스택을 만들지 않을 수 있습니다. 일부 C 컴파일러는 단순히 스택이 필요한 재진입 (재귀) 코드를 작성하지 못하게합니다.
MCU에 C를 작성할 수 있다는 것을 알고 MCU에 C ++를 작성하는 문제에도 같은 대답이 적용됩니다. 컴파일러가 대상 장치의 제한 사항을 이해하고 사용자가 언어도 이해하는 한 실제로 문제는 없습니다. C ++에서는 사용한만큼만 비용을 지불합니다. C를 사용하면 얻을 수있는 정확한 asm 출력을 생성하는 C ++ (객체와 모든 것 포함)을 작성하는 것이 완벽하게 가능합니다.
이제 PIC32는 C ++에 대처할 수 있습니다. 최대 64kB RAM을 가지고 있으며 올바르게 성장한 32 비트 프로세서 인 MIPS 코어를 기반으로합니다. PC뿐만 아니라 포인터와 스택도 처리 할 수 있습니다. 실제로, MIPS를 기반으로하는 PC가 있습니다 (적어도 그랬습니다).
안타깝게도 C ++을 둘러싼 오해가 많이 있습니다. 경험이 많은 코더조차도 언어가 어떻게 작동하는지 전혀 모른다. C ++이 임베디드 CPU에 적합한 이유에 대한 내 답변 을 참조하십시오 .
C 대신 C ++를 사용할 때 생성 된 .hex 파일의 크기와 프로그램 실행 시간이 얼마나 증가합니까?
내가 말했듯이, 차이가 없을 수 있습니다. Bjarne Stroustrup은 다수의 C / C ++ 컴파일러를 비교하여 여러 작업의 시간 및 공간 성능을 비교했습니다. 결과는 다양했습니다. 어떤 경우에는 C ++이 느리고 커졌습니다. 어떤 경우는 느리고 작거나 빠릅니다. 더 빠르거나 작습니다! 따라서 귀하의 질문에 대한 답변은 컴파일러에 크게 의존한다는 것이지만 일반적으로 전혀 차이가 없습니다. 자세한 내용 은 C ++ 성능에 대한 기술 보고서를 참조하십시오.
이에 대한 향후 계획이나 지속적인 개발이 있습니까?
몰라 Microchip C32 컴파일러가 오픈 소스이며 소스를 다운로드 할 수 있다는 것을 알고 있습니다. 또한 내가 일한 누군가가 실제로 온라인에서 몇 가지 지침을 발견하고 컴파일러가 C ++ 코드를 컴파일하도록했습니다. 그러나 그는 적절한 툴 체인으로 나를 설정하기 전에 회사를 떠났습니다.
최신 정보
Microchip은 이제 PIC32 범위의 임베디드 MCU에 사용할 수 있는 C ++ 컴파일러를 보유하고 있습니다.
C 대신 C ++를 사용할 때 생성 된 .hex 파일의 크기와 프로그램 실행 시간이 얼마나 증가합니까?
사용하는 기능에 따라 다릅니다. 핵심 객체 지향 기능 (클래스 + 메소드)을 사용하는 경우 효과가 거의 없을 것입니다 (변형 된 변수 / 함수 이름이 길어 기호 테이블이 약간 증가 할 수 있음). 좋은 컴파일러로 템플릿을 많이 추가해서는 안됩니다.
모든 것을 끝내고 표준 템플릿 라이브러리와 같은 것들을 가져오고 동적 메모리 할당 및 예외를 사용하면 코드가 부풀려 질 수 있습니다.
그림에 대한 C ++ 컴파일러가 이미 있습니다 (예 : http://www.sourceboost.com/Products/BoostCpp/Overview.html).
나는 이것을 사용하지 않았으며 존재하는 것 외에는 아무것도 모른다 ...
질문을 다소 일반화하면 MMU (메모리 관리 장치)가 포함 된 임베디드 시장 용으로 제작 된 ARM 프로세서가 있습니다. 메모리 크기 및 할당으로 인해 Java 및 c ++와 같은 언어는 임베디드 선택이 잘못되었습니다. 임베디드 프로세서가 더욱 빠르고 강력 해지고 메모리가 고밀도화되고 저렴 해짐에 따라 임베디드 엔지니어가 선택할 수있는 언어 선택이 크게 달라집니다. MMU 및 64G 플래시 카드가 장착 된 32 비트 600MHz ARM 프로세서는 c ++ 응용 프로그램의 훌륭한 후보입니다. 기존 임베디드 프로세서의 정의에 맞는지 여부는 또 다른 문제입니다.
아마 그렇습니다. 그러나 당신은 어쨌든 ... C는 임베디드 언어이며 C ++를 사용할 때의 이점은 없습니다. 오히려 C의 장점은 임베디드에 대한 C ++의 장점보다 훨씬 큽니다. 시간을 낭비하지 마십시오.