Quisiera algunos consejos para aquellos que quieran convertirse en un buen desarrollador de software integrado o que quieran mejorar en esta área.
¿Qué debo aprender sobre hardware y software?
¿Qué libros son los más recomendados? Blogs
Al final, ¿cómo podría pasar de ser un aficionado principiante a un excelente profesional?
Para los libros, recomendaría profundizar en la historia. La mayoría de las técnicas de software integradas actuales provienen de la vanguardia de antaño.
Como todo, practica diariamente.
fuente
Las otras respuestas son geniales, pero la mayor diferencia entre un aficionado y un profesional debe ser una mentalidad sobre la calidad. Por lo tanto, haga que su proyecto funcione hasta el final, no se detenga cuando haya terminado el 80% con un proyecto. Tómelo todo, demuestre que funciona y documente correctamente.
Asegúrese de que su código sea legible y mantenible.
Y no olvides divertirte también :)
fuente
Además de lo obvio, como aprender C y comenzar con una placa de desarrollador, querrás aprender a leer hojas de datos de microcontroladores .
Los fabricantes agregan más y más funciones a los microcontroladores, que por lo tanto se vuelven cada vez más complejos. La hoja de datos no solo proporciona características eléctricas (que es más interesante para el ingeniero electrónico que para el desarrollador de software), sino también una descripción detallada de los registros, mapas de memoria, etc.
Al leer una hoja de datos puede parecer desalentadora, pero no entenderla puede causar un dolor de cabeza más severo en la fase de depuración.
fuente
'Incrustado' es un término un poco cargado ...
En algunos aspectos, cualquier sistema dedicado a ejecutar una sola aplicación podría llamarse un sistema integrado, siempre y cuando haya algo de hardware que controlar. Podría decirse que puede llamar a un PPC604 de 400MHz con 2GB de RAM que ejecuta una aplicación Java encima de Linux como un sistema integrado, si es que controla un proceso a través de módulos de E / S locales. Por otro lado, un arduino que solo ejecuta algún tipo de aplicación de red mínima no sería un gran sistema integrado. Pero probablemente 'integrado' hace que la mayoría de las personas piense en controladores basados en flash con solo unos pocos cientos de bytes de RAM, sin sistema operativo para hablar y una gran cantidad de periféricos en chip.
Dicho esto, probablemente los dos mayores obstáculos que los programadores no integrados suelen enfrentar los sistemas integrados de aprendizaje son los registros e interrupciones de E / S.
Las interrupciones en realidad pueden ser el más fácil de los dos conceptos para los programadores no integrados, ya que los problemas principales con estos, la concurrencia y la programación basada en eventos, a menudo se encuentran en las aplicaciones convencionales. Lo que hace que las interrupciones sean dolorosas es darse cuenta de la extrema sensibilidad de un sistema a la calidad de su manejo de interrupciones, y las complejidades de lidiar con el hardware para eliminar la condición de interrupción y configurar el siguiente. Con una GUI, un punto muerto mata solo la aplicación. Con un controlador de interrupciones, un punto muerto hace que todo el sistema se bloquee.
Los dispositivos de E / S parecen ser el área que causa la mayor dificultad. Para los no iniciados, puede ser una sorpresa descubrir que leer este registro aquí tiene un efecto en ese registro allí . Escribir 1 para borrar bits. Bits de estado que se borran cuando se lee un registro de datos, etc. Hay tantas posibilidades con el hardware de E / S que no existe una regla general para tratarlo, excepto aprender a encontrar e interpretar las hojas de datos del dispositivo. Escribir un controlador de dispositivo para un puerto serie le enseñará mucho sobre la programación de E / S de bajo nivel.
Realmente no hay sustituto para aprender estas cosas que remangarse las mangas y programar algo de lenguaje directo C y / o ensamblador en el metal desnudo. Incluso el sistema integrado basado en Java mencionado anteriormente eventualmente necesita un controlador de dispositivo para la E / S, y esto significa en última instancia tratar con algo de C. La experiencia es el mejor maestro. Elija un microcontrolador, ya sea MSP430, TMS320, AVR, ARM, PIC, 68HC11, lo que sea, encuentre un kit de evaluación y cree algunos sistemas.
fuente
Lo que quieres aprender aquí es ensamblador para varias plataformas. C. C y la interacción del ensamblador. Diferentes herramientas GCC y no GCC. Cómo leer una referencia de hoja de datos / programadores (y darse cuenta de que todos tienen algunos errores o pueden ser engañosos, nunca confíe en ellos, el hardware gana a los documentos) y cómo leer o usar un esquema. Estos no son esquemas complicados normalmente. Algunas de las placas son buenas para interactuar en proyectos, lo que significa que no tienen basura en la placa en el camino, solo acceso directo a los pines de E / S. Pero eso no es lo mejor para aprender. Algo como un StellarisEl tablero, que es doloroso para los proyectos, tiene muchas cosas divertidas a bordo para aprender incrustado y aprender a tomar prestados / usar controladores o escribir los suyos propios de las hojas de datos. La mariposa Atmel AVR también es una buena placa si aún está disponible, puede necesitar soldar en su propio puerto serie para programarla o simplemente atascar algunos cables en los agujeros. Lo que le ofrece son algunos periféricos que puede aprender a programar.
Incluso si termina haciendo un trabajo incrustado que implica escribir aplicaciones usando SDK o llamadas de API en Linux o un RTOS (sin tocar hardware ni leer hojas de datos), el conocimiento anterior aún lo pondrá por delante del resto.
fuente
Este artículo (traducido automáticamente del portugués al inglés) tiene una buena visión general del desarrollo de una carrera como desarrollador de software embebido. Nota: el original está aquí .
Comienza describiendo las esferas de conocimiento que debe desarrollar:
Luego da los siguientes consejos para dominar estas áreas (y las desarrolla con más texto, estos son solo los encabezados):
fuente
Piénselo dos veces antes de convertirse en un ingeniero de software integrado. He tenido fases en mi carrera. He desarrollado software los primeros 5 años, después de pasar a ventas / marketing, lo hice durante 15 años, gestioné un negocio de más de 100 millones de dólares y ahora he vuelto al software.
Cuando vuelvo al software después de 15 años, recuerdo por qué me fui en primer lugar. Es difícil. Necesita concentración, varios cientos de líneas de código que se tocan y todos deben mantenerlo en la memoria. Incrustado es particularmente difícil.
También necesitas comprenderte a ti mismo. Si generalmente eres un tipo inteligente, meticuloso y paciente, serías un gran ingeniero. Si te falta alguno de esos, serás promedio en el mejor de los casos. Piénsalo. Si eres ultra inteligente y no eres paciente, no vale mucho porque no importa qué tan inteligente seas, una buena ingeniería requiere paciencia y atención al detalle.
También debe sentirse cómodo mirando las horas de código a la vez sin hablar. Observo que las personas con buenas habilidades sociales encuentran esto insoportable.
Si todo esto funciona, entonces lee todos esos grandes libros, haz los ejercicios y serás un gran ingeniero. Buena suerte.
fuente
Todos los demás dicen grandes cosas. Así que te daré un consejo general: leer leer leer leer leer leer leer leer!
Lea todos los artículos en http://embeddedgurus.com. Si no entiende algo, investigue. Si en la explicación de esas cosas encuentra algo que no comprende, lea un poco más. Estoy a punto de entrar en una posición de software integrado y mi experiencia es un puñado de proyectos profesionales en los últimos años y mucha lectura. La experiencia te permite probar cosas, pero la lectura te permite saber si las cosas que has probado se han hecho antes, tal vez mejor de lo que podrías. Le presenta conceptos con los que puede trabajar en cualquier circunstancia.
¡Acabo de leer!
fuente
Conviértase en un experto en C Comprenda los temporizadores y las comunicaciones en serie. Deberías ensuciarte las manos con él. Comprenda los protocolos de RF, ajústelos a sus necesidades. No solo pruebe a ciegas combinaciones de código mientras se depura. El código hace exactamente lo que le dices que haga. Lea el manual del usuario y la hoja de datos y luego realice un cambio si algo no funciona. Todo lo dicho y hecho, la única forma real de convertirse en un experto es practicar. Sigue construyendo aplicaciones. Pronto, se convertirá en una segunda naturaleza.
fuente