En un sistema embebido es más "pesado" programar en C++ que en C
Es cierto es mas pesado, pero ten en cuenta que mientras mas alto nivel de programacion, mas fácil y mas cosas se pueden hacer en menos tiempo, sumando las propiedades de la programación en C++.
Para los micros de gama alta, no creo que influya mucho que hagas el programa en C++.
Ten en cuenta que ya existe microcontroladores, como el kinetis serie k de freescale, que le puedes meter un kernel de linux, y es un M4 ahora están llegando los M7 mas potentes aun.
En esos micros, para la mayoría de aplicaciones no creo ni que se note si es c, c++ o ensamblador.
Por supuesto si quieres una aplicación muy depurada, rapida, o de cuentas matematicas... pues deberás ir bajando el nivel del lenguaje.
Un saludo.
Suponiendo que existen 2 programas similares, en uno en C y el otro en C++ en un MCU.
El compilador genera el mismo código para todos los estamentos básicos.
Pero no hay sobrecarga hasta que las nuevas funciones o funciones virtuales empiezan a ser utilizadas, entonces se debe evitar las funciones virtuales y constructores en tiempo de compilación (Globales por ejemplo) o usar objetos basados en la pila del programa.
No hay un orden en la construcción de objetos globales, si algún objeto se basa en otro
Tú podrías escribir un ORM (administrador de objeto de referencia) como en Java que resuleve todas las referencias entre objetos.
La ISR ser un poco complicado, pero el hardware es global. Es global en C y global en C ++, por lo que uno puede llamar a objetos específicos desde la ISR escrita en "C".
También se puede ahorrar un montón de espacio de código usando "la nueva ubicación" para colocar un descriptor de acceso al periférico correcto sobre los registros mapeados en la memoria. Útil para múltiples UARTs, SPIs, .... no tan útil para periféricos de hardware individuales.
También la asignación de memoria dinámica siempre es más problemática en dispositivos embebidos, pero las llamadas a funciones virtuales no son peores que el uso de punteros de función. Añadirá todo tipo de problemas tales como pérdida de memoria y error en el manejo de muchos errores de memoria. En los sistemas con un sistema operativo de memoria protegida tradicional, el sistema operativo sólo puede terminar procesos.