Icônes SCW
héros bg sans séparateur
Blog

Desarrollo de dispositivos y sistemas integrados: descripción general

Secure Code Warrior
Publié le 11 août 2021
Dernière mise à jour le 6 mars 2026

En Secure Code Warrior, siempre buscamos ampliar nuestra cobertura de capacitación. Para que los desarrolladores de sistemas integrados y los administradores de seguridad puedan crear sistemas integrados seguros, nos adentramos en el mundo de la seguridad de los sistemas integrados. En esta publicación, compartiremos las cosas clave que los desarrolladores y arquitectos deben saber sobre la creación de sistemas integrados seguros.

Un dispositivo integrado es una unidad informática independiente, con su propio hardware y software basados en microprocesadores. Por lo general, se utilizan para realizar funciones dedicadas, ya sea de forma independiente o como parte de sistemas más grandes.

¿Qué es un dispositivo y un sistema integrados?

Los dispositivos integrados son sistemas informáticos diseñados específicamente con hardware y software minimalistas, programados para realizar funciones específicas. Según su finalidad, la complejidad de los dispositivos integrados puede variar.

Si un sistema integrado tiene que realizar operaciones complicadas que consumen muchos recursos, su hardware puede comprender múltiples procesadores, con varios periféricos interconectados. Sin embargo, si está diseñado para realizar una tarea sencilla, es posible que solo contenga un único microcontrolador.

Algunos sistemas integrados son cajas negras sin interfaz de usuario, mientras que otros pueden tener interfaces gráficas de usuario detalladas.

Ejemplos de dispositivos integrados

Los dispositivos integrados encuentran aplicaciones en múltiples industrias, desde la aeroespacial hasta la informática, y desde los electrodomésticos hasta la atención médica. Estos son algunos ejemplos:

  • Un termostato dentro de un acondicionador de aire.
  • Un rastreador de actividad física, con pequeños componentes eléctricos que funcionan con un pequeño sistema operativo, que no puede hacer más que registrar y sincronizar tus estadísticas de salud.
  • Sistemas digitales de climatización.
  • Sistemas de navegación dentro de un avión.
  • Relojes digitales.
  • Dispositivos GPS.
  • Componentes Wi-Fi en hornos microondas y otros productos electrónicos de consumo.
  • Monitores de presión arterial y latidos del corazón.
  • Componente de red dentro de una máquina de resonancia magnética que envía datos a la nube.

¿Es un portátil un dispositivo integrado?

Respuesta corta: No. Respuesta larga:

Por definición, un dispositivo integrado encapsula todo el software y el hardware que necesita para realizar sus funciones. De hecho, un portátil contiene varios componentes de hardware en un cuerpo metálico y abarca todo el software que necesita para ofrecer su conjunto de funciones.

Sin embargo, a diferencia de los sistemas embebidos típicos, que tienen un conjunto mínimo de funciones predefinidas, un portátil tiene un propósito más general y se puede utilizar para realizar una amplia gama de actividades.

Dispositivos integrados en Internet de las cosas

Los sistemas integrados son la base del IoT. Su frigorífico inteligente se puede controlar a través de su dispositivo móvil, gracias a un dispositivo integrado. Es un dispositivo integrado en su sistema de seguridad que le permite ver imágenes de CCTV a miles de kilómetros de distancia. Y cuando pulsas un botón para poner tu coche en piloto automático, entre bastidores, se trata de un dispositivo integrado que hace toda la magia.

Ciclo de vida del desarrollo de software integrado

Los siguientes pasos están involucrados en el ciclo de vida típico de desarrollo de software de un dispositivo integrado:

Paso 1: Propósito y requisitos

Un dispositivo integrado tiene un conjunto de funciones distintas y precisas. Por eso es muy importante indicar explícitamente su propósito y requisitos antes de comenzar el desarrollo. Se recomienda crear un documento de diseño detallado para el sistema. Responda a preguntas como las siguientes:

  • ¿Qué funciones realizará el dispositivo?
  • ¿Formará parte de otra máquina o funcionará por sí sola?
  • ¿El dispositivo debe tener una interfaz de usuario? En caso afirmativo, ¿basta con una línea de comandos o se necesita una interfaz de usuario gráfica?
  • ¿Qué límites de tamaño, costo o consumo de energía debe cumplir el dispositivo?
  • ¿Hay puntos de referencia de rendimiento? Por ejemplo, ¿se espera que el dispositivo responda en tiempo real o dentro de ciertos límites?

Paso 2: Arquitectura del sistema

Una vez que hayamos identificado los requisitos únicos del sistema, estaremos listos para diseñar la arquitectura del sistema. Responda a preguntas como las siguientes:

  • ¿Qué componentes de hardware se necesitarán para desarrollar el dispositivo? Esto incluye identificar los circuitos, los chips del procesador y los microcontroladores, junto con los periféricos internos y externos necesarios.
  • ¿Cuánta energía requerirán los componentes?
  • ¿Se conectará el dispositivo a Internet?
  • ¿Qué interfaces se deben agregar o desarrollar para permitir que el dispositivo se conecte a otros dispositivos o a la máquina más grande?
  • ¿Cómo va a implementar el cifrado? (piense en algoritmos, almacenamiento de claves, etc.)
  • ¿Cómo identificará y evitará posibles vulnerabilidades, exploits y malware?

Paso 3: Seleccione el sistema operativo

La elección del sistema operativo a menudo determina la eficacia de las aplicaciones integradas, por lo que debe elegir con prudencia. Windows para IoT puede obtener una puntuación alta en gráficos, pero carece de soporte de hardware. Los sistemas Linux y Android integrados son gratuitos, mientras que VxWorks y Windows para IoT tienen costos de licencia.

Con sistemas de código abierto como Linux y Android, los desarrolladores tienen más control sobre el núcleo; sin embargo, con los sistemas propietarios, el conjunto de funciones predeterminado del núcleo es todo con lo que puede trabajar.

También es importante tener en cuenta las implicaciones de seguridad al elegir un sistema operativo. ¿Los parches de seguridad se publican rápidamente, en caso de que se descubra alguna vulnerabilidad? ¿Existe alguna protección integrada contra los ataques de ciberseguridad más comunes?

Paso 4: Las herramientas de desarrollo

Los diferentes lenguajes y marcos de programación tienen varias ventajas y desventajas. Según sus requisitos de características, velocidad y confiabilidad, puede elegir un lenguaje/marco en lugar de otro.

Si su aplicación está basada en la web y desea un alto rendimiento, opte por Java.
Sin embargo, si quieres un rendimiento más rápido, opta por C/C++. Si quieres el mejor soporte para bibliotecas de terceros, opta por Python.

Paso 5: Codificar, refactorizar, probar, codificar un poco más

Una vez que te hayas decidido por la plataforma de desarrollo, estarás listo para empezar a programar. Recuerde que los sistemas embebidos son dispositivos sensibles con recursos limitados de hardware y software. Por lo tanto, es de vital importancia tener en cuenta las mejores prácticas en relación con la seguridad y el rendimiento de las aplicaciones.

Las revisiones de código ayudan a optimizar el código e identificar cualquier error potencial. También debes realizar las pruebas con el mayor rigor posible. Asegúrese de compilar una lista exhaustiva de todos los casos de prueba a los que pueda enfrentarse el dispositivo cuando se utilice en producción.

