2010-07-18 12 views
6

Empecé a aprender embedded y sus 2 idiomas principales (c y C++). Pero estoy empezando a darme cuenta de que a pesar de los simples requisitos de aprendizaje, embedded es todo un mundo en sí mismo. Y una vez que se ocupa de proyectos reales, comienza a darse cuenta de que necesita aprender más "cosas" específicas para el hardware utilizado en el dispositivo en el que está trabajando. Este es un problema que rara vez surgió con los proyectos solo de software en los que actualmente trabajo.Existen especialidades dentro de los campos integrados

¿Es posible fragmentar este campo en subcampos? Estoy pensando que aquellos con experiencia en el campo pueden haber notado que algunos tipos de proyectos son diferentes de otros tipos, lo que los ha llevado a tal vez a proponer sus propias categorías. Por ejemplo, cuando se encuentra con un proyecto, ¿puede pensar que está "fuera de su campo"? ¿Te ocurre eso a ti? y si es así, ¿cómo llamarías a tu subcampo o qué otros subcampos has encontrado?

+0

Podría agregar a las respuestas ya dadas, pero no agregaría mucho a lo ya dicho. Para obtener una visión general amplia de la extensión de los sistemas integrados, consulte http://embedded.com/ – Clifford

+2

La característica n. ° 1 que la mayoría de los desarrolladores de escritorio que ingresan al trabajo integrado parecen carecer de familiaridad con la programación de hardware, llevar placas , controladores de dispositivo, rutinas de servicio de interrupción, habilidades rudimentarias de electrónica digital lo suficiente como para entender la "guía del programador" que se produce para su CPU/MCU, etc. –

+1

Obtenga una placa real, como un kit de desarrollo Rabbit 2000, y cuando tenga real hardware, entonces estás aprendiendo cosas realmente integradas. De lo contrario, es toda teoría. :-) Mojarse las manos. No literalmente. Eso sería malo para sus placas de sistema integradas. –

Respuesta

12

Éstos son unos pocos sub-especialidades que se me ocurren: en lenguaje ensamblador

Especialista

  • Sip. Necesitas saber C y C++. Pero algunas personas también se especializan en ensamblaje. Estos son los expertos convocados para transferir un RTOS a un nuevo chip, o para exprimir cada gota de rendimiento de un sistema integrado altamente restringido (generalmente para ahorrar $$ por unidad).
    Probablemente esta persona no se necesita tanto en estos días ... pero ... aún así es crítica de vez en cuando.

controlador de dispositivos Especialista

  • vida cómoda entre un sistema operativo real o RTOS y una pieza de hardware. Esta persona normalmente se siente cómoda con las herramientas de laboratorio, como los "o-scopes" o los analizadores lógicos, pensando en "hexadecimal" y entendiendo la naturaleza crítica de los tiempos con HW. Esta persona lee las hojas de datos del dispositivo para divertirse por la noche y se entusiasma con la idea de crear el controlador de migración perfecto para algún dispositivo nuevo.

DSP Especialista

  • procesamiento de señales digitales parece ser su propio sub-especialidad de incrustado, aunque quizás un ingeniero de software puede no conocer los detalles exactos del algoritmo, y sólo se puede implementar lo que un sistema o ingeniero eléctrico requiere. Sin embargo, comprender la teoría de la tasa de muestreo, las FFT y algunos elementos fundamentales de "DSP" es práctico y tal vez necesario. Y, por lo general, debe tener en cuenta el tiempo y las restricciones de su hardware de destino (frecuencia de muestreo, ruido, bits por muestra, etc.).

Teoría de Control Specialist

  • Tal vez el mismo problema que con DSP: un sistema o ingeniero eléctrico puede proporcionar las especificaciones detalladas. Pero, de nuevo, la familiaridad con varios motores, sensores y otros controladores manejados por un microcontrolador sería genial. Incluya un diagrama de Bode, algunas transformaciones de Laplace o dos y algunas habilidades matemáticas superiores ... ¡eso no podría doler demasiado!

Networking Especialista

  • básicamente el mismo que el "networking" mundo del PC. Muchos dispositivos integrados están agregando funciones de conectividad de red en estos días. Sockets TCP/IP, http, etc. es bueno saber y entender cómo usar un dispositivo con recursos limitados. Agregue USB y Bluetooth para una buena medida.

interfaz de usuario Especialista

  • más y más dispositivos embebidos incluyen gráficos 2D, y ahora más incluir gráficos en 3D gracias a la influencia de los iPhones, etc.Aunque estos todavía son sistemas "gordos" según otros estándares de dispositivos integrados, aún son limitados. Simplemente lea un poco en la Guía de desarrollo de Android, y se dará cuenta de que todavía debe considerar la capacidad de respuesta, el rendimiento, etc., incluso en un teléfono celular de gama alta. http://developer.android.com/guide/practices/design/performance.html

Y luego, por supuesto, cada industria es una especialización en sí misma. Electrónica de consumo, militar, aviónica, robótica, máquinas industriales, dispositivos médicos, etc ...

Diviértete y buena suerte!

+0

