Herramientas para Diseño de Sistemas Embebidos en C/C++

Visión General

Los diseñadores tradicionalmente han utilizado lenguajes de programación como C para desarrollar sistemas embebidos basados en arquitectura de microprocesadores o microcontroladores. La popularidad de C ha dado lugar a un gran ecosistema de opciones tecnológicas de herramientas como bibliotecas, compiladores y sistemas operativos. Los arreglos de compuertas programables (FPGAs) son una tecnología novedosa en el espacio embebido que proporciona la capacidad de crear lógica digital reconfigurable utilizando lenguajes de descripción de hardware. Para representar el hardware y aprovechar la naturaleza paralela de alto rendimiento de los circuitos digitales, los lenguajes de descripción de hardware ofrecen semántica muy diferente a lo que están acostumbrados a usar los ingenieros de software. Al brindar entornos de desarrollo para FPGAs que proporcionan características de programación familiares para los ingenieros de software, los desarrolladores de sistemas embebidos pueden obtener beneficios por usar FPGAs en sus diseños.

Los diseñadores de sistemas embebidos que trabajan con hardware de NI pueden escoger entre una variedad de lenguajes de programación y herramientas al diseñar sus sistemas. Utilice este documento para aprender cómo programar sistemas embebidos de NI y descargar las herramientas de software que necesita.

Contenido

Introducción a la Arquitectura de Sistemas Embebidos de NI

La plataforma de E/S reconfigurables (RIO), consta de dos dispositivos programables: un microprocesador ejecutando un SO en tiempo real (RTOS) y un FPGA. Esto le permite dividir código entre el FPGA y el RTOS con base en la necesidad de cada tarea individual.

Figura 1. Arquitectura de Hardware Embebido de NI

Hardware Reconfigurable de NI

La introducción de los FPGAs en el diseño de sistemas embebidos ha hecho posible crear lógica digital de alto rendimiento sin la necesidad de un diseño ASIC personalizado. Tradicionalmente, el desarrollo de FPGA ha sido realizado con lenguajes de descripción de hardware basados en texto como VHDL o Verilog, y el código es escrito por ingenieros de diseño digital. Desafortunadamente, debido a la desafiante semántica del lenguaje, estos lenguajes de descripción hardware hacen que sea difícil aprovechar todas las capacidades del diseño de FPGA. Así lo demuestra la demanda de industrias embebidas por encontrar abstracciones de más alto nivel para el diseño de FPGA, como herramientas para síntesis de C a compuertas lógicas o lenguajes de programación gráfica como G en LabVIEW FPGA.

Figura 2. Arquitectura de Software de Sistemas Embebidos de NI

 

Arquitectura de Software Embebido de NI

RTOS - Usted tiene la flexibilidad de programar el procesador embebido usando LabVIEW Real-Time, C/C++, matemática textual o una de estas combinaciones. Usted puede elegir entre varias arquitecturas de software para que pueda integrar código fuente existente de proyectos anteriores al aprovechar las características de LabVIEW para ahorrar tiempo de desarrollo.

FPGA - LabVIEW ofrece un lenguaje de programación muy completo, por lo que si usted está familiarizado con lenguajes de programación basado en texto como C, usted puede sentirse cómodo usando el entorno y aprovechar una nueva plataforma de hardware--FPGA.

 

Seleccionar una Plataforma de Hardware Embebido de NI

El hardware RIO de NI ofrece la mejor plataforma comercial para resolver cualquier tarea demandante de control y monitoreo. Este enfoque basado en una plataforma, brinda a los pequeños equipos la seguridad para construir sistemas embebidos innovadores sin desperdiciar tiempo de desarrollo y costos en diseño personalizado.

CompactRIO

La plataforma CompactRIO ofrece un sistema embebido reconfigurable de bajo costo diseñado para aplicaciones que requieren alto rendimiento y fiabilidad. El sistema combina una arquitectura embebida abierta con un tamaño pequeño, extrema robustez y módulos industriales de E/S intercambiables en vivo. La plataforma es un sistema embebido en un chasis robusto, diseñado para entornos industriales. Además de la familia CompactRIO, la plataforma Single-Board RIO ofrece la misma arquitectura, sin empaque.

Basados en PC o PXI

