[Dijeron las palabras anteriores]
En relación con los sentidos humanos, la CPU funciona demasiado rápido, incluso el "parpadeo de un ojo" que la gente suele usar para describir el tiempo corto es de unos cientos de milisegundos para la CPU. Piense detenidamente ¿Cuántas personas pueden parpadear diez veces en ¿un segundo? Debido a esto, incluso las tareas múltiples ejecutadas secuencialmente en un súper bucle a menudo se "completan en un instante" a los ojos de los humanos. Entonces, ¿qué tan rápido funciona la CPU? ¿Es rápido, muy rápido o terriblemente rápido? Si continuamos considerando este tema desde una perspectiva humana, el grado de abstracción equivale a pensar en "¿qué tan grande es el infinito?"
Imaginemos que el tiempo es repentinamente más lento que usted y reexaminemos el mundo desde la perspectiva del microprocesador.
[Primer punto de referencia]
"1MHz es 1us"
"1MHz es 1us" es un concepto de referencia. Al modificar la forma de pensar, podemos utilizarlo para resolver muchos problemas prácticos de forma rápida y eficaz. Como ejercicio, intentemos responder rápidamente a las siguientes preguntas:
Suponiendo que cada pulso de reloj corresponde a un ciclo de instrucción:
Se sabe que la frecuencia del sistema es de 1 MHz. ¿Cuántos ciclos de instrucción hay en 1us?
Se sabe que la frecuencia del sistema es de 12 MHz. ¿Cuántos ciclos de instrucción hay en 1us?
Se sabe que la frecuencia del sistema es de 11,3728 MHz. ¿Cuántos ciclos de instrucción hay en 1us?
Se sabe que la frecuencia del sistema es de 500 KHz. ¿Cuántos ciclos de instrucción hay en 1us?
Obviamente, si primero intenta calcular el período del sistema:
Luego divida por 1us:
Este proceso ya es lento .
Cambiemos nuestro modo de pensamiento. Dado que 1MHz corresponde a 1us (es decir, 1us corresponde a un ciclo de instrucción), 12MHz es 12 veces mayor que 1MHz, y hay 12 ciclos de instrucción dentro de 1us; lo mismo se puede obtener cuando el sistema la frecuencia es diferente Cuando es 11.3728MHz y 500KHz (0.5MHz), los ciclos de instrucción correspondientes dentro de 1us son 11.3728 y 0.5 respectivamente.
Con la ayuda de esta equivalencia, podemos establecer sentidos más cuantificados de la potencia de procesamiento de la CPU. Por ejemplo, ¿cuánto puede hacer la CPU en 1 ms? Dado que 1ms es igual a 1000us, para un sistema de 1MHz, 1ms puede completar 1000 ciclos de instrucción, y un sistema de 12MHz puede completar 12000 ciclos de instrucción. Sin embargo, números como 1000 y 12000 todavía son demasiado abstractos para un cerebro humano con solo diez dedos , así que damos un paso más y convertimos el ciclo de instrucción en un tamaño de código equivalente:
Dado que el conjunto de instrucciones de los microcontroladores convencionales es en su mayoría instrucciones de ciclo único, también podríamos suponer que todas las instrucciones son instrucciones de ciclo único, de modo que un ciclo de instrucción corresponde a una instrucción;
Suponiendo que cada instrucción tiene un tamaño de 2 bytes (instrucciones de 16 bits);
De esta manera, un sistema de 1 MHz puede ejecutar aproximadamente 2 KB de código en 1 ms, un sistema de 12 MHz puede ejecutar 24 KB de código, etc.
Entonces, ¿cuál es el concepto de 2KB? Si suele prestar atención al tamaño del código compilado, 2 KB equivale aproximadamente al tamaño de una biblioteca de controladores básica , que puede incluir un controlador USART o implementar la administración de energía; y 24 KB es casi el tamaño de una pequeña aplicación de ingeniería .
Con la ayuda de estos números muy específicos, es fácil para nosotros compararlos con los controladores de interrupciones y establecer una comprensión intuitiva, como:
¿El manejador de interrupciones "se ejecuta lo suficientemente rápido"?
"¿Cuál es el riesgo de perder la interrupción" y así sucesivamente?
¿Se producirán pérdidas al utilizar interrupciones para recibir datos periféricos?
Sin duda, este método de evaluación que ignora los bucles y las ramas condicionales es casi el peor caso de un código , es decir, para una interrupción de milisegundos de 1KHz en un sistema de 1MHz, cuanto más cerca esté el manejador de interrupciones a 2KB, el sistema más probablemente sea por "interrupciones perdidas" .
En este caso, a menos que haya calculado cuidadosamente el número real de ciclos a través del código ensamblador equivalente proporcionado por el compilador, o haya medido realmente el consumo de ciclo del código a través de herramientas como perf_counter, asegúrese de que el ciclo de procesamiento en el tiempo no ser superior a 1 ms y no habrá otros controladores de interrupciones durante este período; de lo contrario, su controlador de interrupciones es aún menor de 2 KB, mejor.
[Un caso real]
En un sistema Cortex-M3 / M4 de 72 MHz, que utiliza el modo de interrupción para recibir datos del puerto serie, la velocidad en baudios es 115200:
¿Cuánto dura la interrupción de blindaje máxima permitida?
¿Cuál es el tamaño seguro máximo teórico permitido por el manejador de interrupciones?
Primero, tenemos que calcular el tamaño de instrucción del sistema y el número de ciclos del conjunto de instrucciones. Tomando ARM Cortex M3 / M4 como ejemplo, la mayoría de sus instrucciones son instrucciones de ciclo único, que admiten instrucciones de 16 bits e instrucciones de 32 bits. Para evaluar el tamaño del manejador de interrupciones en la línea, podemos calcular dos resultados basados en instrucciones de 16 bits e instrucciones de 32 bits como rango de referencia;
En segundo lugar, la frecuencia del sistema es 72 MHz. Suponiendo que el USART no tiene una FIFO de hardware, la velocidad en baudios de 115200 está en la configuración típica de "1 bit de inicio + 1 bit de parada + sin bit de paridad + 8 bits de datos" (cada dato trama corresponde a 10 bits), que en realidad corresponde a la velocidad máxima de datos de 11.52KB / s, o en otras palabras, la interrupción de finalización de USART ocurre 11.52K veces por segundo. Hasta ahora, podemos responder la primera pregunta, es decir, cuánto tiempo es la interrupción de blindaje máxima permitida en este sistema: 1 / 11.52KHz ≈87us.
En otras palabras, suponiendo que el tiempo de enmascaramiento de interrupciones es 87us, el rango de tamaño máximo teórico del manejador de interrupciones es (72 * 87 * 2) bytes a (72 * 87 * 4) bytes, es decir, entre 12.528KB y 25.056KB . Tome el valor mínimo de 12 KB.
En conclusión, el tamaño total del manejador de interrupciones y las subfunciones a las que llama deben ser al menos menos de 12 KB para garantizar que la interrupción completa de recepción de velocidad en baudios 115200 obtenga una respuesta oportuna . Dado que no se considera la existencia de bucles, ramas y otras tareas, los resultados anteriores solo se utilizan para una evaluación rápida aproximada. El código real generalmente debe ser mucho más pequeño que este valor en línea. Cuando el tamaño real es cercano o superior a 13 KB, básicamente se puede determinar que es posible que el sistema no pueda responder a la interrupción de manera oportuna y estable; se requiere un análisis más específico del código.
( ¡Oh, Dios mío! ¡Puede ejecutar un código de 13 KB después de recibir un espacio de 1 byte! )
【Conclusión】
El equivalente de "1MHz es 1us" nos proporciona un punto de referencia, establece la sensación más intuitiva sobre "qué tan rápido se ejecuta la CPU" y también proporciona una referencia poderosa para evaluar el tamaño del código y la confiabilidad del sistema. Habiendo dominado este punto de referencia, como programador calificado, no debe evaluar la potencia de procesamiento de la CPU basándose en sentimientos humanos sin base . "72MHz es lo suficientemente rápido, ¿verdad?" "He usado la frecuencia más alta del chip". No se diga más a la ligera , deberíamos mirar este tipo de cuestiones de forma cuantitativa más que cualitativa .
3. Raspberry Pi Pico: MCU por solo $ 4
4. Hay muchas razones por las que MCU admite la función AI ~
5. En 2020, aprendí 20 principios de ingeniería de software ~
6. La aplicación de ideas de máquinas de estado en el desarrollo integrado ~
Descargo de responsabilidad: este artículo se reproduce en línea y los derechos de autor pertenecen al autor original. Si está involucrado en problemas de derechos de autor, contáctenos, confirmaremos los derechos de autor en función de los materiales de certificación de derechos de autor que proporcione y pagaremos la remuneración del autor o eliminaremos el contenido.