C ++ vs. a linguagem Arduino?

Quais são as vantagens de cada linguagem ao usar o Arduino?

Estou pensando que esta é uma boa pergunta geral, mas eu “Vou acrescentar um pouco sobre por que estou perguntando se alguém quer me dar uma dica.

Tenho experiência em linguagens pré-processadas como JavaScript, PHP, e mexi em linguagens como Java e Visual Basic. Em outras palavras, eu conheço técnicas de programação e orientação a objetos clássica e prototípica, mas nada sobre comunicação direta com o hardware.

Estou fazendo um octocóptero e estou pensando que uma abordagem orientada a objetos será a mais fácil. (O software terá muitos recursos …) No entanto, nunca escrevi em C ++.

Já que este é um Q & Um site que “supostamente para ajudar os outros, apenas a questão geral apresentada no início é de muita importância, mas eu agradeceria qualquer comentário sobre minha situação.

Comentários

  • Evite o IDE Arduino, pois ele não merece seu nome de IDE, ele é até um editor muito pobre: pode ser bom para iniciantes e esboços simples, mas deve-se ir rapidamente para algo melhor.
  • Esta é uma análise bastante sucinta do que se entende por (e o que ‘ está realmente sob o capô) de ” Programação Arduino Idioma. ”
  • C++ vs. The Arduino Language? – A ” Linguagem Arduino ” é C ++. Há um pouco de pré-processamento para evitar que você faça protótipos de funções, mas definitivamente é C ++.
  • Não existe linguagem arduino. É simplesmente uma biblioteca.
  • Não tão relacionado à questão quanto aos comentários: Atmel studio é gratuito e IMHO é melhor do que o visual studio para programação em arduino. Também oferece suporte ao plugin Visual Micro, embora não seja necessário para programar e depurar arduinos.

Resposta

Minha experiência pessoal como professor (programação, mecatrônica) é que se você tem experiência anterior em programação e está ciente de conceitos como OOP, é melhor ir para C / C ++. A linguagem Arduino é realmente ótima para iniciantes, mas tem algumas limitações (por exemplo, você deve ter todos os seus arquivos na mesma pasta). E é basicamente uma simplificação de C / C ++ (você pode praticamente copiar & colar o código do Arduino em um arquivo C / C ++ e isso funcionará). Também faz sentido que você possa usar um IDE totalmente conhecido como eclipse:

http://playground.arduino.cc/Code/Eclipse

Inicialmente, é necessário um pouco mais de instalação e configuração do seu ambiente de desenvolvimento, mas IMHO vale a pena para programadores com experiência em qualquer outra linguagem.

Em qualquer caso, não será prejudicial começar a usar a linguagem arduino e o IDE do arduino por alguns dias para se familiarizar com o hardware do arduino e, em seguida, mudar para C / C ++ com Eclipse para realmente desenvolver seu projeto.

Comentários

  • Obrigado por sua opinião. Eu ‘ usarei o IDE do Arduino para aprender como controlar todos os diferentes hardwares peças como sensores e telas de LCD, etc. Então, ‘ mudarei para C ++ para fazer o software para o octocóptero. Você conhece um livro bom e curto para quem conhece outras línguas? O ” problema ” com muitos livros que ‘ descobri que incluem tanto que eu não ‘ preciso porque ‘ m em um pequeno microcontrolador Atmel em vez de um computador UI.
  • Há um bom livro ” Programação C para Arduino ” de Julien Bayle que é útil. É a linguagem C não C ++, mas deve ajudá-lo a entender a base.
  • Essa é uma boa solicitação: um pequeno e bom livro com o básico de C ++ para programadores de outras linguagens. Desculpe, não posso dar nenhuma recomendação, não tenho conhecimento de nenhuma boa. Na verdade, eu escrevi um livro, com um enfoque prático (desenvolver um videogame) para meus alunos, mas é apenas em espanhol. Para um livro C ++ bom e prático, eu recomendaria Deitel & Deitel Como programar C ++, você poderia pular muitos capítulos avançados.
  • C ++ suporta recursos OO, linguagem C não.
  • @FriendofKim Não é exatamente o que eu quis dizer (embora tecnicamente você pudesse, o Due é rápido o suficiente para suportar uma solução de software para comunicação serial não megabit, e tem 5 U (S) ARTS no total, enquanto as bibliotecas do Arduino fornecem apenas 4 deles, mas, de qualquer forma, a placa Due não fornece pinos para um dos USARTs); as bibliotecas do Arduino configuram os USARTs para usar o modo assíncrono, mas eu precisava do síncrono em até 6Mbps (e tive que usar o modo SPI, pois a entrada tinha que ser tratada como um fluxo de bits bruto, sem bits de parada / etc.), que também envolveu a modificação da configuração do controlador PIO padrão.