Paso 6: Mantenimiento y soporte

Al igual que cualquier otra aplicación o dispositivo, el ciclo de vida no termina cuando se envía e instala el dispositivo integrado. A medida que el dispositivo se utiliza en la producción, se identifican nuevos casos de uso que requieren la adición de nuevas funciones. Cualquier error reportado también puede requerir la publicación de nuevas actualizaciones de firmware.

Principales lenguajes de programación embebidos

Hay muchas organizaciones acreditadas, como IEEE y TIOBE, que clasifican los lenguajes de programación según su popularidad y uso. Sin embargo, independientemente de si marca la Índice TIOBE, o el Espectro IEEE, notarás un tema común.

Los 3 lenguajes principales son siempre C, Python y Java. El índice TIOBE de julio de 2021 sitúa a C en el puesto #1, a Java en el #2 y a Python en el #3. Según el ranking de lenguajes de programación embebidos de IEEE Spectrum, el orden es: Python, Java y, a continuación, C.

¿En qué se diferencia el firmware escrito en Java, C o Python?

Los diferentes lenguajes administran la memoria, las interacciones con el sistema operativo y el tiempo de ejecución de diferentes maneras. Por ejemplo, las aplicaciones Java se ejecutan en un entorno de ejecución especializado conocido como Java Virtual Machine o JVM.

La administración de la memoria en C/C++ es manual, sin embargo, en Java o Python, no tiene que preocuparse por administrar la memoria usted mismo; el lenguaje lo hace por usted. Además, en C, tienes que recoger la basura tú mismo; es decir, si asignas una memoria de forma dinámica, tienes que liberarla tú mismo de forma explícita. Si no lo haces, se producirá una pérdida de memoria. En Java o Python, la recolección de basura se realiza automáticamente. Sin embargo, C es intrínsecamente mucho más rápido que Java o Python.

Una cosa de la que carecen C y Java (pero especialmente C) en comparación con Python es la disponibilidad de bibliotecas de terceros. Python tiene una base de datos de bibliotecas más rica, lo que facilita mucho a los desarrolladores la adición de ciertas funciones.

En general, elige C si:

  • Desea una interfaz de bajo nivel con el sistema operativo y el hardware.
  • Quieres el mejor rendimiento posible.
  • Sus desarrolladores son expertos en C/C++.
  • No necesitas demasiado soporte externo o de terceros.

Opta por Python si:

  • Quiere implementar algoritmos de ciencia de datos o aprendizaje automático.
  • Quieres un soporte completo para bibliotecas de terceros.
  • Está de acuerdo con cambiar la velocidad por la facilidad de uso.
  • Tiene una experiencia limitada en el desarrollo integrado.
  • No necesita una interfaz de bajo nivel con el sistema operativo o el hardware.

Opta por Java si:

  • Estás creando aplicaciones web.
  • Quieres más facilidad de desarrollo que en C, pero aun así quieres más rendimiento que Python.
  • No necesitas demasiado soporte externo o de terceros.

¿C dejará poco a poco de ser una de las mejores opciones para el desarrollo integrado?

Los lenguajes de alto nivel facilitan la codificación al abstraer las complejidades que simplemente no se pueden evitar en C. Sin embargo, durante décadas, a pesar del lanzamiento de lenguajes y marcos más sofisticados, C ha seguido siendo una de las mejores opciones en el desarrollo integrado.

Esto se debe a que la velocidad, el rendimiento y la confiabilidad que ofrece siguen siendo incomparables. El hecho de que Python y gran parte del ecosistema de Java (incluidos el tiempo de ejecución, el lenguaje y el compilador) estén escritos en C dice mucho sobre la eficiencia y durabilidad del lenguaje.

Dicho esto, C es innegablemente más difícil de aprender para los nuevos desarrolladores, que prefieren la simplicidad de lenguajes como Python. Esto está creando una disminución notable en el tamaño de la comunidad de desarrolladores de C. El aumento del desarrollo de aplicaciones de inteligencia artificial y aprendizaje automático también está impulsando a las personas a elegir Python en lugar de C, simplemente porque ofrece una mayor compatibilidad con las bibliotecas.

Es importante recordar que Python solo recientemente pasó a formar parte del mejor lenguaje de programación embebido debate. Sí, es posible que su adopción siga aumentando en los próximos años, pero no esperamos que C deje de ser la mejor opción para el desarrollo integrado.

Por qué la codificación segura es importante en C/C++

Muchas cosas pueden salir mal al escribir código en C/C++. Acceder a una dirección de memoria que ya no apunta a datos válidos o compartir datos de forma incorrecta entre subprocesos puede provocar que toda la aplicación se bloquee.

En el caso de los dispositivos integrados, estas implicaciones son mucho más importantes, ya que un fallo en su interior puede provocar que una máquina mucho más grande deje de funcionar. Por ejemplo, si el módulo de piloto automático de un automóvil se apaga, el automóvil ya no podrá evitar los obstáculos.

Estas son más razones por las que la codificación segura de las aplicaciones C/C++ es tan importante:

  • El manejo inseguro de la memoria (punteros nulos, daños en la memoria, desbordamientos de pilas, desbordamientos de búferes y pilas) hace que toda la aplicación se bloquee.
  • Los punteros son parte integral de C y C++. Manejarlos requiere el máximo cuidado y un conocimiento profundo de los conceptos subyacentes.
  • La recolección de basura es manual. Esto obliga a los programadores a eliminar explícitamente cualquier memoria asignada dinámicamente. La memoria que no esté libre o se libere de forma incorrecta puede provocar pérdidas de memoria o daños.
  • Hay una falta de API estandarizadas para estructuras de datos avanzadas (por ejemplo, tablas hash, conjuntos, etc.), lo que obliga a los desarrolladores a reinventar la rueda.

Es absolutamente fundamental que los desarrolladores estén capacitados en codificación segura para aplicaciones C/C++. Secure Code Warrior proporciona una plataforma de aprendizaje personalizada con desafíos, cursos y evaluaciones interactivos que pueden permitir a los desarrolladores escribir código C/C++ seguro. En este caso, estamos hablando de contenido específico para language:framework, y no solo de una modificación de la formación conceptual general.

Echa un vistazo cómo ayudamos a las industrias automotriz y de transporte. O prueba un desafío de codificación centrado en la incrustación ¡hoy para experimentar cómo capacitamos a los desarrolladores para que escriban aplicaciones integradas seguras!

Veuillez consulter la ressource
Veuillez consulter la ressource

En esta publicación, obtendrá una descripción general del desarrollo de dispositivos y sistemas integrados.

Souhaitez-vous en savoir davantage ?

Secure Code Warrior fait du codage sécurisé une expérience positive et attrayante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son propre parcours d'apprentissage, afin que les développeurs compétents en matière de sécurité deviennent les super-héros quotidiens de notre monde connecté.

En savoir plus

Secure Code Warrior là pour aider votre organisation à protéger le code tout au long du cycle de vie du développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez administrateur AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez réserver une démonstration.
Partager sur :
marques LinkedInSocialLogo x
auteur
Secure Code Warrior
Publié le 11 août 2021

