Se ha observado en otras respuestas que de hecho puede usar OO en dispositivos integrados. Un ejemplo de esto sería el marco MBED de ARM y el sistema operativo MBED que permiten escribir el código de la aplicación del usuario en C ++. Por lo tanto, no hay nada que impida a un desarrollador hacer esto.
El problema con OOP es que el código compilado tiende a tener muchas más ramificaciones y saltos que C. Como ejemplo, piense en una llamada de función virtual pura en C ++. Cuando se llama a la función en tiempo de ejecución, se implementa indexando una estructura de datos que contiene los punteros de función a todas las funciones virtuales para esa clase, y luego ejecutando la función almacenada en la dirección del puntero de función apropiado. En un procesador embebido como la serie ARM Cortex-M, existe una capacidad de predicción de rama MUY limitada, por lo que estas llamadas a funciones virtuales (indirectas) probablemente no serán predichas. Por lo tanto, la mayoría de las veces cuando se realiza una llamada de función virtual, la predicción de rama se perderá, por lo que debe:
- enjuague la tubería del procesador
- verifique el caché (probablemente no estará allí; predicción de rama pobre …)
- buscar las instrucciones de flash si no está en caché (el acceso flash es lento …)
- Vuelva a llenar la tubería y comience a ejecutar la función.
Esta es una penalización de rendimiento no trivial y uno de los inconvenientes de OOP en un dispositivo integrado. En los procesadores de aplicaciones, esto es menos problemático porque la lógica de predicción de ramificación es mejor, y hay más opciones para manejar ramificaciones (comience a llenar la tubería para ejecutar todas las ramificaciones al mismo tiempo, luego una vez que la ramificación ocurra, elimine todas pero el necesario)
- ¿Qué cosas se necesitan para desarrollar un sistema embebido?
- ¿Las empresas están subestimando el esfuerzo para el desarrollo de dispositivos conectados e integrados? ¿Hay ejemplos de implementaciones de IoT fallidas?
- ¿Cuál es la velocidad de un microcontrolador 8051?
- ¿Cuál es la diferencia entre firmware, sistema embebido y middleware?
- ¿Cuál es la diferencia entre una imagen de arranque, un núcleo y firmware?