Resposta

Em teoria …
Não existe realmente uma linguagem Arduino como tal. É realmente apenas C ++ com algumas bibliotecas específicas de domínio. Eles adicionam vários recursos, como funções que você pode chamar para controlar o hardware. Se você não tivesse essas funções, precisaria mexer diretamente em registros especiais para controlar tudo. É assim que a programação embarcada geralmente é feita. É rápida, mas pode ser bem difícil de aprender e entender.

Além das funções, as bibliotecas adicionam nomes alternativos para alguns tipos. Por exemplo, boolean e byte não estão no padrão C ++. No entanto, eles são diretamente equivalentes a bool e unsigned char.

Todas essas coisas significam que você provavelmente pode portar em geral Código C ++ diretamente para o Arduino sem dificuldade. No entanto, voltar para o outro lado pode exigir algumas edições menores.

Na prática …
Tendo dito tudo isso, a programação para Arduino não é exatamente o mesmo que a programação C ++ geral. Muitas das diferenças são comuns a toda a programação embarcada (como memória limitada e poder de processamento).

Também é importante notar que se você estiver usando o IDE oficial do Arduino, então existem todos os tipos de peculiaridades e limitações irritantes sobre como você configura seu código. Existem soluções alternativas em todos os casos (pelo que eu sei), mas às vezes são bastante frustrantes.

Para flexibilidade total, use um IDE de terceiros (como o Eclipse) com um plug-in para oferecer suporte ao Arduino. Isso deve lhe dar todas as vantagens do C ++, junto com as bibliotecas do Arduino.

Comentários

  • Aqui ‘ s minha configuração para Eclipse, que funciona bem com o Arduino. arduino.stackexchange.com/a/75491/7727 . Eu não ‘ não uso quaisquer plug-ins do Arduino, apenas Eclipse puro para C / C ++.

Resposta

Quais são as vantagens do C ++ em relação à linguagem Arduino ao usar o Arduino? Tenho experiência em linguagens pré-processadas como JavaScript, PHP, e brinquei com linguagens como Java e Visual Basic.

Primeiro, o compilador / IDE do Arduino aceita C e C ++ no estado em que se encontram. Na verdade, muitas das bibliotecas são escritas em C ++. Grande parte do sistema subjacente não é orientado a objetos, mas poderia ser.

Assim, “A linguagem arduino” é C ++ ou C.

C ++ não é coletado como lixo. Ele gerencia variáveis no escopo – se você escrever:

int led = 13; void blinkTimes(int value) { int i; for(i=0;i<value;i++) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } } 

Então você encontrará que led e i não crescem ou vazam, não importa quantas vezes você ligue para blinkTimes.

Se i fosse uma classe, seria similarmente descartado assim que a função terminasse. Portanto, contanto que você não esteja usando new ou funções de alocação de memória semelhantes para criar novos objetos, então você não terá que se preocupar com vazamentos.

Você ainda pode ficar sem memória, se criar classes enormes e usam muitas delas em funções profundamente aninhadas, mas em geral você não terá problemas até começar a lidar com new e free funções.

Se você estiver usando new, terá que chamar delete em momentos apropriados. C ++ e, por extensão, Arduino, não tem coleta de lixo automática, você deve gerenciar explicitamente sua própria memória.

Comentários

  • Ok, se objetos instanciados (com novo) aren ‘ t lixo coletado, eu ‘ terei que aprender isso também. Suponho que qualquer livro sobre C ++ irá cobrir isso. Obrigado por uma boa resposta!

Resposta

— Atualização 170412
Escrevi meu original responder três anos atrás da perspectiva de existir um “Arduino C ++” distinto. A linguagem usada no IDE é C ++ padrão, porque é implementada pelo compilador GNU C ++. Diferenças “aparentes” aparecem porque o IDE fará algum pré-processamento para ajudar os novatos na linguagem a evitar alguns “pegadinhas”, preenchendo alguns #includes, f / ex. Mas você pode – e eu faço – escrever C ++ correto nele e obter exatamente o que espera obter.
— finalizar a atualização

Limite o uso dos recursos da linguagem C ++ àqueles cuja implementação você compreendo perfeitamente. Existem alguns recursos que compilam para um código com mais recursos do que é óbvio ao ler o código-fonte. A listagem .lss gerada opcionalmente (origem e montagem mescladas) pode fornecer uma boa visão sobre o que o compilador C ++ fez quando você não estava olhando.