Secure Code Warrior fait du codage sécurisé une expérience positive et attrayante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son propre parcours d'apprentissage, afin que les développeurs compétents en matière de sécurité deviennent les super-héros quotidiens de notre monde connecté.

Cet article a été écrit par Secure Code Warrior L'équipe d'experts du secteur de s'engage à fournir aux développeurs les connaissances et les compétences nécessaires pour créer des logiciels sécurisés dès le départ. S'appuyant sur une expertise approfondie des pratiques de codage sécurisé, des tendances du secteur et des connaissances du monde réel.

Partager sur :
marques LinkedInSocialLogo x

En Secure Code Warrior, siempre buscamos ampliar nuestra cobertura de capacitación. Para que los desarrolladores de sistemas integrados y los administradores de seguridad puedan crear sistemas integrados seguros, nos adentramos en el mundo de la seguridad de los sistemas integrados. En esta publicación, compartiremos las cosas clave que los desarrolladores y arquitectos deben saber sobre la creación de sistemas integrados seguros.

Un dispositivo integrado es una unidad informática independiente, con su propio hardware y software basados en microprocesadores. Por lo general, se utilizan para realizar funciones dedicadas, ya sea de forma independiente o como parte de sistemas más grandes.

¿Qué es un dispositivo y un sistema integrados?

Los dispositivos integrados son sistemas informáticos diseñados específicamente con hardware y software minimalistas, programados para realizar funciones específicas. Según su finalidad, la complejidad de los dispositivos integrados puede variar.

Si un sistema integrado tiene que realizar operaciones complicadas que consumen muchos recursos, su hardware puede comprender múltiples procesadores, con varios periféricos interconectados. Sin embargo, si está diseñado para realizar una tarea sencilla, es posible que solo contenga un único microcontrolador.

Algunos sistemas integrados son cajas negras sin interfaz de usuario, mientras que otros pueden tener interfaces gráficas de usuario detalladas.

Ejemplos de dispositivos integrados

Los dispositivos integrados encuentran aplicaciones en múltiples industrias, desde la aeroespacial hasta la informática, y desde los electrodomésticos hasta la atención médica. Estos son algunos ejemplos:

  • Un termostato dentro de un acondicionador de aire.
  • Un rastreador de actividad física, con pequeños componentes eléctricos que funcionan con un pequeño sistema operativo, que no puede hacer más que registrar y sincronizar tus estadísticas de salud.
  • Sistemas digitales de climatización.
  • Sistemas de navegación dentro de un avión.
  • Relojes digitales.
  • Dispositivos GPS.
  • Componentes Wi-Fi en hornos microondas y otros productos electrónicos de consumo.
  • Monitores de presión arterial y latidos del corazón.
  • Componente de red dentro de una máquina de resonancia magnética que envía datos a la nube.

¿Es un portátil un dispositivo integrado?

Respuesta corta: No. Respuesta larga:

Por definición, un dispositivo integrado encapsula todo el software y el hardware que necesita para realizar sus funciones. De hecho, un portátil contiene varios componentes de hardware en un cuerpo metálico y abarca todo el software que necesita para ofrecer su conjunto de funciones.

Sin embargo, a diferencia de los sistemas embebidos típicos, que tienen un conjunto mínimo de funciones predefinidas, un portátil tiene un propósito más general y se puede utilizar para realizar una amplia gama de actividades.

Dispositivos integrados en Internet de las cosas

Los sistemas integrados son la base del IoT. Su frigorífico inteligente se puede controlar a través de su dispositivo móvil, gracias a un dispositivo integrado. Es un dispositivo integrado en su sistema de seguridad que le permite ver imágenes de CCTV a miles de kilómetros de distancia. Y cuando pulsas un botón para poner tu coche en piloto automático, entre bastidores, se trata de un dispositivo integrado que hace toda la magia.

Ciclo de vida del desarrollo de software integrado

Los siguientes pasos están involucrados en el ciclo de vida típico de desarrollo de software de un dispositivo integrado:

Paso 1: Propósito y requisitos

Un dispositivo integrado tiene un conjunto de funciones distintas y precisas. Por eso es muy importante indicar explícitamente su propósito y requisitos antes de comenzar el desarrollo. Se recomienda crear un documento de diseño detallado para el sistema. Responda a preguntas como las siguientes:

  • ¿Qué funciones realizará el dispositivo?
  • ¿Formará parte de otra máquina o funcionará por sí sola?
  • ¿El dispositivo debe tener una interfaz de usuario? En caso afirmativo, ¿basta con una línea de comandos o se necesita una interfaz de usuario gráfica?
  • ¿Qué límites de tamaño, costo o consumo de energía debe cumplir el dispositivo?
  • ¿Hay puntos de referencia de rendimiento? Por ejemplo, ¿se espera que el dispositivo responda en tiempo real o dentro de ciertos límites?

Paso 2: Arquitectura del sistema

Una vez que hayamos identificado los requisitos únicos del sistema, estaremos listos para diseñar la arquitectura del sistema. Responda a preguntas como las siguientes:

  • ¿Qué componentes de hardware se necesitarán para desarrollar el dispositivo? Esto incluye identificar los circuitos, los chips del procesador y los microcontroladores, junto con los periféricos internos y externos necesarios.
  • ¿Cuánta energía requerirán los componentes?
  • ¿Se conectará el dispositivo a Internet?
  • ¿Qué interfaces se deben agregar o desarrollar para permitir que el dispositivo se conecte a otros dispositivos o a la máquina más grande?
  • ¿Cómo va a implementar el cifrado? (piense en algoritmos, almacenamiento de claves, etc.)
  • ¿Cómo identificará y evitará posibles vulnerabilidades, exploits y malware?

Paso 3: Seleccione el sistema operativo

La elección del sistema operativo a menudo determina la eficacia de las aplicaciones integradas, por lo que debe elegir con prudencia. Windows para IoT puede obtener una puntuación alta en gráficos, pero carece de soporte de hardware. Los sistemas Linux y Android integrados son gratuitos, mientras que VxWorks y Windows para IoT tienen costos de licencia.

Con sistemas de código abierto como Linux y Android, los desarrolladores tienen más control sobre el núcleo; sin embargo, con los sistemas propietarios, el conjunto de funciones predeterminado del núcleo es todo con lo que puede trabajar.

También es importante tener en cuenta las implicaciones de seguridad al elegir un sistema operativo. ¿Los parches de seguridad se publican rápidamente, en caso de que se descubra alguna vulnerabilidad? ¿Existe alguna protección integrada contra los ataques de ciberseguridad más comunes?

Paso 4: Las herramientas de desarrollo

Los diferentes lenguajes y marcos de programación tienen varias ventajas y desventajas. Según sus requisitos de características, velocidad y confiabilidad, puede elegir un lenguaje/marco en lugar de otro.

Si su aplicación está basada en la web y desea un alto rendimiento, opte por Java.
Sin embargo, si quieres un rendimiento más rápido, opta por C/C++. Si quieres el mejor soporte para bibliotecas de terceros, opta por Python.

Paso 5: Codificar, refactorizar, probar, codificar un poco más

Una vez que te hayas decidido por la plataforma de desarrollo, estarás listo para empezar a programar. Recuerde que los sistemas embebidos son dispositivos sensibles con recursos limitados de hardware y software. Por lo tanto, es de vital importancia tener en cuenta las mejores prácticas en relación con la seguridad y el rendimiento de las aplicaciones.

