SCW图标
英雄背景无分隔线
博客

Desarrollo de dispositivos y sistemas integrados: descripción general

Secure Code Warrior
发布于 2021 年 8 月 11 日
最后更新于 2026年3月6日

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!

查看资源
查看资源

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

感兴趣了解更多吗?

Secure Code Warrior ,使安全编码成为开发人员提高技能的积极和参与的经验。我们引导每个编码者沿着他们自己喜欢的学习途径前进,从而使具有安全技能的开发人员成为我们互联世界的日常超级英雄。

了解更多

Secure Code Warrior 您的组织在软件开发全生命周期中保护代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全管理员、开发人员、首席信息安全官,还是任何与安全相关的工作人员,我们都能助力您的组织降低不安全代码带来的风险。

预约演示
分享到:
领英品牌社交x 标志
作者
Secure Code Warrior
发表于2021年8月11日

Secure Code Warrior ,使安全编码成为开发人员提高技能的积极和参与的经验。我们引导每个编码者沿着他们自己喜欢的学习途径前进,从而使具有安全技能的开发人员成为我们互联世界的日常超级英雄。

本文由Secure Code Warrior的行业专家团队致力于让开发人员从一开始就具备构建安全软件的知识和技能。凭借在安全编码实践、行业趋势和现实世界见解方面的深厚专业知识。

分享到:
领英品牌社交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!

查看资源
查看资源

请填写以下表格以下载报告

我们希望获得您的许可,以便向您发送有关我们产品或安全编码相关主题的信息。我们将始终以最高标准谨慎处理您的个人数据,绝不会出于营销目的将其出售给其他公司。

发送
scw 成功图标
SCW 错误图标
要提交表单,请启用「分析」cookie。完成后请随时将其重新禁用。

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!

观看网络研讨会
开始
了解更多

点击下方链接,下载此资源的PDF文件。

Secure Code Warrior 您的组织在软件开发全生命周期中保护代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全管理员、开发人员、首席信息安全官,还是任何与安全相关的工作人员,我们都能助力您的组织降低不安全代码带来的风险。

查看报告预约演示
查看资源
分享到:
领英品牌社交x 标志
感兴趣了解更多吗?

分享到:
领英品牌社交x 标志
作者
Secure Code Warrior
发表于2021年8月11日

Secure Code Warrior ,使安全编码成为开发人员提高技能的积极和参与的经验。我们引导每个编码者沿着他们自己喜欢的学习途径前进,从而使具有安全技能的开发人员成为我们互联世界的日常超级英雄。

本文由Secure Code Warrior的行业专家团队致力于让开发人员从一开始就具备构建安全软件的知识和技能。凭借在安全编码实践、行业趋势和现实世界见解方面的深厚专业知识。

分享到:
领英品牌社交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!

目录

下载PDF
查看资源
感兴趣了解更多吗?

Secure Code Warrior ,使安全编码成为开发人员提高技能的积极和参与的经验。我们引导每个编码者沿着他们自己喜欢的学习途径前进,从而使具有安全技能的开发人员成为我们互联世界的日常超级英雄。

了解更多

Secure Code Warrior 您的组织在软件开发全生命周期中保护代码安全,并营造将网络安全置于首位的企业文化。无论您是应用安全管理员、开发人员、首席信息安全官,还是任何与安全相关的工作人员,我们都能助力您的组织降低不安全代码带来的风险。

预约演示下载
分享到:
领英品牌社交x 标志
资源中心

入门资源

更多出版物
资源中心

入门资源

更多出版物