Para sua pergunta sobre memória: C ++ não coleta lixo. Linguagens baseadas em pilha como C e C ++ alocam armazenamento temporário na pilha para variáveis automáticas na entrada da função, que então são liberadas quando a função retorna, mas isso não é uma verdadeira coleta de lixo. Os objetos criados na memória heap ou global vivem até que você os exclua explicitamente. Certifique-se de saber onde, quando e por quanto tempo diferentes tipos de objetos serão criados. Você realmente não quer seu código new -ing e delete -ing objetos à toa. Eles serão construídos na memória heap, fragmentando-o e fazendo com que ele cresça na pilha. É quando seu código – e seu bom “copter – vão travar.

C faz menos por você, então pode fazer menos para você. Não é uma escolha ruim. C com alguns dos recursos do C ++ pode ser uma escolha ainda melhor, desde que você escolha os recursos extras criteriosamente. C ++, se essas forem suas duas opções:

[Resposta original] – C ++ é uma linguagem padronizada Ele é amplamente implementado em muitos ambientes, incluindo sistemas embarcados e, portanto, é mais completamente testado do que a linguagem muito semelhante a C ++ que é “Arduino”. Isso é especialmente importante para aplicativos de missão crítica / segurança crítica, como você está planejando. Código quebrado significa um “helicóptero quebrado e mesmo que não” machuque ninguém, irá quebrar sua máquina cara.

  • Sendo padrão, C ++ é portátil. Precisa atualizar seu processador? Tudo, exceto código específico de silício, será transferido para o novo. Precisa alterar seu conjunto de ferramentas, sistema de desenvolvimento, sistema operacional host? C ++ será compatível em todos os lugares. Embora o Arduino IDE seja executado em qualquer lugar com suporte para Java, é a única ferramenta que usa Arduino C ++ e é muito limitada também eu. Se você quiser usar o Eclipse, as ferramentas AVR, vá descalço na linha de comando, desenvolva dentro do Emacs ou qualquer outro ambiente de sua preferência, o C ++ padrão será suportado.

  • O IDE do Arduino faz as coisas pelas suas costas – especificamente, ele #inclui arquivos .h quando acha que você precisa deles. Mesmo se estiver correto, você realmente deseja escrever, ou pelo menos ver e compreender, tudo o que o compilador vai ver. Linguagens de programação não são feitas para computadores (computadores comem pedaços no café da manhã); elas são feitas para pessoas, especificamente as pessoas que o seguem no projeto, o mais importante deles pode ser … você !, quando 6 meses depois você escreveu um módulo, você tem que voltar para melhorá-lo ou, mais provavelmente, consertá-lo. Você realmente deseja poder ver tudo o que o compilador vê.

Comentários

  • Esta é uma resposta REALMENTE boa . Parece claro que você gosta de C ++ e que eu também gostaria! … Mas, falando sério, eu ‘ vou pular direto para C ++ assim que ‘ tiver entendido como o ” comunicação ” com os diferentes sensores, etc. funcionam.
  • Você conhece algum bom livro sobre o assunto? (Adequado para mim, que tenho programado por anos em outras linguagens e só precisa da ” parte incorporada ” de C ++.)
  • Você acha que C ++ acelerado é um bom livro para isso?
  • Gostaria de poder ajudá-lo com o ‘ livro ‘ certo, mas vim para C ++ com muito C atrás de mim e Kernighan & Ritchie ‘ s A linguagem de programação C ainda é meu livro favorito (trocadilho ruim) para qualquer coisa que não seja explicitamente C ++ e Ellis & Stroustrup ‘ s O Manual de Referência C ++ Anotado para C ++. Mas para gravar em hardware, você ‘ fará bem em olhar algumas das bibliotecas de dispositivos fornecidas por usuários em Arduino.cc . Comece ajustando as portas de E / S com as funções pinMode (), digitalWrite () e digitalRead (), então suas contrapartes de E / S analógicas e, eventualmente, …
  • … planeje escrever diretamente I / O registra para melhorias de velocidade e espaço de memória. Programas como blinky.cpp e hello.cpp são bons lugares para começar a mexer no hardware. Adicione um multímetro simples e alguns LEDs com os resistores limitadores de corrente corretos soldados permanentemente em uma perna e você poderá ver os resultados reais, embora simples, de seus esforços. Depois disso, leia as folhas de dados de qualquer hardware que lhe interesse para saber quais sinais você pode ler / escrever neles para fazê-los funcionar. Os sensores de temperatura são fáceis de usar e não ‘ nem todos precisam de um registrador de geladeira? Divirta-se!

Resposta

A linguagem Arduino é C ++, mas é muito diferente da maioria das variedades C ++.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *