C ++ é mais do que uma linguagem de programação:
a) É um "melhor" C b) É uma linguagem orientada a objetos c) É uma linguagem que nos permite escrever programas genéricos
Embora todos esses recursos possam ser usados separadamente, os melhores resultados são alcançados quando os três são usados ao mesmo tempo. No entanto, se você escolher apenas um deles, a qualidade do software incorporado aumentará.
a) É um C "melhor"
C ++ é uma linguagem tipificada forte; mais forte que C. Seus programas se beneficiarão desse recurso.
Algumas pessoas têm medo de indicadores. C ++ inclui as referências. Funções sobrecarregadas.
E vale a pena dizer: Nenhum desses recursos ocorreu em programas maiores ou mais lentos.
b) É uma linguagem orientada a objetos
Alguém disse neste post que abstrair a máquina em microcontroladores não é uma boa idéia. Errado! Todos nós, engenheiros embarcados, sempre abstraímos a máquina, apenas com outra sintaxe que a do C ++. O problema que vejo com esse argumento é que alguns programadores não estão acostumados a pensar em objetos, é assim que não vêem os benefícios do OOP.
Sempre que você estiver pronto para usar o periférico de um microcontrolador, é provável que o periférico tenha sido extraído para nós (de você ou de terceiros) na forma do driver do dispositivo. Como eu disse antes, esse driver usa a sintaxe C, como mostra o próximo exemplo (extraído diretamente de um exemplo NXP LPC1114):
/ * Configuração do temporizador para correspondência e interrupção em TICKRATE_HZ * /
Chip_TIMER_Reset (LPC_TIMER32_0);
Chip_TIMER_MatchEnableInt (LPC_TIMER32_0, 1);
Chip_TIMER_SetMatch (LPC_TIMER32_0, 1, (timerFreq / TICKRATE_HZ2));
Chip_TIMER_ResetOnMatchEnable (LPC_TIMER32_0, 1);
Chip_TIMER_Enable (LPC_TIMER32_0);
Você vê a abstração? Portanto, ao usar o C ++ para o mesmo objetivo, a abstração é levada para o próximo nível através do mecanismo de abstração e encapsulamento do C ++, a custo zero!
c) É uma linguagem que nos permite escrever programas genéricos
Os programas genéricos são alcançados por meio de modelos, e os modelos também não têm custos para nossos programas.
Além disso, o polimorfismo estático é alcançado com modelos.
Métodos virtuais, RTTI e exceções.
Há um comprometimento ao usar métodos virtuais: software melhor versus alguma penalidade no desempenho. No entanto, lembre-se de que a ligação dinâmica provavelmente será implementada usando uma tabela virtual (uma matriz de ponteiros de função). Eu fiz o mesmo em C várias vezes (mesmo regularmente), então não vejo as desvantagens em usar métodos virtuais. Além disso, os métodos virtuais em C ++ são mais elegantes.
Por fim, um conselho sobre RTTI e exceções: NÃO OS UTILIZE em sistemas embarcados. Evite-os a todo custo !!