5 votos

¿Cómo sé si mi frecuencia de reloj del microcontrolador es lo suficientemente rápida?

He estado usando microcontroladores ARM de NXP en productos comerciales con gran éxito durante los últimos 2 años.

En la mayoría de mis proyectos, yo no uso el PLL para aumentar la frecuencia del oscilador porque nunca he encontrado que era necesario (nunca sintió que la frecuencia del reloj fue un problema), y debido a que el PLL aumenta ligeramente el consumo de energía.

Sin embargo no sé cómo se puede medir lo que la frecuencia de reloj es suficiente para alimentar mi código. Estoy atascado con esta pregunta en mi cabeza, porque como usted sabe el rápido el reloj utiliza, mayor es el poder que terminan consumiendo. Ya que en estos días el equipo portátil con limitada baterías son comunes este es un tema importante.

La cuestión principal aquí es ¿cómo puedo saber si la actual frecuencia de reloj es suficiente para que mi código?

En esta pregunta he estado de "detener o retrasos" porque supongo que si mi frecuencia de reloj no es suficiente el primer síntoma de que va a pasar es un lento tiempo de respuesta, tiempo de consumo de las rutinas.

Yo uso casi en mis proyectos, un estado del sistema de la máquina que tiene un OnIdle() función que se llama cuando el sistema no tiene ningún eventos a proceso, por lo que puede poner el MCU en un modo de baja potencia. Yo estaba pensando acerca de la medición de la cantidad de tiempo que el sistema permanece en esta función y registro de min y max marcas de agua de esta medida tienen los números reales acerca de si el reloj del sistema actual es o no es suficiente.

¿Alguien tiene alguna sugerencia para esto?

8voto

Dan Auclair Puntos 3063

En caso de que sea difícil o imposible para estimar la frecuencia requerida en teoría (basada en los cálculos y el conocimiento de la microarquitectura) o basado en la experiencia (código similar en una máquina similar), el enfoque empírico que puede ser tomado. Una técnica común para escribir un embebidos en tiempo real de la aplicación es por tener el bucle principal se fija el tiempo. Que el ciclo principal se verá algo como esto:

while (true)
{
    doStuff();
    waitSync();
} 

waitSync aquí es impulsado por algún tipo de temporizador de interrupción. Mediante la adición de un indicador como GPIO pin de salida como esta:

while (true)
{
    gpioOn();
    doStuff();
    gpioOff();
    waitSync();
} 

y la colocación de un ámbito de la sonda en que GPIO usted va a conseguir un bonito tren de pulsos, cuyo ciclo de trabajo indicará el porcentaje de tiempo de CPU, cuando en realidad es "hacer cosas".

3voto

shash Puntos 668

Usted está pensando acerca de esto al revés. La pregunta no es "¿cómo puedo saber si mi código que se ejecuta con su reloj actual es suficiente?", es "cómo diseño mi código para que yo sepa si se está ejecutando correctamente?

Los microcontroladores son algo opaco. Son un duro plataforma para depurar. Usted necesita desarrollar el hábito de dividir el código en comprobables en trozos, el uso de técnicas tales como bits de alternar a prueba de cada parte, y luego la prueba de todo el sistema. Edificio en las pruebas debe convertirse en parte de su, aunque el proceso, y se inicia antes de escribir cualquier código

3voto

Spehro Pefhany Puntos 90994

Hay diferentes maneras de ejecutar fuera de tiempo con el microcontrolador código. Usted puede ejecutar fuera del ancho de banda total, en cuyo caso has definitivamente tenemos que cambiar algo (mejor algoritmos, mayor frecuencia de reloj, tal vez una mejor arquitectura).

Antes de que eso suceda, usted puede conseguir efectos más sutiles, tales como la excesiva fluctuación en rutinas de servicio de interrupción o de prestación de servicios de baja prioridad eventos tales como la interfaz de usuario.

Es preferible tener un poco de margen en el ancho de banda total de ejecución de la velocidad (o la memoria) no es muy divertido, a menos que usted tiene una clara ruta de actualización (tales como la manivela de la velocidad de reloj de arriba o de caída en una más caro micro que es compatible).

Usted puede código de perfil en la simulación o activando un pin GPIO como Eugene sugiere, sin embargo tenga en cuenta que en micros como el BRAZO GPIO está desacoplado de la micro núcleo relativamente lento de autobuses, por lo que el perfil debe ser hecho en relativamente grueso segmentos de tiempo.

Usted también debe mirar a las especificaciones (y quizás de prueba) para ver lo que el trade-offs con velocidad de reloj y el típico numerosos modos de funcionamiento de la micro. Si usted está justo al ralentí en espera de bucles y de no hacer ningún tipo de control de potencia, la parte de la fuente de corriente será proporcional a la frecuencia (de primer orden). Sin embargo, si usted está despertando, haciendo algunas cosas, luego de ir a dormir, el efecto de la mayor frecuencia de reloj puede no ser tan importante (incluso podría ser una mejora), ya que el ciclo de trabajo será menor y tal vez algunos de los periféricos se pueden poner en un modo de baja energía por más tiempo en la mayor frecuencia de reloj.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X