Supongo que está comenzando, así que mencionaré algunos problemas que requieren conceptos avanzados en C y sistemas integrados.
1. Ser capaz de usar primitivas RTOS (mutex, semáforo, hilos múltiples). Aún mejor si puedes codificar estas primitivas tú mismo.
2. Ser capaz de codificar una pila de protocolos de red bastante complicada. Esto generalmente implica tener una comprensión de las máquinas de estado, punteros, amortiguadores y resistencia.
- ¿Puedo obtener la lista de proyectos en sistema embebido?
- Cómo convertirse en un buen programador integrado
- ¿Cuáles son los pros y los contras entre un sistema en un chip y los procesadores integrados?
- ¿Cuál es el mejor instituto de capacitación para un sistema integrado en Bangalore, excepto Vector?
- ¿Cómo escribe un programador ISP AVR en un microcontrolador AVR?
3. Ser capaz de usar conceptos de OO en C. Los patrones de Adaptador, Estado, Observador pueden usarse en C. También el uso elegante de punteros de función muestra la comprensión del buen diseño. Las funciones de devolución de llamada en todo tipo de bibliotecas, como una biblioteca de gráficos, utilizan este enfoque.
4. Escribir un gestor de arranque e implementar la capacidad de actualización de firmware. Si ha escrito un gestor de arranque, ha entendido una parte muy importante de una computadora.
5. Poder utilizar cómodamente periféricos como DMA, Timers, I2C, SPI, ADC, DAC, Crypto hardware, etc. Aparecen todo tipo de periféricos nuevos, así que prepárese para leer el manual de referencia e implementar controladores.
6. Escribir sus propias estructuras de datos como listas, árboles, búferes circulares. Implementación de una base de datos, algoritmos de procesamiento de señales como filtros digitales, etc. Esto es algo que debe hacer solo por diversión. Usa una biblioteca cuando puedas.
7. Habilidades de depuración. Una parte del mundo real es que, en última instancia, tendrá que lidiar con errores y habrá momentos en los que un error está tan profundamente incrustado y es tan difícil de reproducir que requerirá sintetizar muchas cosas que ha aprendido para encontrar la causa raíz. .
Para mí, puedes hacer todo lo anterior y aún no ser un maestro. Por ejemplo, si usa números mágicos en todo su código, diré que se ha perdido algo fundamental. Ser un maestro se trata tanto de resolver problemas como tener la disciplina de tratar su diseño y código como un arte. Nunca deja de pensar en cómo puede mejorar el código y el diseño. Es algo de lo que puedes estar orgulloso. Es algo que otros leerían y admirarían. Desafortunadamente, el software no recibe el mismo nivel de escrutinio que una espada Samurai. La función es importante pero la forma generalmente se pierde. Es por eso que si quieres ser un maestro, debes revisar tu código, y también estudiar y aprender técnicas de otros. Un maestro puede mirar el software y señalar qué es genial y qué se puede mejorar en él. Significa desarrollar intuiciones que se vuelven automáticas después de años de agudizar sus habilidades. Y para hacer eso, uno debe resolver muchos problemas, de diferentes maneras y ser implacable.