Las revisiones de código ayudan a optimizar el código e identificar cualquier error potencial. También debes realizar las pruebas con el mayor rigor posible. Asegúrese de compilar una lista exhaustiva de todos los casos de prueba a los que pueda enfrentarse el dispositivo cuando se utilice en producción.

Paso 6: Mantenimiento y soporte

Al igual que cualquier otra aplicación o dispositivo, el ciclo de vida no termina cuando se envía e instala el dispositivo integrado. A medida que el dispositivo se utiliza en la producción, se identifican nuevos casos de uso que requieren la adición de nuevas funciones. Cualquier error reportado también puede requerir la publicación de nuevas actualizaciones de firmware.

Principales lenguajes de programación embebidos

Hay muchas organizaciones acreditadas, como IEEE y TIOBE, que clasifican los lenguajes de programación según su popularidad y uso. Sin embargo, independientemente de si marca la Índice TIOBE, o el Espectro IEEE, notarás un tema común.

Los 3 lenguajes principales son siempre C, Python y Java. El índice TIOBE de julio de 2021 sitúa a C en el puesto #1, a Java en el #2 y a Python en el #3. Según el ranking de lenguajes de programación embebidos de IEEE Spectrum, el orden es: Python, Java y, a continuación, C.

¿En qué se diferencia el firmware escrito en Java, C o Python?

Los diferentes lenguajes administran la memoria, las interacciones con el sistema operativo y el tiempo de ejecución de diferentes maneras. Por ejemplo, las aplicaciones Java se ejecutan en un entorno de ejecución especializado conocido como Java Virtual Machine o JVM.

La administración de la memoria en C/C++ es manual, sin embargo, en Java o Python, no tiene que preocuparse por administrar la memoria usted mismo; el lenguaje lo hace por usted. Además, en C, tienes que recoger la basura tú mismo; es decir, si asignas una memoria de forma dinámica, tienes que liberarla tú mismo de forma explícita. Si no lo haces, se producirá una pérdida de memoria. En Java o Python, la recolección de basura se realiza automáticamente. Sin embargo, C es intrínsecamente mucho más rápido que Java o Python.

Una cosa de la que carecen C y Java (pero especialmente C) en comparación con Python es la disponibilidad de bibliotecas de terceros. Python tiene una base de datos de bibliotecas más rica, lo que facilita mucho a los desarrolladores la adición de ciertas funciones.

En general, elige C si:

  • Desea una interfaz de bajo nivel con el sistema operativo y el hardware.
  • Quieres el mejor rendimiento posible.
  • Sus desarrolladores son expertos en C/C++.
  • No necesitas demasiado soporte externo o de terceros.

Opta por Python si:

  • Quiere implementar algoritmos de ciencia de datos o aprendizaje automático.
  • Quieres un soporte completo para bibliotecas de terceros.
  • Está de acuerdo con cambiar la velocidad por la facilidad de uso.
  • Tiene una experiencia limitada en el desarrollo integrado.
  • No necesita una interfaz de bajo nivel con el sistema operativo o el hardware.

Opta por Java si:

  • Estás creando aplicaciones web.
  • Quieres más facilidad de desarrollo que en C, pero aun así quieres más rendimiento que Python.
  • No necesitas demasiado soporte externo o de terceros.

¿C dejará poco a poco de ser una de las mejores opciones para el desarrollo integrado?

Los lenguajes de alto nivel facilitan la codificación al abstraer las complejidades que simplemente no se pueden evitar en C. Sin embargo, durante décadas, a pesar del lanzamiento de lenguajes y marcos más sofisticados, C ha seguido siendo una de las mejores opciones en el desarrollo integrado.

Esto se debe a que la velocidad, el rendimiento y la confiabilidad que ofrece siguen siendo incomparables. El hecho de que Python y gran parte del ecosistema de Java (incluidos el tiempo de ejecución, el lenguaje y el compilador) estén escritos en C dice mucho sobre la eficiencia y durabilidad del lenguaje.

Dicho esto, C es innegablemente más difícil de aprender para los nuevos desarrolladores, que prefieren la simplicidad de lenguajes como Python. Esto está creando una disminución notable en el tamaño de la comunidad de desarrolladores de C. El aumento del desarrollo de aplicaciones de inteligencia artificial y aprendizaje automático también está impulsando a las personas a elegir Python en lugar de C, simplemente porque ofrece una mayor compatibilidad con las bibliotecas.

Es importante recordar que Python solo recientemente pasó a formar parte del mejor lenguaje de programación embebido debate. Sí, es posible que su adopción siga aumentando en los próximos años, pero no esperamos que C deje de ser la mejor opción para el desarrollo integrado.

Por qué la codificación segura es importante en C/C++

Muchas cosas pueden salir mal al escribir código en C/C++. Acceder a una dirección de memoria que ya no apunta a datos válidos o compartir datos de forma incorrecta entre subprocesos puede provocar que toda la aplicación se bloquee.

En el caso de los dispositivos integrados, estas implicaciones son mucho más importantes, ya que un fallo en su interior puede provocar que una máquina mucho más grande deje de funcionar. Por ejemplo, si el módulo de piloto automático de un automóvil se apaga, el automóvil ya no podrá evitar los obstáculos.

Estas son más razones por las que la codificación segura de las aplicaciones C/C++ es tan importante:

  • El manejo inseguro de la memoria (punteros nulos, daños en la memoria, desbordamientos de pilas, desbordamientos de búferes y pilas) hace que toda la aplicación se bloquee.
  • Los punteros son parte integral de C y C++. Manejarlos requiere el máximo cuidado y un conocimiento profundo de los conceptos subyacentes.
  • La recolección de basura es manual. Esto obliga a los programadores a eliminar explícitamente cualquier memoria asignada dinámicamente. La memoria que no esté libre o se libere de forma incorrecta puede provocar pérdidas de memoria o daños.
  • Hay una falta de API estandarizadas para estructuras de datos avanzadas (por ejemplo, tablas hash, conjuntos, etc.), lo que obliga a los desarrolladores a reinventar la rueda.

Es absolutamente fundamental que los desarrolladores estén capacitados en codificación segura para aplicaciones C/C++. Secure Code Warrior proporciona una plataforma de aprendizaje personalizada con desafíos, cursos y evaluaciones interactivos que pueden permitir a los desarrolladores escribir código C/C++ seguro. En este caso, estamos hablando de contenido específico para language:framework, y no solo de una modificación de la formación conceptual general.

Echa un vistazo cómo ayudamos a las industrias automotriz y de transporte. O prueba un desafío de codificación centrado en la incrustación ¡hoy para experimentar cómo capacitamos a los desarrolladores para que escriban aplicaciones integradas seguras!

Veuillez consulter la ressource
Veuillez consulter la ressource

Veuillez remplir le formulaire suivant pour télécharger le rapport.

Nous souhaiterions obtenir votre autorisation pour vous envoyer des informations sur nos produits ou sur des sujets liés au codage sécurisé. Nous traiterons toujours vos données personnelles avec le plus grand soin et ne les vendrons jamais à d'autres entreprises à des fins de marketing.

