문제

후속 조치 이 의견 질문에서 펌웨어 작성 : 어셈블리 또는 높은 수준?:

C ++ 코드를 컴파일 할 때 아르두노 플랫폼, 가상 함수, 예외 등을 사용할 수 있습니까? 아니면 C ++의 하위 집합을 사용하려면 ( 댓글)?

Arduino 플랫폼에 대한 프로그래밍시 다른 경고가 있습니까?

도움이 되었습니까?

해결책

Arduino 환경은 GCC 툴체인의 AVR 버전을 사용합니다. 코드는 C ++로 컴파일되므로 클래스를 사용할 수 있습니다. 가상 기능이 가능합니다. vtables는 .data 섹션에 저장되며 올바른 주소가 있습니다. 실제로 인쇄 기본 클래스는 가상 함수를 사용하여 다양한 "인쇄"방법을 다른 출력 유형에 적응시킵니다.

코드 공간 이유 때문에 예외는 지원되지 않습니다. Arduino 환경은 "-fno-exceptions"를 컴파일러 명령 줄로 전달합니다. 보다 출처 이것의 검증을 위해.

템플릿이 지원됩니다. 예를 들어, 이 무료 스트림 삽입 연산자 기술 간단한 템플릿과 인라인 연산자를 사용하여 잘 작동합니다.

다른 팁

Arduino 소프트웨어는 AVR-GCC를 사용하여 스케치를 컴파일합니다. 다음과 같은 한계가 제공되었습니다 AVRLIBC FAQ (AVR에서 C ++를 사용할 수 있습니까?):

지원

  • 가상 기능
  • 생성자 및 소멸자 (글로벌 포함)

지원되지 않습니다

  • C ++ 표준 기능, 클래스 및 템플릿 클래스 (그러나 Arduino 용 UCLIBC ++의 항구)
  • 운영자 new 그리고 delete (이를 사용하려고하면 링커가 정의되지 않은 외부 참조에 대해 불만을 제기 할 수 있습니다). 이것은 객체가 스택에서만 만들 수 있음을 의미합니다. 동적 메모리 할당이 필요한 경우 사용하여 구현해야합니다. malloc() 그리고 free()C 유형
  • 예외. C ++ 프론트 엔드에서 기본적으로 예외가 활성화되므로 사용을 사용하여 꺼야합니다. -fno-exceptions 컴파일러 옵션에서. 이것은 Arduino IDE가 출시 될 때 자동으로 수행됩니다. avr-gcc

다른 문제

  • 제공된 일부는 C ++ 안전하지 않습니다. 즉, 포장해야합니다.
    extern "C" { . . . }

기능의 유용성은 플랫폼에 의해 제한되지 않고 사용중인 컴파일러에 의해 제한됩니다.

지원되는 언어 기능에 대한 컴파일러 문서를 확인하겠습니다.

Comeau 컴퓨팅 모든 C ++ 기능을 지원하는 C ++ to C 컴파일러가 있습니다. 가상 함수 또는 예외뿐만 아니라 수출. Arduino 언어를 목표로하려면 Comeau에 전화해야하지만 너무 어렵지 않아야합니다.

문서는 다음과 같이 말합니다.

Arduino 언어는 C/C ++를 기반으로하며 모든 표준 C 구성 및 일부 C ++ 기능을 지원합니다.

내가 찾을 수있는 가상 함수에 대해 아무 말도하지 않습니다.

간단한 프로그램을 시도했는데 잘 컴파일합니다. 그래도 Arduino 하드웨어에서 테스트하지 않았습니다.

편집 : 예외도 테스트하지 않았습니다.

나는 g ++를 사용했다 이것은 makefile입니다 그리고 시작했습니다 이 코드. C ++는 공간을 낭비합니다. 그러나 protothreads는 사용하지 않기에는 너무 시원합니다.

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