PXI es una plataforma robusta basada en PC para sistemas de medidas y automatización. PXI combina las características de bus de datos de PCI con el paquete Eurocard modular de CompactPCI y después añade buses de sincronización especializada y características importantes de software. PXI es una plataforma de implementación de alto rendimiento y bajo costo para aplicaciones tales como pruebas de manufactura, militares y aeroespaciales, monitoreo de máquinas, automotrices y pruebas industriales. Desarrollado en 1997 y lanzado en 1998, PXI es un estándar abierto en la industria gobernado por la PXI Systems Alliance (PXISA).

 

LabVIEW para Desarrollo de FPGA

LabVIEW es ideal para la programación de FPGA ya que representa el paralelismo y el flujo de datos de forma clara. Con el Módulo LabVIEW FPGA, los ingenieros y científicos con experiencia en C, pueden aprovechar los FPGAs en sus diseños sin la necesidad de aprender diseño de hardware. Además, el API de FPGA Interface C ofrece una capa de comunicación entre el FPGA y la aplicación en tiempo real para control de E/S y escritura de datos. Con este API, usted puede usar las herramientas gráficas de LabVIEW para programar el FPGA y elegir ya sea LabVIEW o C/C++ para programar el procesador del sistema. 

LabVIEW FPGA le ayuda a crear hardware personalizado de medidas y control sin lenguajes de descripción de hardware de bajo nivel o diseño a nivel de tarjeta. Usted puede usar este hardware personalizado para rutinas únicas de temporización y disparo, control de ultra alta velocidad, establecer interfaz con protocolos digitales, procesamiento digital de señales (DSP) y muchas otras aplicaciones que requieren fiabilidad de hardware de alta velocidad y determinismo estrecho.

Recursos para LabVIEW FPGA

» Tutorial: Introducción a la Tecnología FPGA: Los 5 Beneficios Principales 
» Tutorial: Comenzar a Trabajar con LabVIEW FPGA
» Descarga: Evalúe el Módulo LabVIEW FPGA

Figura 3. Ciclos Temporizados en LabVIEW FPGA

 

Desarrollo de Aplicaciones en Tiempo Real en C/C++

Con diferentes arquitecturas de software para elegir, los programadores primero deben identificar los requerimientos de su proyecto y relacionarlos con un diseño de software óptimo. Deben considerar los requerimientos técnicos como las expectativas del rendimiento del software, así como requerimientos de negocio como fechas de entrega de proyectos, reutilización de código existente y las capacidades de sus equipos para distintos lenguajes de programación. 

Por ejemplo, los diseñadores del sistema deben decidir cómo aprovechar al máximo los beneficios de productividad de LabVIEW para programación en tiempo real, y al mismo tiempo integrar código C/C++ existente de proyectos anteriores. Una solución es llamar bibliotecas compartidas de C o C++ desde una aplicación de LabVIEW, la cual utiliza la programación de tareas paralelas inherente en LabVIEW. Con este enfoque los diseñadores pueden ahorrar aún más esfuerzo de desarrollo,  al usar las funciones de procesamiento de señales de LabVIEW integradas o algoritmos .m con el Módulo LabVIEW MathScript. Alternativamente, los programadores pueden desarrollar, depurar e implementar aplicaciones en el procesador embebido, escritas completamente en C o C++ usando Eclipse o cualquier otro entorno de desarrollo integrado (IDE) y así obtener los beneficios de LabVIEW para la programación del FPGA.

Considere estos cuatro patrones básicos de diseño.

Figura 4. Arquitecturas de Diseño de Software Embebido Basado en C/C++

 

 LabVIEW para Sistemas de Tiempo Real y FPGA

Este enfoque simplifica el proceso de desarrollo, ya que los programadores pueden usar el mismo lenguaje y entorno de programación de LabVIEW para la aplicación en tiempo real y el código FPGA con los módulos LabVIEW Real-Time y LabVIEW FPGA. LabVIEW también ofrece la opción de usar el RIO Scan Engine, el cual expone a cada módulo de E/S directamente en LabVIEW Real-Time sin requerir programación del FPGA.

 

 Llamar Aplicaciones o Bibliotecas C/C++ desde LabVIEW