Envoyer
icône de réussite scw
icône d'erreur scw
Pour envoyer le formulaire, veuillez activer les cookies « d'analyse ». N'hésitez pas à les désactiver à nouveau une fois que vous avez terminé.

En Secure Code Warrior, siempre buscamos ampliar nuestra cobertura de capacitación. Para que los desarrolladores de sistemas integrados y los administradores de seguridad puedan crear sistemas integrados seguros, nos adentramos en el mundo de la seguridad de los sistemas integrados. En esta publicación, compartiremos las cosas clave que los desarrolladores y arquitectos deben saber sobre la creación de sistemas integrados seguros.

Un dispositivo integrado es una unidad informática independiente, con su propio hardware y software basados en microprocesadores. Por lo general, se utilizan para realizar funciones dedicadas, ya sea de forma independiente o como parte de sistemas más grandes.

¿Qué es un dispositivo y un sistema integrados?

Los dispositivos integrados son sistemas informáticos diseñados específicamente con hardware y software minimalistas, programados para realizar funciones específicas. Según su finalidad, la complejidad de los dispositivos integrados puede variar.

Si un sistema integrado tiene que realizar operaciones complicadas que consumen muchos recursos, su hardware puede comprender múltiples procesadores, con varios periféricos interconectados. Sin embargo, si está diseñado para realizar una tarea sencilla, es posible que solo contenga un único microcontrolador.

Algunos sistemas integrados son cajas negras sin interfaz de usuario, mientras que otros pueden tener interfaces gráficas de usuario detalladas.

Ejemplos de dispositivos integrados

Los dispositivos integrados encuentran aplicaciones en múltiples industrias, desde la aeroespacial hasta la informática, y desde los electrodomésticos hasta la atención médica. Estos son algunos ejemplos:

  • Un termostato dentro de un acondicionador de aire.
  • Un rastreador de actividad física, con pequeños componentes eléctricos que funcionan con un pequeño sistema operativo, que no puede hacer más que registrar y sincronizar tus estadísticas de salud.
  • Sistemas digitales de climatización.
  • Sistemas de navegación dentro de un avión.
  • Relojes digitales.
  • Dispositivos GPS.
  • Componentes Wi-Fi en hornos microondas y otros productos electrónicos de consumo.
  • Monitores de presión arterial y latidos del corazón.
  • Componente de red dentro de una máquina de resonancia magnética que envía datos a la nube.

¿Es un portátil un dispositivo integrado?

Respuesta corta: No. Respuesta larga:

Por definición, un dispositivo integrado encapsula todo el software y el hardware que necesita para realizar sus funciones. De hecho, un portátil contiene varios componentes de hardware en un cuerpo metálico y abarca todo el software que necesita para ofrecer su conjunto de funciones.

Sin embargo, a diferencia de los sistemas embebidos típicos, que tienen un conjunto mínimo de funciones predefinidas, un portátil tiene un propósito más general y se puede utilizar para realizar una amplia gama de actividades.

Dispositivos integrados en Internet de las cosas

Los sistemas integrados son la base del IoT. Su frigorífico inteligente se puede controlar a través de su dispositivo móvil, gracias a un dispositivo integrado. Es un dispositivo integrado en su sistema de seguridad que le permite ver imágenes de CCTV a miles de kilómetros de distancia. Y cuando pulsas un botón para poner tu coche en piloto automático, entre bastidores, se trata de un dispositivo integrado que hace toda la magia.

Ciclo de vida del desarrollo de software integrado

Los siguientes pasos están involucrados en el ciclo de vida típico de desarrollo de software de un dispositivo integrado:

Paso 1: Propósito y requisitos

Un dispositivo integrado tiene un conjunto de funciones distintas y precisas. Por eso es muy importante indicar explícitamente su propósito y requisitos antes de comenzar el desarrollo. Se recomienda crear un documento de diseño detallado para el sistema. Responda a preguntas como las siguientes:

  • ¿Qué funciones realizará el dispositivo?
  • ¿Formará parte de otra máquina o funcionará por sí sola?
  • ¿El dispositivo debe tener una interfaz de usuario? En caso afirmativo, ¿basta con una línea de comandos o se necesita una interfaz de usuario gráfica?
  • ¿Qué límites de tamaño, costo o consumo de energía debe cumplir el dispositivo?
  • ¿Hay puntos de referencia de rendimiento? Por ejemplo, ¿se espera que el dispositivo responda en tiempo real o dentro de ciertos límites?

Paso 2: Arquitectura del sistema

Una vez que hayamos identificado los requisitos únicos del sistema, estaremos listos para diseñar la arquitectura del sistema. Responda a preguntas como las siguientes:

  • ¿Qué componentes de hardware se necesitarán para desarrollar el dispositivo? Esto incluye identificar los circuitos, los chips del procesador y los microcontroladores, junto con los periféricos internos y externos necesarios.
  • ¿Cuánta energía requerirán los componentes?
  • ¿Se conectará el dispositivo a Internet?
  • ¿Qué interfaces se deben agregar o desarrollar para permitir que el dispositivo se conecte a otros dispositivos o a la máquina más grande?
  • ¿Cómo va a implementar el cifrado? (piense en algoritmos, almacenamiento de claves, etc.)
  • ¿Cómo identificará y evitará posibles vulnerabilidades, exploits y malware?

Paso 3: Seleccione el sistema operativo

La elección del sistema operativo a menudo determina la eficacia de las aplicaciones integradas, por lo que debe elegir con prudencia. Windows para IoT puede obtener una puntuación alta en gráficos, pero carece de soporte de hardware. Los sistemas Linux y Android integrados son gratuitos, mientras que VxWorks y Windows para IoT tienen costos de licencia.

Con sistemas de código abierto como Linux y Android, los desarrolladores tienen más control sobre el núcleo; sin embargo, con los sistemas propietarios, el conjunto de funciones predeterminado del núcleo es todo con lo que puede trabajar.

También es importante tener en cuenta las implicaciones de seguridad al elegir un sistema operativo. ¿Los parches de seguridad se publican rápidamente, en caso de que se descubra alguna vulnerabilidad? ¿Existe alguna protección integrada contra los ataques de ciberseguridad más comunes?

Paso 4: Las herramientas de desarrollo

Los diferentes lenguajes y marcos de programación tienen varias ventajas y desventajas. Según sus requisitos de características, velocidad y confiabilidad, puede elegir un lenguaje/marco en lugar de otro.

Si su aplicación está basada en la web y desea un alto rendimiento, opte por Java.
Sin embargo, si quieres un rendimiento más rápido, opta por C/C++. Si quieres el mejor soporte para bibliotecas de terceros, opta por Python.

Paso 5: Codificar, refactorizar, probar, codificar un poco más

Una vez que te hayas decidido por la plataforma de desarrollo, estarás listo para empezar a programar. Recuerde que los sistemas embebidos son dispositivos sensibles con recursos limitados de hardware y software. Por lo tanto, es de vital importancia tener en cuenta las mejores prácticas en relación con la seguridad y el rendimiento de las aplicaciones.

Las revisiones de código ayudan a optimizar el código e identificar cualquier error potencial. También debes realizar las pruebas con el mayor rigor posible. Asegúrese de compilar una lista exhaustiva de todos los casos de prueba a los que pueda enfrentarse el dispositivo cuando se utilice en producción.

Paso 6: Mantenimiento y soporte