Esta es una muy buena respuesta. Bien hecho. –

3

Seguro, por ejemplo, hay muchos sistemas operativos en uso en el mundo integrado. Trabajar con Linux incorporado es muy diferente a trabajar con un micro controlador desnudo.

2

"Aprender incrustado" me parece imposible. Trabajo en computadoras linux sin cabeza que controlan maquinaria grande, que se puede denominar como integradas (pero no es muy diferente de programar cualquier otra computadora, salvo algunas interfaces de hardware). Eso es totalmente diferente a un teléfono, y totalmente diferente de un sistema de aire acondicionado o domótica.

Los sistemas de control y dispositivos móviles serían dos categorías de 'integrados', pero estoy seguro de que hay muchos más.

+1

'" Aprender incrustado "me parece imposible. Ese es exactamente mi punto, me siento como" incrustado "está en todas partes. Casi necesitas especializarte en algo, o no estarás avanzando mucho en un área distinta. – cooper

+1

Aprendiendo C++ yc * es * factible :) – sje397

+1

No aprendes "incrustado", aprendes un entorno inicial y tus herramientas. Cambias el entorno (herramientas, CPU, respin de la placa) y boom, tienes que ajustar, cambiar y aprender un poco más. –

6

Sí, ciertamente hay varios subcampos. No creo que pueda enumerarlos todos de la parte superior de mi cabeza, pero por la forma en que lo veo, hay al menos 3 grandes subdivisiones, y a partir de ahí, están subdivididas. Hay microcontroladores, microprocesadores y cajas de arena/máquinas virtuales. Por ejemplo, usar un microcontrolador de 16 bits en un drive-by-wire sería un ejemplo del primero, un set-top-box como el TiVo y un ejemplo del segundo, y los iPhones y los Androids son los últimos.

Los microcontroladores son muy limitados, y generalmente ni siquiera se pueden programar en C++. La mayoría de ellos no tiene un sistema operativo en ejecución, o, los más caros, tienen un RTOS. Los decodificadores y todos los chips ARM/MIPS/SuperH4/Broadcom se parecen mucho más a una PC, ya que tienen una distribución de Linux ejecutándose en ellos y puedes encontrar la mayoría de las mismas instalaciones que una PC, y si puedes " Para encontrar uno, la compilación cruzada suele ser simple. Los muchachos en caja de arena, están bien, en caja de arena; así que es exactamente lo que suena, generalmente el SDK te aísla del hardware y no obtienes la "experiencia totalmente integrada".

+1

La mayoría de los microcontroladores pequeños pueden manejar al menos un subconjunto de C++ llamado "C++ incrustado", y la mayoría de los microcontroladores modernos de 32 bits medios/grandes como la serie de núcleos ARM Cortex M3, pueden manejar C++ fácilmente. –

+0

@Warren Mi experiencia con micro- ha sido que no pueden manejar C++, tal vez he tenido mala suerte. ;-) Pero sí, ARM Cortex X y similares pueden manejar casi cualquier cosa que le arrojes. – Gianni

2

Trabajo en linux embebido en dispositivos móviles, y es totalmente diferente de una imagen completa de Ubuntu donde escribo mi código y lo compilo para el dispositivo móvil.

primer lugar un sistema embebido se desnudaron para satisfacer las necesidades desnudas del dispositivo, muy a diferencia del sistema operativo de escritorio tradicional donde se puede tener tantas funcionalidades/bibliotecas, etc.

Las limitaciones de memoria son también una parte principal de un sistema integrado. Por lo tanto, todos los programas/aplicaciones deben escribirse para que quepan en la arquitectura. Este no puede ser una gran preocupación en un sistema tradicional.

Básicamente, mi punto es enfatizar que trabajar en embedded no se puede resumir en pocas líneas ya que cada una tiene un propósito diferente.

Sin embargo, la programación teniendo en cuenta la arquitectura general puede ayudarlo a ganar confianza si puede encajar en un proyecto o no.

PD: Puede que no sea bueno en la categorización, que es lo que espera la pregunta, sin embargo, esta es mi parte en los sistemas integrados.

2

Muchas buenas respuestas a esta pregunta. Creo que debes decidir qué significa la palabra software integrado para ti y/o qué quieres que signifique. Tal vez su definición no esté realmente integrada. Mi definición significa que no hay sistema operativo. Y eso probablemente molestará a muchos ingenieros de software integrados, pero los experimentados como los que ya han respondido entenderán nuestras variaciones en la definición y por qué. Creo que me llamarían especialista en microcontroladores, y eso es cierto, pero paso la mayor parte del tiempo en procesadores de velocidad completa con montones de memoria y ROM y E/S, redes, etc. Soy el tipo que trae el hardware la primera vez, elimina los errores de la placa y del chip, y luego lo transfiere a lo que la mayoría llamaría ingenieros de software integrados. Soy un ingeniero eléctrico por capacitación e ingeniero de software de oficio, así que estoy a horcajadas en la línea.

