Pergunta

No seguimento este comentário da questão Escrevendo firmware: nível de montagem ou de alta :?

Ao compilar o código C ++ para o href="http://arduino.cc" rel="nofollow noreferrer"> Arduino plataforma , você pode usar funções virtuais, exceções, etc? Ou será que você quer (tem que) usar um subconjunto de C ++ (como descrito em o comentário )?

Quaisquer outras advertências durante a programação para a plataforma Arduino?

Foi útil?

Solução

O ambiente Arduino usa a versão AVR do toolchain GCC. O código é compilado como C ++, assim você pode usar classes. funções virtuais são possíveis; os vtables será armazenado na seção .data e ter os endereços corretos. Na verdade, a classe base de impressão utiliza funções virtuais para adaptar os vários métodos "Imprimir" para os diferentes tipos de saída.

As excepções não são suportados por causa de razões de espaço de código. O ambiente Arduino passa "-fno-exceções" à linha de comando do compilador. Consulte fonte para verificação dessas .

Os modelos são suportados. Por exemplo, esta técnica operador de inserção de fluxo sem custo funciona bem usando um modelo simples e operador de linha.

Outras dicas

Os usos de software Arduino AVR-gcc para compilar esboços. As seguintes limitações foram adquiridos a partir da avrlibc FAQ (Posso usar C ++ em ? o AVR) :

Suportados

  • funções virtuais
  • construtores e destruidores (incluindo os globais)

Não suportado

  • funções padrão C ++, classes, e classes de modelo (mas ver esta porta de uClibc ++ para Arduino )
  • operadores new e delete (tentar usá-los fará com que o vinculador a queixar-se referências externas indefinidos). Isso significa que os objetos só podem ser criados na pilha. Se a alocação de memória dinâmica é necessária deve ser implementado usando malloc() e free() de tipos C
  • Exceções. Desde exceções são ativadas por padrão no frontend C ++, eles precisam expressamente a ser desligado usando -fno-exceptions nas opções do compilador. Isso é feito automaticamente pelo Arduino IDE quando se lança avr-gcc

Outras questões

  • Alguns dos arquivos fornecidos incluem não são C ++ seguro, ou seja, eles precisam ser envolvido com
    extern "C" { . . . }

A usabilidade de um recursos não se limita pela plataforma, mas sim o compilador que você está usando.

Gostaria de verificar a documentação do compilador sobre o que recursos de linguagem são suportadas.

Comeau computação tem um C ++ para compilador C que suporta todos os recursos de C ++. Não apenas funções virtuais, ou exceções, mas também de exportação. Você precisaria chamar Comeau para obtê-lo para direcionar a linguagem Arduino, mas não deve ser muito difícil.

A documentação diz:

A linguagem Arduino é baseada em C / C ++ e suporta todas as construções C padrão e alguns recursos C ++.

Ele não diz nada sobre as funções virtuais que posso encontrar.

Eu tentei um programa simples e ele compila bem. Eu não testei-o em Arduino hardware embora.

EDIT:. Eu também tenho as exceções não testadas

Eu usei g ++ com este Makefile e começou com este código . resíduos C ++ algum espaço. Mas protothreads são muito legal para não usar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top