Al igual que cualquier otra aplicación o dispositivo, el ciclo de vida no termina cuando se envía e instala el dispositivo integrado. A medida que el dispositivo se utiliza en la producción, se identifican nuevos casos de uso que requieren la adición de nuevas funciones. Cualquier error reportado también puede requerir la publicación de nuevas actualizaciones de firmware.

Principales lenguajes de programación embebidos

Hay muchas organizaciones acreditadas, como IEEE y TIOBE, que clasifican los lenguajes de programación según su popularidad y uso. Sin embargo, independientemente de si marca la Índice TIOBE, o el Espectro IEEE, notarás un tema común.

Los 3 lenguajes principales son siempre C, Python y Java. El índice TIOBE de julio de 2021 sitúa a C en el puesto #1, a Java en el #2 y a Python en el #3. Según el ranking de lenguajes de programación embebidos de IEEE Spectrum, el orden es: Python, Java y, a continuación, C.

¿En qué se diferencia el firmware escrito en Java, C o Python?

Los diferentes lenguajes administran la memoria, las interacciones con el sistema operativo y el tiempo de ejecución de diferentes maneras. Por ejemplo, las aplicaciones Java se ejecutan en un entorno de ejecución especializado conocido como Java Virtual Machine o JVM.

La administración de la memoria en C/C++ es manual, sin embargo, en Java o Python, no tiene que preocuparse por administrar la memoria usted mismo; el lenguaje lo hace por usted. Además, en C, tienes que recoger la basura tú mismo; es decir, si asignas una memoria de forma dinámica, tienes que liberarla tú mismo de forma explícita. Si no lo haces, se producirá una pérdida de memoria. En Java o Python, la recolección de basura se realiza automáticamente. Sin embargo, C es intrínsecamente mucho más rápido que Java o Python.

Una cosa de la que carecen C y Java (pero especialmente C) en comparación con Python es la disponibilidad de bibliotecas de terceros. Python tiene una base de datos de bibliotecas más rica, lo que facilita mucho a los desarrolladores la adición de ciertas funciones.

En general, elige C si:

  • Desea una interfaz de bajo nivel con el sistema operativo y el hardware.
  • Quieres el mejor rendimiento posible.
  • Sus desarrolladores son expertos en C/C++.
  • No necesitas demasiado soporte externo o de terceros.

Opta por Python si:

  • Quiere implementar algoritmos de ciencia de datos o aprendizaje automático.
  • Quieres un soporte completo para bibliotecas de terceros.
  • Está de acuerdo con cambiar la velocidad por la facilidad de uso.
  • Tiene una experiencia limitada en el desarrollo integrado.
  • No necesita una interfaz de bajo nivel con el sistema operativo o el hardware.

Opta por Java si:

  • Estás creando aplicaciones web.
  • Quieres más facilidad de desarrollo que en C, pero aun así quieres más rendimiento que Python.
  • No necesitas demasiado soporte externo o de terceros.

¿C dejará poco a poco de ser una de las mejores opciones para el desarrollo integrado?

Los lenguajes de alto nivel facilitan la codificación al abstraer las complejidades que simplemente no se pueden evitar en C. Sin embargo, durante décadas, a pesar del lanzamiento de lenguajes y marcos más sofisticados, C ha seguido siendo una de las mejores opciones en el desarrollo integrado.

Esto se debe a que la velocidad, el rendimiento y la confiabilidad que ofrece siguen siendo incomparables. El hecho de que Python y gran parte del ecosistema de Java (incluidos el tiempo de ejecución, el lenguaje y el compilador) estén escritos en C dice mucho sobre la eficiencia y durabilidad del lenguaje.

Dicho esto, C es innegablemente más difícil de aprender para los nuevos desarrolladores, que prefieren la simplicidad de lenguajes como Python. Esto está creando una disminución notable en el tamaño de la comunidad de desarrolladores de C. El aumento del desarrollo de aplicaciones de inteligencia artificial y aprendizaje automático también está impulsando a las personas a elegir Python en lugar de C, simplemente porque ofrece una mayor compatibilidad con las bibliotecas.

Es importante recordar que Python solo recientemente pasó a formar parte del mejor lenguaje de programación embebido debate. Sí, es posible que su adopción siga aumentando en los próximos años, pero no esperamos que C deje de ser la mejor opción para el desarrollo integrado.

Por qué la codificación segura es importante en C/C++

Muchas cosas pueden salir mal al escribir código en C/C++. Acceder a una dirección de memoria que ya no apunta a datos válidos o compartir datos de forma incorrecta entre subprocesos puede provocar que toda la aplicación se bloquee.

En el caso de los dispositivos integrados, estas implicaciones son mucho más importantes, ya que un fallo en su interior puede provocar que una máquina mucho más grande deje de funcionar. Por ejemplo, si el módulo de piloto automático de un automóvil se apaga, el automóvil ya no podrá evitar los obstáculos.

Estas son más razones por las que la codificación segura de las aplicaciones C/C++ es tan importante:

  • El manejo inseguro de la memoria (punteros nulos, daños en la memoria, desbordamientos de pilas, desbordamientos de búferes y pilas) hace que toda la aplicación se bloquee.
  • Los punteros son parte integral de C y C++. Manejarlos requiere el máximo cuidado y un conocimiento profundo de los conceptos subyacentes.
  • La recolección de basura es manual. Esto obliga a los programadores a eliminar explícitamente cualquier memoria asignada dinámicamente. La memoria que no esté libre o se libere de forma incorrecta puede provocar pérdidas de memoria o daños.
  • Hay una falta de API estandarizadas para estructuras de datos avanzadas (por ejemplo, tablas hash, conjuntos, etc.), lo que obliga a los desarrolladores a reinventar la rueda.

Es absolutamente fundamental que los desarrolladores estén capacitados en codificación segura para aplicaciones C/C++. Secure Code Warrior proporciona una plataforma de aprendizaje personalizada con desafíos, cursos y evaluaciones interactivos que pueden permitir a los desarrolladores escribir código C/C++ seguro. En este caso, estamos hablando de contenido específico para language:framework, y no solo de una modificación de la formación conceptual general.

Echa un vistazo cómo ayudamos a las industrias automotriz y de transporte. O prueba un desafío de codificación centrado en la incrustación ¡hoy para experimentar cómo capacitamos a los desarrolladores para que escriban aplicaciones integradas seguras!

Veuillez consulter le webinaire
Commencer
En savoir plus

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.

Secure Code Warrior là pour aider votre organisation à protéger le code tout au long du cycle de vie du développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez administrateur AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez consulter le rapportVeuillez réserver une démonstration.
Télécharger le PDF
Veuillez consulter la ressource
Partager sur :
marques LinkedInSocialLogo x
Souhaitez-vous en savoir davantage ?

Partager sur :
marques LinkedInSocialLogo x
auteur
Secure Code Warrior
Publié le 11 août 2021

Secure Code Warrior fait du codage sécurisé une expérience positive et attrayante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son propre parcours d'apprentissage, afin que les développeurs compétents en matière de sécurité deviennent les super-héros quotidiens de notre monde connecté.

