Primero, déjenme responder sobre la programación de sistemas embebidos.
Los dos lenguajes de programación más comunes para programar sistemas embebidos son C y Assembly. Aunque C ++, Java, Python, JavaScript, Lua y Rust también se usan en algunos sistemas integrados, no estoy seguro de qué tan ampliamente se aceptan los lenguajes posteriores como estándar de la industria.
Los sistemas integrados se pueden programar como bare-metal (sin sistema operativo) o con la presencia de un sistema operativo (versiones integradas de Linux o RTOS como VxWorks, FreeRTOS, QNX., Etc. o Windows CE o Windows IoT core).
- ¿Por qué preferimos un ciclo while en sistemas embebidos?
- ¿Qué sistema operativo Linux es mejor para sistemas integrados para principiantes?
- ¿Cuáles son algunas ideas de proyectos creativos con el microcontrolador 8051?
- ¿Puedo codificar en Python en lugar de C / C ++ para un área de investigación de sistemas integrados?
- ¿En qué se diferencian las características de los sistemas integrados de los sistemas de propósito general?
Si es de metal desnudo, entonces el objetivo (sistema integrado) necesita una PC con las herramientas adecuadas (IDE + programador Flash). Por ejemplo: Arduino Uno se programa con Arduino IDE y se compila para la arquitectura ATMEL AVR y el código se descarga con UART. Este tipo de sistemas son sistemas de compilación cruzada. La mayoría de los IDE se eligen del mismo fabricante, a saber, Code Composer Studio, Energyly de Texas Instruments; Keil de ARM, diseñador y creador de PSoC de Cypress., Etc. También tiene herramientas de desarrollo de Lauterbach y IAR Embedded Workbench.
Si es con la presencia de un sistema operativo como Raspbian en Raspberry Pi, debe actualizar el almacenamiento no volátil (en este caso, la tarjeta SD) con el sistema operativo. Y luego puede programar el sistema en el lenguaje de programación deseado. Por ejemplo: la mayoría de los teléfonos Android siguen este tipo de estrategia. El archivo de imagen de Android se busca desde la tarjeta SD para actualizar la memoria interna con el último sistema operativo (supongo que es un procedimiento similar para la actualización de OTA). También puede usar otras bibliotecas como Opencv, fastcv, v4l2, alsa, pilas de protocolos de comunicación, bibliotecas gráficas, QT / GTK + para aplicaciones GUI, openwrt, grub, u-boot. También puede construir su propio Linux para sus necesidades usando bitbake, yocto, openembedded., Etc. Algunos de ellos también usan núcleos BSD debido a la seguridad que proporciona sobre Linux.
En el caso de RTOS, el procedimiento es un poco diferente de los dos métodos anteriores. Cada RTOS puede tener un procedimiento diferente. En el caso de Keil RTX RTOS, uno tiene que incluir los archivos de encabezado de esa arquitectura de procesador de destino, usar las llamadas de función necesarias para la aplicación, luego todo el conjunto de archivos se compila y se descarga al sistema de destino. He visto un procedimiento similar para FreeRTOS + Eclipse IDE, VxWorks + Windriver workbench. Cada uno de los RTOS tiene diferentes llamadas al sistema. QNX era fácil de usar debido a los hilos POSIX que se encuentran comúnmente en los sistemas Linux.
También se siguen los estándares de codificación AUTOSAR y MISRA C.
Y llegando a la segunda parte, lo mencionaste como VLSI. VLSI tiene una amplia jerarquía. Tiene varias categorías como diseño digital, diseño analógico, diseño de señal mixta, diseño RF, diseño RTL, verificación OVM / UVM.
Que yo sepa, los diseñadores de VLSI usan lenguajes HDL como VHDL, Verilog y SystemC.
Para la verificación SoC / IP, SystemVerilog y C / C ++ se usan comúnmente.
También se utilizan secuencias de comandos TCL, Perl y Python.
Vivado, Xilinx ISE son las herramientas más utilizadas para programar FPGA.
También se utilizan herramientas EDA de Cadence, Synopsys y Mentor Graphics.
La industria de semiconductores ha visto un muy buen desarrollo en los últimos años. Se han producido muchas mejoras en las arquitecturas informáticas.
Hay arquitecturas heterogéneas como las que se ven en la placa Zed / Zynq que es una arquitectura APSoC (All SoPromable SoC: ARM9 Dual core + FPGA) de Xilinx. PSoC5 viene con ARM Cortex M3 con bloques analógicos y digitales programables.
Los DSP han sido tradicionalmente un procesador separado. Con las instrucciones ARM Cortex M4 + FPU + DSP, ahora todo es nuevo.
Las GPU se programan con OpenGL, CUDA, OpenCL, Vulkan, DirectX. Elegir entre estos es una discusión separada.
Qualcomm proporciona SDK para programar su SoC con características como Adreno GPU, Spectra ISP, Hexagon DSP., Etc.
La elección de una arquitectura está abierta ahora. X86, AMD64, ARM, MIPS, SHARC, núcleo patentado de señal mixta de TI utilizado en MSP., Etc.