Es muy posible, y no es raro que pueda permanecer en el mundo incrustado en C/C++, nunca tener que leer una hoja de datos o un esquema, todo lo que haría sería llamar a api que alguien más ha creado. Hay un mercado grande y cada vez más grande para eso como lo que solía ser (mi definición de) verdadero incrustado, o rtos basado incrustado (que a menudo es llamadas API y no la experiencia completa) a esta cosa embebida en Linux que ha explotado. No tiene nada de malo, es bastante parecido a la experiencia de desarrollar código para una computadora de escritorio, pero tiene que intentar un poco más para obtener un código confiable, ya que puede estar basado en flash/rom y es posible que no quieran tenerlo semanalmente. actualizaciones mensuales a las unidades en el campo. Lo ideal es nunca actualizar, pero eso también se está volviendo más raro.

La rtos/embedded Linux api based embedded es, y puede ser, una experiencia diferente a la que yo llamo programación de aplicaciones. Es posible que aún desee o necesite leer una hoja de datos o un esquema, es posible que aún necesite saber ensamblador para la plataforma de destino.

Me gustan todas las respuestas hasta ahora a esta pregunta, supongo que estamos luchando por comprender lo que realmente está preguntando o lo que realmente está buscando en la vida, agregue a eso lo que disfrutamos de nuestras elecciones y obtiene esta mezcla de respuestas.

Veo algunos grupos, ciertamente hay cosas buenas del microcontrolador incrustado, pero incluso eso se está convirtiendo en bibliotecas y aplicaciones en lugar de en el metal, mira a la comunidad arduino y stellaris y un montón de otras. Paso mucho tiempo en el tablero y prueba, tienes que saber bastante acerca de todo el hardware del sistema, registros, esquemas, etc. Debes saber lo suficiente sobre el ensamblador tanto para reiniciarlo como para depurarlo. cosas mirando los vertederos de desensamble y buscando signos de vida en la E/S o en los buses de memoria, etc. Si tiene suerte, también podrá trabajar en el diseño de chips y ver cómo se ejecutan sus instrucciones en la simulación. El siguiente grupo es el gestor de arranque/sistema operativo. El hardware funciona lo suficientemente bien en este momento, las botas de chip, la memoria parece funcionar, rom está ahí. Este equipo escribe el código de arranque de producción y obtiene el producto del encendido en el sistema integrado, rtos, linux, vxworks, bsd, lo que sea. esto es un talento en sí mismo, cadena de herramientas, sistema de archivos raíz, etc. El siguiente grupo son las masas, los ingenieros de software que escriben las aplicaciones para ese sistema operativo, ahora algunos leerán hojas de datos, esquemas, etc., escribiendo controladores de dispositivos o apis para que otros lo usen, y el nivel más alto puede ser alguien que es toda la programación a nivel de aplicación, las llamadas api y sdk, algunas de las cuales pueden ser desarrolladas por la compañía, otras pueden comprarse u otras.

Conclusión: Absolutamente, hay especialidades dentro incrustadas. ¿Vas a saber todo? NO, tal vez hace 20 años, probablemente hace 40 años, hoy no, el campo es demasiado grande y amplio. ¿Qué es lo mejor que puedes hacer por ti mismo en este campo? Aprenda el ensamblador para algunos conjuntos de instrucciones diferentes. Los populares, arm definitivamente, versión de pulgar de brazo, tal vez mips o powerpc u otros. Si se inclina hacia los microcontroladores, aprenda (brazo, pulgar,) avr, pic (blah), msp430, quizás 8051. Lea algunas hojas de datos, los microcontroladores pueden enseñarle esto incluso si ese no es el campo que desea, toneladas de desarrollo sub $ 50/eval boards (sparkfun.com por ejemplo) que dan hojas de datos, esquemas simples, ensamblador, C, etc. Si eres un tipo de software, aprende a hablar tipo de hardware, el software y el hardware no hablan el mismo idioma, si puede evitar elegir lados y mantenerse neutral y hablar en los dos idiomas, usted se ayudará a sí mismo, a su carrera ya cualquier persona para quien trabaje. A pesar de los puntos de vista personales que pueda tener sobre los endians o la numeración de bit o byte, es probable que tenga que lidiar con cosas complicadas y hablar con clientes/compañeros de trabajo que solo pueden tratar con octal (sí realmente) o solo con el msbit de cualquier cosa es cero. Recomiendo buscar en verilog y tal vez vhdl. Al menos en un sentido legible, no necesariamente crearlo desde cero. Si ya puede programar y conocer C, es muy legible. Según el trabajo y los compañeros de trabajo, el verilog y el esquema pueden ser su única documentación que utiliza para escribir su software. Si no puedes hacerlo, pueden reemplazarte con alguien que pueda (en lugar de conseguir que la gente del hardware documente sus cosas).

+1

Oh, cuando alguien quiere que escriba un controlador de dispositivo Linux, ese es un nivel muy alto para mí y es doloroso, y puede causar dudas. Prefiero perforar el sistema operativo y escribir aplicaciones que no son específicas del sistema operativo. con el tiempo, puede desarrollar sus propias soluciones para escribir un programa que compila la capa de aplicaciones y las integradas (con capas hal separadas para cada una). –

Cuestiones relacionadas