Cet article a été écrit par Secure Code Warrior L'équipe d'experts du secteur de s'engage à fournir aux développeurs les connaissances et les compétences nécessaires pour créer des logiciels sécurisés dès le départ. S'appuyant sur une expertise approfondie des pratiques de codage sécurisé, des tendances du secteur et des connaissances du monde réel.

Partager sur :
marques LinkedInSocialLogo x

En Secure Code Warrior, siempre buscamos ampliar nuestra cobertura de capacitación. Para que los desarrolladores de sistemas integrados y los administradores de seguridad puedan crear sistemas integrados seguros, nos adentramos en el mundo de la seguridad de los sistemas integrados. En esta publicación, compartiremos las cosas clave que los desarrolladores y arquitectos deben saber sobre la creación de sistemas integrados seguros.

Un dispositivo integrado es una unidad informática independiente, con su propio hardware y software basados en microprocesadores. Por lo general, se utilizan para realizar funciones dedicadas, ya sea de forma independiente o como parte de sistemas más grandes.

¿Qué es un dispositivo y un sistema integrados?

Los dispositivos integrados son sistemas informáticos diseñados específicamente con hardware y software minimalistas, programados para realizar funciones específicas. Según su finalidad, la complejidad de los dispositivos integrados puede variar.

Si un sistema integrado tiene que realizar operaciones complicadas que consumen muchos recursos, su hardware puede comprender múltiples procesadores, con varios periféricos interconectados. Sin embargo, si está diseñado para realizar una tarea sencilla, es posible que solo contenga un único microcontrolador.

Algunos sistemas integrados son cajas negras sin interfaz de usuario, mientras que otros pueden tener interfaces gráficas de usuario detalladas.

Ejemplos de dispositivos integrados

Los dispositivos integrados encuentran aplicaciones en múltiples industrias, desde la aeroespacial hasta la informática, y desde los electrodomésticos hasta la atención médica. Estos son algunos ejemplos:

  • Un termostato dentro de un acondicionador de aire.
  • Un rastreador de actividad física, con pequeños componentes eléctricos que funcionan con un pequeño sistema operativo, que no puede hacer más que registrar y sincronizar tus estadísticas de salud.
  • Sistemas digitales de climatización.
  • Sistemas de navegación dentro de un avión.
  • Relojes digitales.
  • Dispositivos GPS.
  • Componentes Wi-Fi en hornos microondas y otros productos electrónicos de consumo.
  • Monitores de presión arterial y latidos del corazón.
  • Componente de red dentro de una máquina de resonancia magnética que envía datos a la nube.

¿Es un portátil un dispositivo integrado?

Respuesta corta: No. Respuesta larga:

Por definición, un dispositivo integrado encapsula todo el software y el hardware que necesita para realizar sus funciones. De hecho, un portátil contiene varios componentes de hardware en un cuerpo metálico y abarca todo el software que necesita para ofrecer su conjunto de funciones.

Sin embargo, a diferencia de los sistemas embebidos típicos, que tienen un conjunto mínimo de funciones predefinidas, un portátil tiene un propósito más general y se puede utilizar para realizar una amplia gama de actividades.

Dispositivos integrados en Internet de las cosas

Los sistemas integrados son la base del IoT. Su frigorífico inteligente se puede controlar a través de su dispositivo móvil, gracias a un dispositivo integrado. Es un dispositivo integrado en su sistema de seguridad que le permite ver imágenes de CCTV a miles de kilómetros de distancia. Y cuando pulsas un botón para poner tu coche en piloto automático, entre bastidores, se trata de un dispositivo integrado que hace toda la magia.

Ciclo de vida del desarrollo de software integrado

Los siguientes pasos están involucrados en el ciclo de vida típico de desarrollo de software de un dispositivo integrado:

Paso 1: Propósito y requisitos

Un dispositivo integrado tiene un conjunto de funciones distintas y precisas. Por eso es muy importante indicar explícitamente su propósito y requisitos antes de comenzar el desarrollo. Se recomienda crear un documento de diseño detallado para el sistema. Responda a preguntas como las siguientes:

  • ¿Qué funciones realizará el dispositivo?
  • ¿Formará parte de otra máquina o funcionará por sí sola?
  • ¿El dispositivo debe tener una interfaz de usuario? En caso afirmativo, ¿basta con una línea de comandos o se necesita una interfaz de usuario gráfica?
  • ¿Qué límites de tamaño, costo o consumo de energía debe cumplir el dispositivo?
  • ¿Hay puntos de referencia de rendimiento? Por ejemplo, ¿se espera que el dispositivo responda en tiempo real o dentro de ciertos límites?

Paso 2: Arquitectura del sistema

Una vez que hayamos identificado los requisitos únicos del sistema, estaremos listos para diseñar la arquitectura del sistema. Responda a preguntas como las siguientes:

  • ¿Qué componentes de hardware se necesitarán para desarrollar el dispositivo? Esto incluye identificar los circuitos, los chips del procesador y los microcontroladores, junto con los periféricos internos y externos necesarios.
  • ¿Cuánta energía requerirán los componentes?
  • ¿Se conectará el dispositivo a Internet?
  • ¿Qué interfaces se deben agregar o desarrollar para permitir que el dispositivo se conecte a otros dispositivos o a la máquina más grande?
  • ¿Cómo va a implementar el cifrado? (piense en algoritmos, almacenamiento de claves, etc.)
  • ¿Cómo identificará y evitará posibles vulnerabilidades, exploits y malware?

Paso 3: Seleccione el sistema operativo

La elección del sistema operativo a menudo determina la eficacia de las aplicaciones integradas, por lo que debe elegir con prudencia. Windows para IoT puede obtener una puntuación alta en gráficos, pero carece de soporte de hardware. Los sistemas Linux y Android integrados son gratuitos, mientras que VxWorks y Windows para IoT tienen costos de licencia.

Con sistemas de código abierto como Linux y Android, los desarrolladores tienen más control sobre el núcleo; sin embargo, con los sistemas propietarios, el conjunto de funciones predeterminado del núcleo es todo con lo que puede trabajar.

También es importante tener en cuenta las implicaciones de seguridad al elegir un sistema operativo. ¿Los parches de seguridad se publican rápidamente, en caso de que se descubra alguna vulnerabilidad? ¿Existe alguna protección integrada contra los ataques de ciberseguridad más comunes?

Paso 4: Las herramientas de desarrollo

Los diferentes lenguajes y marcos de programación tienen varias ventajas y desventajas. Según sus requisitos de características, velocidad y confiabilidad, puede elegir un lenguaje/marco en lugar de otro.

Si su aplicación está basada en la web y desea un alto rendimiento, opte por Java.
Sin embargo, si quieres un rendimiento más rápido, opta por C/C++. Si quieres el mejor soporte para bibliotecas de terceros, opta por Python.

Paso 5: Codificar, refactorizar, probar, codificar un poco más

Una vez que te hayas decidido por la plataforma de desarrollo, estarás listo para empezar a programar. Recuerde que los sistemas embebidos son dispositivos sensibles con recursos limitados de hardware y software. Por lo tanto, es de vital importancia tener en cuenta las mejores prácticas en relación con la seguridad y el rendimiento de las aplicaciones.

Las revisiones de código ayudan a optimizar el código e identificar cualquier error potencial. También debes realizar las pruebas con el mayor rigor posible. Asegúrese de compilar una lista exhaustiva de todos los casos de prueba a los que pueda enfrentarse el dispositivo cuando se utilice en producción.

