Paso 4: Otro Hardware / Software trucos
Hay algunas otras cosas sucediendo en el código fuente que he proporcionado en este instructible que merece la pena señalar.
Fecha / hora de código:
Para calcular la fecha / hora utiliza las funciones de biblioteca de clib. Este ia un poco complicado porque clib usa malloc para tomar platos de memoria. Esto causa problemas para un RTOS que necesita interruptor de tarea. La solución es conseguir clib para utilizar las funciones malloc en el sistema operativo en lugar de las funciones malloc en la biblioteca. Por suerte, algún buen bloke en Internet clasificados hacia fuera y ha proporcionado una solución. Consulte sitio de web de Michal Demin para obtener más información.
Así, el hardware utiliza el cristal de 32,768 kHz externo para mantener un contador de 32 bits incremento una vez por segundo. El contador es con respaldo de batería (pila de monedas) y no consigue reiniciar nunca. Reajustes de hardware, la depuración, y volver a grabar no reiniciar el contador! El contador se puede configurar mediante software, sin embargo. El valor para el número de segundos desde 01 de enero de 1970 hace clib feliz. Una vez configurado, hay un montón de funciones clib para calcular el tiempo. Nota, dada una fecha / hora / zona horaria, puede revertir la clib calcular el número de segundos para usted.
Una vez clib sabe la zona horaria, la fecha de las funciones de tiempo están listas para ir. La fecha o tiempo en la pantalla LCD es buena independientemente del horario de verano, año bisiesto o cualquier otra basura que no entiendo. En efecto, una vez ajustada, la fecha / tiempo debe ser bueno todo el año por años (aparte de deriva).
Para ajustar la fecha / hora, quite el comentario de una sección de código (busque en ctime.c cerca de la cima) que hace el cálculo de tiempo de reversa. Se actualiza el contador de 32 bits y el programa continúa. Luego, comente la fecha / tiempo código que establece la hora y reflash el micro. Es un hack desagradable - pero, sólo corrí fuera hacking jugo para escribir código botón para ajustar la hora / fecha. Siéntase libre.
Consola de depuración:
Apenas comencé a escribir algo de código para agregar una consola de depuración. La idea es, tomar uno de los canales no utilizados de la UART y uso de mensajes de depuración de la aplicación. La consola también puede ser interactiva para que mensajes repetitivos pueden ser fijados encendido y apagado. Yo he usado por lo que puedo ver a valores analógicos desplazarse. Es bueno poder convertir esta encendido y apagado.
Caracteristicas de la consola de depuración:
- Depurar la consola funciona como una tarea separada - la tarea de prioridad más bajo. Diseñado para ser de bajo impacto en el sistema.
- Otras tareas pueden llamar "vDebugPrintf()" para enviar un mensaje con formato a la depuración puerto serie.
- Los mensajes con formato se cargan en una cola FIFO de OS.
- La tarea de depurar continuamente transfiere el carácter fuera de la cola FIFO y en el puerto serie.
- El código fuente liviano de vDebugPrintf es proporcionar así que puedes añadir tus propias cosas especiales.
Salida de PWM RC automático:
Dos pernos han sido setup con una salida PWM de 50Hz. La idea es que estos pernos se utilizará para conducir los motores servos RC en el futuro. Con un simple de la escritura en un registro micro que se puede cambiar el ciclo de trabajo de la salida PWM, un servomotor de RC conectado entonces respondería mi mudanza a la nueva posición.
Otra vez, esto sólo demuestra lo fácil que es para control y configuración de hardware. Generar una salida PWM con micro segunda resolución sin alguna ayuda del hardware sería una molestia importante. El hardware de brazo facilita este todos.
Automático analógico a Digital conversiones:
Parte de mi hardware inicialización incluye establecer unos canales de AtoD. Derecho ahora, he conseguido cuatro configuración de canales que utiliza un canal DMA. Después de una conversión es completa, el canal DMA copia el valor en un búfer de RAM automáticamente. El convertidor analógico a digital que se mueve hacia el siguiente pin automáticamente. Todo el proceso se repite una y otra vez sin ninguna sobrecarga de la CPU.
Por lo tanto, el búfer de RAM siempre tiene el último (más arriba hasta la fecha) de analógico a digitales valores. Uso simple los valores del RAM buffer y saben son los más frescos. Mantener actualizados los valores de RAM todo se hace sin ninguna interrupción de la micro!
CPU Idle contador:
Cuando el sistema operativo no tiene ningún trabajo que hacer (todas las tareas están en estado de inactividad) el OS llama a otra función de devolución de llamada de usuario llamada "vApplicationIdleHook()". Programado esta función simplemente incrementar un contador de 32 bits.
Después de un segundo (garrapatas de OS 100) el valor del contador se puede imprimir en la consola de depuración. Entonces se restablece el contador a cero y se repite el proceso.
Viendo la impresión de la consola de depuración desde el ralentí el gancho podemos ver es cuánto tiempo de inactividad en el sistema operativo. Un poco como mirar el gráfico de carga de CPU en un PC.
Incluso con todo lo que está sucediendo en el sistema operativo, las transferencias de datos de LCD, de analógico a digitales conversiones, salidas de PWM de RC, LED jugueteando, los estantes de gancho inactivo por más de 350.000 cuentas por segundo! Simplemente impresionante, hay algunos mucho potencia sobrado teniendo en cuenta cuánto la CPU ya está haciendo. Este bebé tiene unas piernas!