Al usar LabVIEW para programar la aplicación principal en tiempo real, los desarrolladores pueden aprovechar las funciones integradas para procesamiento de señales y comunicación en red. Además, LabVIEW automáticamente pone en paralelo secciones independientes del código, por lo que los programadores pueden evitar el manejo manual de múltiples threads. Sin embargo, pueden reutilizar el código de C o C++ existente al llamar bibliotecas compartidas de C/C++ desde LabVIEW o ejecutar aplicaciones C/C++ en paralelo al ejecutable de LabVIEW Real-Time. Los programadores pueden elegir entre varias implementaciones para integrar una biblioteca compartida de C/C++ o comunicarse con una aplicación externa:

    • Call Library Function Node de LabVIEW - Use esta función para llamar una función de una DLL de C/C++ o biblioteca compartida de Linux directamente desde LabVIEW. Configure el Call Library Function Node para especificar la biblioteca, función, parámetros, valor de retorno para el nodo, convenciones de llamada y llamada de función. Los tipos de datos de LabVIEW se pueden pasar como entradas y regresar como salidas a la función de la biblioteca de C/C++.
    • System Exec VI - Use esta función para ejecutar o iniciar otra aplicación de línea de comando o archivo de script de Linux desde su código LabVIEW. Usted puede incluir cualquier parámetro con su secuencia de comandos que ese comando soporte. Únicamente Linux Real-Time ofrece esta característica.
    • Comunicación Local - Los programas paralelos también pueden comunicarse entre ellos usando funciones TCP/IP con dirección localhost para pasar datos de un lado a otro.

Para compilar su código C/C++ para hardware embebido de NI, consulte la sección Herramientas de Desarrollo en C/C++, a continuación, para encontrar las herramientas C/C++ adecuadas para su hardware. 

Nota: Algunas de estas arquitecturas son soportadas únicamente con Linux Real-Time. Ejecutar una aplicación en paralelo a una aplicación de LabVIEW Real-Time o usar el System Exec VI, es únicamente soportado en dispositivos embebidos que ejecutan Linux Real-Time.

 

 Llamar Bibliotecas de LabVIEW desde una Aplicación de C/C++ en Tiempo Real

Si su aplicación principal en tiempo real es escrita en C o C++, aún puede usar funciones de análisis de LabVIEW para procesamiento de señales al desarrollar una biblioteca compartida de LabVIEW y llamarla desde su código C/C++. 

» Aprenda Cómo Desarrollar Bibliotecas Compartidas de LabVIEW para Usar Aplicaciones Externas

Para evitar conflictos al transferir datos y controlar el FPGA, abra una sola referencia para el FPGA ya sea en código LabVIEW o C/C++. En este patrón de diseño, el control y la transferencia de datos al FPGA son manejados por el programa de C/C++ al usar el FPGA Interface C API descrito en la sección 4. Para compilar su código C/C++ para hardware embebido de NI, consulte las secciones de Herramientas de Desarrollo en C/C++ a continuación, para encontrar las herramientas de C/C++ adecuadas para su hardware.

 

 Aplicación en Tiempo Real en C/C++

Usted también puede desarrollar, depurar e implementar aplicaciones al procesador embebido abierto con código escrito completamente en C o C++ usando Eclipse o cualquier otro entorno de desarrollo integrado (IDE) y aún así beneficiarse con LabVIEW para programación del FPGA. El FPGA Interface C API ofrece una capa de comunicación entre el FPGA y la aplicación en tiempo real para control de E/S y escritura de datos. Esto ofrece una interfaz para tener acceso a controles, indicadores, FIFOs DMA, interruptores y arreglos del FPGA. 

Hay herramientas y compiladores de C/C++ compatibles disponibles para todos los productos embebidos de NI. Consulte las secciones de Herramientas de Desarrollo en C/C++ a continuación para encontrar la herramienta C/C++ adecuada y tutoriales para desarrolladores para su hardware embebido de NI.

 

Usar el FPGA Interface C API

El FPGA Interface C API facilita que los desarrolladores de C/C++ aprovechen LabVIEW FPGA y el hardware embebido de NI para aplicaciones de control y adquisición embebidos. Con el FPGA Interface C API, los desarrolladores pueden usar las herramientas gráficas de LabVIEW para programar el FPGA en hardware de NI y programar el RTOS usando herramientas de C/C++ como Eclipse, Wind River Workbench o las herramientas GNU Compiler Collection (GCC).