Paso 6: Mantenimiento y soporte

Al igual que cualquier otra aplicación o dispositivo, el ciclo de vida no termina cuando se envía e instala el dispositivo integrado. A medida que el dispositivo se utiliza en la producción, se identifican nuevos casos de uso que requieren la adición de nuevas funciones. Cualquier error reportado también puede requerir la publicación de nuevas actualizaciones de firmware.

Principales lenguajes de programación embebidos

Hay muchas organizaciones acreditadas, como IEEE y TIOBE, que clasifican los lenguajes de programación según su popularidad y uso. Sin embargo, independientemente de si marca la Índice TIOBE, o el Espectro IEEE, notarás un tema común.

Los 3 lenguajes principales son siempre C, Python y Java. El índice TIOBE de julio de 2021 sitúa a C en el puesto #1, a Java en el #2 y a Python en el #3. Según el ranking de lenguajes de programación embebidos de IEEE Spectrum, el orden es: Python, Java y, a continuación, C.

¿En qué se diferencia el firmware escrito en Java, C o Python?

Los diferentes lenguajes administran la memoria, las interacciones con el sistema operativo y el tiempo de ejecución de diferentes maneras. Por ejemplo, las aplicaciones Java se ejecutan en un entorno de ejecución especializado conocido como Java Virtual Machine o JVM.

La administración de la memoria en C/C++ es manual, sin embargo, en Java o Python, no tiene que preocuparse por administrar la memoria usted mismo; el lenguaje lo hace por usted. Además, en C, tienes que recoger la basura tú mismo; es decir, si asignas una memoria de forma dinámica, tienes que liberarla tú mismo de forma explícita. Si no lo haces, se producirá una pérdida de memoria. En Java o Python, la recolección de basura se realiza automáticamente. Sin embargo, C es intrínsecamente mucho más rápido que Java o Python.

Una cosa de la que carecen C y Java (pero especialmente C) en comparación con Python es la disponibilidad de bibliotecas de terceros. Python tiene una base de datos de bibliotecas más rica, lo que facilita mucho a los desarrolladores la adición de ciertas funciones.

En general, elige C si:

  • Desea una interfaz de bajo nivel con el sistema operativo y el hardware.
  • Quieres el mejor rendimiento posible.
  • Sus desarrolladores son expertos en C/C++.
  • No necesitas demasiado soporte externo o de terceros.

Opta por Python si:

  • Quiere implementar algoritmos de ciencia de datos o aprendizaje automático.
  • Quieres un soporte completo para bibliotecas de terceros.
  • Está de acuerdo con cambiar la velocidad por la facilidad de uso.
  • Tiene una experiencia limitada en el desarrollo integrado.
  • No necesita una interfaz de bajo nivel con el sistema operativo o el hardware.

Opta por Java si:

  • Estás creando aplicaciones web.
  • Quieres más facilidad de desarrollo que en C, pero aun así quieres más rendimiento que Python.
  • No necesitas demasiado soporte externo o de terceros.

¿C dejará poco a poco de ser una de las mejores opciones para el desarrollo integrado?

Los lenguajes de alto nivel facilitan la codificación al abstraer las complejidades que simplemente no se pueden evitar en C. Sin embargo, durante décadas, a pesar del lanzamiento de lenguajes y marcos más sofisticados, C ha seguido siendo una de las mejores opciones en el desarrollo integrado.

Esto se debe a que la velocidad, el rendimiento y la confiabilidad que ofrece siguen siendo incomparables. El hecho de que Python y gran parte del ecosistema de Java (incluidos el tiempo de ejecución, el lenguaje y el compilador) estén escritos en C dice mucho sobre la eficiencia y durabilidad del lenguaje.

Dicho esto, C es innegablemente más difícil de aprender para los nuevos desarrolladores, que prefieren la simplicidad de lenguajes como Python. Esto está creando una disminución notable en el tamaño de la comunidad de desarrolladores de C. El aumento del desarrollo de aplicaciones de inteligencia artificial y aprendizaje automático también está impulsando a las personas a elegir Python en lugar de C, simplemente porque ofrece una mayor compatibilidad con las bibliotecas.

Es importante recordar que Python solo recientemente pasó a formar parte del mejor lenguaje de programación embebido debate. Sí, es posible que su adopción siga aumentando en los próximos años, pero no esperamos que C deje de ser la mejor opción para el desarrollo integrado.

Por qué la codificación segura es importante en C/C++

Muchas cosas pueden salir mal al escribir código en C/C++. Acceder a una dirección de memoria que ya no apunta a datos válidos o compartir datos de forma incorrecta entre subprocesos puede provocar que toda la aplicación se bloquee.

En el caso de los dispositivos integrados, estas implicaciones son mucho más importantes, ya que un fallo en su interior puede provocar que una máquina mucho más grande deje de funcionar. Por ejemplo, si el módulo de piloto automático de un automóvil se apaga, el automóvil ya no podrá evitar los obstáculos.

Estas son más razones por las que la codificación segura de las aplicaciones C/C++ es tan importante:

  • El manejo inseguro de la memoria (punteros nulos, daños en la memoria, desbordamientos de pilas, desbordamientos de búferes y pilas) hace que toda la aplicación se bloquee.
  • Los punteros son parte integral de C y C++. Manejarlos requiere el máximo cuidado y un conocimiento profundo de los conceptos subyacentes.
  • La recolección de basura es manual. Esto obliga a los programadores a eliminar explícitamente cualquier memoria asignada dinámicamente. La memoria que no esté libre o se libere de forma incorrecta puede provocar pérdidas de memoria o daños.
  • Hay una falta de API estandarizadas para estructuras de datos avanzadas (por ejemplo, tablas hash, conjuntos, etc.), lo que obliga a los desarrolladores a reinventar la rueda.

Es absolutamente fundamental que los desarrolladores estén capacitados en codificación segura para aplicaciones C/C++. Secure Code Warrior proporciona una plataforma de aprendizaje personalizada con desafíos, cursos y evaluaciones interactivos que pueden permitir a los desarrolladores escribir código C/C++ seguro. En este caso, estamos hablando de contenido específico para language:framework, y no solo de una modificación de la formación conceptual general.

Echa un vistazo cómo ayudamos a las industrias automotriz y de transporte. O prueba un desafío de codificación centrado en la incrustación ¡hoy para experimentar cómo capacitamos a los desarrolladores para que escriban aplicaciones integradas seguras!

Table des matières

Télécharger le PDF
Veuillez consulter la ressource
Souhaitez-vous en savoir davantage ?

Secure Code Warrior fait du codage sécurisé une expérience positive et attrayante pour les développeurs à mesure qu'ils améliorent leurs compétences. Nous guidons chaque codeur le long de son propre parcours d'apprentissage, afin que les développeurs compétents en matière de sécurité deviennent les super-héros quotidiens de notre monde connecté.

En savoir plus

Secure Code Warrior là pour aider votre organisation à protéger le code tout au long du cycle de vie du développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez administrateur AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez réserver une démonstration.Télécharger
Partager sur :
marques LinkedInSocialLogo x
Centre de ressources

Ressources pour débuter

Plus de publications
Centre de ressources

Ressources pour débuter

Plus de publications