Es una gran sensación cuando usted consigue su primera microcontrolador (MCU) programa que se ejecuta. Tal vez sólo sea el parpadeo de un LED sencilla, pero que está aprendiendo algo nuevo y empezando a sentir que usted lo entienda. Cuando hice esto por primera vez, lo vi como una invitación a ser creativo y divertirse. Siempre he encontrado, y siguen encontrando, que trabajar con microcontroladores es divertido. Y esto es especialmente cierto cuando estoy controlando directamente los registros internos de periféricos del MCU - también conocida como la programación del metal desnudo.
Tuve el lujo de aprender el lenguaje ensamblador de MCU libros de datos. Eso es cierto, yo uso la palabra "lujo". Mediante el estudio de software de un manual de hardware, a desarrollar una comprensión de cómo los unos y ceros se organizan para los opcodes y operandos. Usted puede imaginar el contador de programa que se ejecuta a través de la memoria. Usted puede entender cómo el puntero de pila se encarga de las direcciones de retorno de subrutinas y las rutinas de servicio de interrupción. Esto proporciona una base muy buena para la comprensión de cómo el código es ejecutado por la máquina - el metal desnudo. Pero usted no aprende nada de la estructura del software. Para mí, eso fue una experiencia de aprendizaje más larga.
Hay muchos estilos diferentes de escritura de software. Al momento de escribir el seguimiento de las entradas de blog me voy a referir a una forma - a mi manera. O por lo menos la forma en que actualmente escriben el software. Mi estilo de programación hoy en día no es lo que era hace 10 años - o 20 años - o 30 años atrás.Espero que sigan evolucionando. No voy a decir que mi método es el mejor, y siempre estoy abierto a las ideas sobre cómo hacerlo mejor.
Yo uso de Freescale CodeWarrior Entorno de desarrollo integrado para mi desarrollo de software. Yo era un gran fan de la IDE de CodeWarrior mucho antes de la adquisición de Metrowerks. Me sigue gustando usarlo en su encarnación actual de Eclipse. Hay varios otros IDEs disponibles y los utilizo de vez en cuando a fin de proporcionar soporte de software para algunos de nuestros clientes. Pero cuando puedo crear mi propio código para mostrar las características de MCU, yo uso el IDE CodeWarrior.
También me gusta el software del procesador de Expertos incluye el IDE CodeWarrior. Software de procesador de expertos genera una base de software (o plantilla) que le ayuda a conseguir su funcionamiento MCU. También crea el software razonablemente bien documentados para la inicialización periférica y la manipulación. A menudo uso de software de procesador de expertos para ayudarme a entender cómo manipular un periférico en el chip mediante la comparación del código que genera a la información proporcionada por el libro de MCU de datos o manual de referencia. Esto invariablemente se acelera mi proceso de aprendizaje y hace que la lectura de la documentación técnica un poco menos tedioso.
Programación de metal desnudo no significa que usted necesita para programar en lenguaje ensamblador. Lo que significa es que usted necesita para comprender el lenguaje ensamblador. Usted tendrá que desarmar el código que has escrito utilizando el lenguaje de programación C. Esto le mostrará exactamente lo que dijo el compilador que hacer, que no necesariamente será el mismo que lo que quería que hiciera. En serio. Nunca mezclar los dos. Usted ha aprendido una valiosa lección cuando te das cuenta la diferencia entre lo que le dijo un compilador de C que hacer y lo que realmente quería hacer.
También tendrá que entender el libro de la MCU de datos - su mapa de memoria, los registros, periféricos, etc Esto puede ser una tarea desalentadora, ya que estos manuales continúan creciendo como geometrías de diseño de silicio hacen más pequeños y MCUs se vuelven más complejas. Pero eso es también una parte de la diversión. De la misma manera que el software debe estar escrito en pequeños trozos manejables, también debe hacerlo su acercamiento a la comprensión de cómo manipular cada uno de los periféricos de hardware.Coma el elefante de un byte (ejem) a la vez.
La plantilla básica
Vamos a empezar por el principio. No es una simple plantilla que se utiliza comúnmente para obtener una MCU en marcha al encender la fuente de alimentación. Con algunas diferencias sutiles o extensiones, esta es la estructura fundamental sobre la que los compiladores de C y Real-Time Operating System (RTOS) los desarrolladores a crear sus entornos. Es la plantilla utilizada por el software del procesador de expertos. La Figura 1 muestra un resumen gráfico de la fundación básica de software MCU.
Figura 1: El modelo básico para la programación de MCU
Una vez que el poder se excita, hay algunos elementos de hardware fundamentales que deben ser inicializados en primer lugar, antes de hacer cualquier otra cosa. Estos componentes están más relacionados a la ejecución de la MCU en lugar de ejecutar la aplicación. Como mínimo, esto incluye el temporizador de vigilancia de protección y el oscilador. Mientras que su frecuencia de operación puede estar estrechamente ligada a la aplicación, todos los programas tendrán que iniciar estos dos módulos de hardware.
Una vez que los relojes de hardware ya están en marcha, la inicialización del software es la siguiente. O, más correctamente, es necesario configurar la memoria RAM. La memoria RAM es un recurso que se comparte entre la pila y las variables de la aplicación. En general, la pila crecerá desde la parte inferior de RAM, mientras que asignar las variables de partida en la parte superior de la RAM. Hay algunas posibles excepciones a esta organización, pero esta es la disposición más simple.
Si el puntero de pila no ha sido configurado de forma automática a su valor inicial, este es el lugar para hacerlo - antes de ejecutar cualquier subrutinas o rutinas de interrupción de servicio.
Siempre que sea posible, prefiero borrar toda la memoria RAM en esta etapa. Esto tiene dos beneficios importantes. En primer lugar, por definición, este va a limpiar todas las variables de programa a cero. Y lo hace rápidamente. Me parece que la mayoría de los algoritmos son un poco más fácil de desarrollar si sé que las variables que se utilizan son a partir de cero. En segundo lugar, esto proporciona una técnica de volcado de memoria visual fácil de depuración que me permite ver el uso de memoria RAM - y si la pila se ha estrellado en el espacio de las variables. Tengo la intención de ampliar sobre este tema en una entrada de blog en el futuro.
Con el funcionamiento básico de hardware y el software se inicializa, estamos listos para ejecutar la rutina main (). Aquí es donde se inicializa el hardware de aplicación específica y los módulos de software. Utilizando técnicas de programación modulares, cada módulo funcional debe tener su propia rutina que realiza el hardware necesario y / o inicialización del software como es requerido por la función.
Con todo, finalmente se inicializa, necesita habilitar las interrupciones de hardware antes de la ejecución del software de caer en el lazo de control principal. Hay muchas arquitecturas de lazo diferentes entre los que elegir. Tres de las técnicas más populares son máquinas de estados, programadores y en tiempo real de sistemas operativos. Independientemente del diseño del software elegido estructural, subrutinas de funciones, tales como los estados o las tareas se ejecutan como respuesta a eventos de software, mientras que los eventos de hardware activar las rutinas de interrupción de servicio (ISR). Todo esto regresará al circuito de control principal.
El bucle principal de control es también el lugar único en el código en el temporizador de vigilancia de protección se restablece (si está activado). Restablecimiento del temporizador de vigilancia en varias ubicaciones en el código puede derrotar a su propósito - que es para proteger contra una "huir" condición de ejecución del software. El uso efectivo del temporizador de vigilancia requiere un tiempo mínimo de ejecución de subrutinas y las rutinas de servicio de interrupción.
Sin entrar en los detalles específicos de cualquier MCU, he hablado de lo básico para un MCU en marcha y proporciona una plantilla de flujo de software sencillo. Usted sabe, esto puede parecer viejo sombrero o un territorio familiar, pero sé que no soy el único en desear que había visto un panorama tan simple como este en un punto en mi carrera, y no es fácil de conseguir. Además, sirve como un fundamento básico para dónde voy.Se aplica por igual a 8-bit MCU como lo hace con las arquitecturas de 16 bits y 32 bits.
Creo que es importante para entender la máquina que se está ejecutando el código. Alto nivel de software resumieron sin duda tiene su lugar. Pero para mí, la verdadera diversión está trabajando con el metal desnudo.Espero que algunos de ustedes están de acuerdo. Estén atentos para más. Estamos fuera en una gran aventura en la comprensión de cómo sacar el máximo provecho de silicio de Freescale.
No hay comentarios:
Publicar un comentario