El FPGA Interface C API puede descargarse gratis en ni.com/downloads. El API ofrece una capa de comunicación entre el FPGA y la aplicación en tiempo real para control de E/S y escritura de datos. Una vez que el código de LabVIEW FPGA es desarrollado, se genera un archivo header, que proporciona referencias de C a los controles, indicadores, FIFOs DMA, interruptores y arreglos de FPGA. El FPGA Interface C API no ofrece una interfaz al RIO Scan Engine.

Los siguientes pasos describen el proceso de desarrollo:

  1. Desarrolle y compile su VI de LabVIEW FPGA. Esto produce un bitfile.
  2. Inicie el generador del FPGA Interface C API. Se genera un archivo header de C, con base en bitfile. 
  3. Incluya el archivo header en su aplicación de C/C++ 
  4. Desarrolle e implemente la aplicación en el dispositivo embebido.

 

Recursos para el FPGA Interface C API

» Descarga: FPGA Interface C API
» Manual del Usuario: Ayuda del FPGA Interface C API 

 

Herramientas de Desarrollo en C/C++ para NI CompactRIO

Los sistemas embebidos CompactRIO incorporan el procesador embebido más reciente y tecnologías de sistema operativo en tiempo real (RTOS) luego de que son lanzadas y adoptadas por la industria. La familia NI RIO abarca procesadores x86 y PowerPC y ahora incluye sistemas basados en ARM. Estos productos son compatibles con un gran número de herramientas y compiladores de C/C++. Para determinar qué tecnología de procesador funciona con su hardware embebido, consulte este documento Documento de Soporte o la Figura 5.


Figura 5. Herramientas de Desarrollo en C/C++ para CompactRIO

 

SO Linux Real-Time en ARM  y x86


National Instruments ha invertido en Linux Real-Time, un RTOS basado en Linux. Esta tecnología ofrece un nuevo nivel de apertura para la plataforma CompactRIO que le brinda la habilidad de tener acceso a la vasta biblioteca de aplicaciones e IP de Linux proporcionadas por la comunidad junto con su código de LabVIEW. Además, el SO Linux ofrece mejor portabilidad del código C/C++ existente y los desarrolladores pueden usar Eclipse o el IDE de su preferencia para desarrollar, depurar e implementar código en el dispositivo CompactRIO. 

Aprenda más sobre Dispositivos CompactRIO basados en Linux Real-Time


Herramientas de Software Requeridas
  1. RTOS— por lo menos uno de los siguientes:
    1.  Módulo LabVIEW Real-Time
    2.  Eclipse (incluye GNU/Linux para compilador ARM), 
    3. Compilador GNU/Linux:
      • Compilador C++ & GNU C para ARMv7 Linux (servidor Linux)
      • Compilador C++ & GNU C para ARMv7 Linux (servidor Windows)
      • Compilador C++ & GNU C para x64 Linux (servidor Linux)
      • Compilador C++ & GNU C para x64 Linux (servidor Windows)
  2. Capa de comunicación entre RTOS-FPGA— FPGA Interface C API (versión 13.0 o posterior)
  3. Desarrollo de FPGA— todos los siguientes son requeridos:
    1. LabVIEW (Full o superior)
    2. Módulo LabVIEW FPGA
    3.  Controlador de dispositivo NI-RIO (versión 2013 o posterior)

Recursos para Desarrollador

» Tutorial: Comenzar a Trabajar con Herramientas de Desarrollo de C/C++ para NI Linux Real-Time, Edición Eclipse
» Tutorial: Integrar Código C con LabVIEW en un CompactRIO que Ejecuta NI Linux Real-Time
» Ejemplo: Ejemplo de FPGA Interface C API para NI Linux Real-Time y Eclipse
» Grupo de Usuarios: Comunidad de NI Linux Real-Time

 

RTOS VxWorks en PowerPC


Las versiones de CompactRIO y NI Single-Board RIO con PowerPC ejecutan el RTOS VxWorks de Wind River. Los archivos binarios pueden ser creados por cualquier herramienta que compila a la arquitectura PowerPC PPC60 y se conecta con bibliotecas estándares de VxWorks. National Instruments recomienda usar Wind River Workbench para desarrollar bibliotecas para VxWorks, ya que ofrece habilidades avanzadas de depuración, un entorno de desarrollo completo y soporte técnico. 


