Supongo que depende del tamaño del sistema incorporado qué idioma será realmente útil y utilizable.
Para dispositivos pequeños, simplemente no puedo ver que Java se ejecute en absoluto en ellos. Oracle dice que con 11MB puede ejecutar Java SE integrado en el dispositivo (1) . Hay un Java ME integrado más pequeño, que se cita para necesitar 1 MB de ROM y 128 KB de RAM (2) . Así que Java no es (para mí) un lenguaje muy escalable en la dirección descendente. No puedo decir lo agradable que es programar Java en dispositivos integrados, ya que todos mis proyectos fueron más pequeños que el mínimo para Java ME.
Por otro lado, C ++ ofrece una gran cantidad de funciones que tal vez quieras usar. No se trata de una diferencia de rendimiento y tamaño de código. Si no usa RTTI y excepciones, el código crecerá unos pocos kilobytes sin ganar mucho a primera vista. El entorno de tiempo de ejecución de C ++ será un poco más grande, hay algunas variantes de C ++ incrustadas que reducen estos gastos generales a números apenas visibles pero previenen incluso más construcciones de C ++ como las plantillas.
Pero C ++ le ofrece la capacidad de implementar clases y herencia, básicamente todo lo bueno de OOP. Puede escribir controladores de hardware completamente en C ++, por lo que no es necesario volver a C en ningún punto de su sistema, incluso el código de inicio puede escribirse en C ++.
Diría que en los sistemas integrados no podrás jugar todas las cartas fuertes de C ++, ya que algunas funciones no se pueden utilizar o no se pueden usar. Como ejemplo: está prohibida la creación de instancias dinámicas para aplicaciones críticas para la seguridad (al menos en mi entorno). Las plantillas también son un tema discutible para las aplicaciones críticas de seguridad, ya que las pruebas son un poco complicadas, ya que se crean dinámicamente para cada tipo de datos y debe probar que sus pruebas cubren todos los tipos de datos utilizados.
Desde la perspectiva del código fuente, creo que C ++ crea un concepto más claro de quién hace qué y una estructura más clara, y es preferible a C
Aunque si está ejecutando en dispositivos realmente muy pequeños, probablemente termine cambiando de nuevo a C o al ensamblador.