Herramientas de Software Requeridas
  1. RTOS— por lo menos uno de los siguientes:
    1.  Módulo LabVIEW Real-Time  
    2.  GCC
    3. Wind River Workbench
  2. Capa de comunicación entre RTOS-FPGA— FPGA Interface C API
  3. Desarrollo de FPGA— todos los siguientes son requeridos:
    1. LabVIEW (Full o superior)
    2. Módulo LabVIEW FPGA
    3. Controlador de dispositivo NI-RIO

Recursos para Desarrollador

» Tutorial: La Guía Definitiva: Programar Controladores en Tiempo Real con VxWorks de NI en C/C++
» Tutorial: Desarrollar Bibliotecas Compartidas para el cRIO-901x y Otros Dispositivos VxWorks

 

RTOS Phar Lap en x86


Las versiones x86 del hardware CompactRIO ejecutan el RTOS Phar Lap. National Instruments ha probado el uso de los compiladores de Visual C++ 2003 y 2008 para crear archivos binarios de C/C++ para esta serie de dispositivos embebidos. 


Herramientas de Software Requeridas
  1. RTOS— por lo menos uno de los siguientes:
    1. Módulo LabVIEW Real-Time
    2. Visual C++
  2. Capa de comunicación entre RTOS-FPGA— FPGA-Interface C API
  3. Desarrollo de FPGA— todos los siguientes son requeridos:
    1. LabVIEW (Full o superior)
    2.  Módulo LabVIEW FPGA  
    3.  Controlador de dispositivo NI-RIO

 

Herramientas de Desarrollo en C/C++ basadas en PC o PXI 

El hardware PXI no incluye un FPGA integrado. La plataforma es completamente configurable para que usted pueda seleccionar el chasis, controladores y módulos apropiados para su aplicación. Usted puede elegir entre varios módulos PXI de la Serie R Series basados en FPGA junto con cientos de otros módulos de hardware PXI hardware para alcanzar máxima flexibilidad al diseñar sus sistemas. 

NI ofrece LabWindows™/CVI, un entorno de desarrollo integrado (IDE) ANSI C, para simplificar el desarrollo de sistemas embebidos basados en PC y PXI con x86. LabWindows/CVI no incluyen un compilador o bibliotecas de C++. Los desarrolladores de C++ pueden usar los IDEs de su preferencia para desarrollar aplicaciones para PXI o PC. 

Figura 7. Herramientas de Desarrollo C/C++ Basadas en PXI o PC

LabWindows/CVI puede ayudarle a acortar su tiempo de desarrollo con APIs de controladores, asistentes de configuración de E/S, bibliotecas de medidas y análisis, y extensas herramientas de depuración y optimización de código.

Usted puede reutilizar código fuente de C existente en su aplicación LabWindows/CVI y usar el Módulo LabWindows/CVI Real-Time para implementar y depurar en un dispositivo remoto en tiempo real sin salir del IDE. NI ofrece APIs intuitivos y de alto rendimiento para todo el hardware de PXI y PC, así como el FPGA Interface C API para control de E/S y escritura de datos entre la aplicación en tiempo real y el hardware FPGA.


Herramientas de Software Requeridas
  1. RTOS— por lo menos uno de los siguientes:
    1.  LabVIEW y Módulo LabVIEW Real-Time
    2.  LabWindows/CVI y Módulo LabWindows/CVI Real-Time
  2. Windows— LabVIEW, LabWindows/CVI para ANSI C u otro IDE para C/C++
Se Requiere Software Adicional si se Usa Hardware FPGA PXI de la Serie R
  1. Capa de comunicación entre Procesador y FPGA— FPGA-Interface C API
  2. Desarrollo del FPGA— Módulo LabVIEW FPGA

Recursos para Desarrollador

» Página del Producto: Aprenda más sobre LabWindows/CVI
» Tutorial: Desarrollar una Aplicación Principal de Interfaz a un FPGA de la Serie R en LabWindows/CVI
» Descarga: Evalúe el IDE LabWindows/CVI  

 

The mark LabWindows is used under a license from Microsoft Corporation. Windows is a registered trademark of Microsoft Corporation in the United States and other countries.