¿Cómo determina la cantidad de flash / RAM que necesita para un microcontrolador?

23

Digamos que está iniciando un proyecto incrustado con alguna funcionalidad conocida. Cuando selecciona un microcontrolador, ¿cómo selecciona la cantidad de RAM que necesita?

¿Utiliza una placa de desarrollador y codifica su proyecto primero y luego ve cuánta memoria ha usado y luego selecciona un microcontrolador adecuado que se ajuste a esa memoria?

¿Acaba de elegir un microcontrolador robusto para un prototipo y luego se reduce después de tener un producto en funcionamiento?

¿Simplemente elige algo de lo que está seguro que será suficiente y si se queda sin espacio, simplemente actualice a uno de mayor densidad de memoria? De lo contrario, solo mantendrá el microcontrolador existente?

¿Qué se considera una buena práctica?

    
pregunta efox29

4 respuestas

20

Personalmente para proyectos de pasatiempos, tiendo a usar el microcontrolador más poderoso de la familia con la huella correcta. Luego desarrollo el PCB, escribo un código y produzco un prototipo.

Esto tiene la ventaja de que conozco bastante bien la pequeña cantidad de microcontroladores, por lo que puedo crear prototipos rápidamente sin tener que leer una hoja de datos completa. También tengo tablas de ruptura y plantillas de código para ellos.

Si funciona y estoy ganando más de un puñado, compro el microcontrolador más barato que tiene los periféricos adecuados y suficiente memoria para lo que haya codificado anteriormente. Esto puede ser molesto si los registros internos cambian (ocurre en el PIC) o si alguno de los microcontroladores tiene periféricos adicionales que deben desactivarse para que el código funcione.

Sin embargo, para fines de producción, esto le permitiría eliminar una cantidad justa de cada unidad.

    
respondido por el David
13

Por supuesto, para un único prototipo hecho en casa puede ser una buena recomendación comenzar con el microscopio más potente de todos los compatibles y luego reducirlo a escala.

Sin embargo, si desea ganar una cotización, debe decirle a su cliente un precio antes que tiene el dinero para implementar cualquier cosa.

Por lo tanto, una buena práctica es escribir algún tipo de especificación antes de comenzar la programación. Sabe qué quiere hacer y debe escribir cómo lo va a hacer.

Este "cómo" también incluye pensar en un diseño de software, responder preguntas como:

  • ¿Necesita un sistema operativo? ¿Cúal? ¿Qué recursos necesita?
  • ¿Quieres tener una arquitectura en capas? Esto requiere interfaces, que pueden consumir RAM
  • ¿Qué bibliotecas ya están disponibles y son útiles / necesarias para su propósito, y cuánta memoria necesitan (una buena documentación de la biblioteca responde a esto basándose en al menos una compilación de referencia)?
  • ¿Qué estructuras y variables debe implementar para sus propios controladores y su aplicación?

Resumir todos esos valores le da una estimación aproximada. En qué medida puede confiar, depende de qué tan detallado sea su análisis y de su experiencia :-)
Agregar un margen de al menos 30 ... 50% de su estimación es sin duda una buena idea.

Una vez que su producto esté terminado y tenga alrededor de 80 ... 90% de RAM en uso, puede estar bastante seguro de que su selección fue correcta, al menos con respecto a la RAM.

    
respondido por el mic
3

Si solo fuera posible codificar su sistema integrado primero y luego construir el hardware. Eso haría la vida de todos más fácil. Desafortunadamente, eso también significa que sus plazos están por la ventana. Por lo general, el hardware debe diseñarse mucho antes de que se realice el software porque las piezas de hardware con frecuencia tienen largos plazos de entrega.

Por lo tanto, los desarrolladores de sw incorporados generalmente necesitarán estimar las necesidades de memoria y CPU de sus programas. Su primer paso debe ser intentar convencer a los tipos de hardware para que le proporcionen el microcontrolador / CPU más potente con la mayor memoria RAM posible. Eso rara vez funciona porque tienen metas propias, pero de vez en cuando tienes suerte.

Si eso no funciona, lo siguiente que haría es un diseño de software de alto nivel y dividir los módulos en funcionalidad. Luego estimaría líneas de código para cada función para cada módulo en el sistema. Luego puede usar una fórmula para convertir líneas de código en una estimación aproximada de la memoria de códigos. También investigaría cualquier requisito de memoria inusual (como matrices grandes) y agregaría una estimación para adaptarse a eso. Luego, agrega un porcentaje sobre ese total para cubrir todo lo que te perdiste. Luego duplique eso para cumplir con el requisito típico de utilización del 50%.

Sí, lleva tiempo. Sí, es necesario saltar a través de todos los aros porque cambiar el hardware es muy difícil después de que se construye.

    
respondido por el Dunk
2

En general, los proveedores de microcontroladores colocan una gama de memoria en sus dispositivos que es adecuada para aplicaciones típicas. Por lo tanto, si solo necesita unos pocos pines de E / S y un SPI en un dispositivo de tamaño reducido, es poco probable que encuentre algo que se envíe con 500 kBytes de Flash y 64 kBytes de RAM. Con los dispositivos más grandes, que están más cerca de los paquetes de SoC, incluso el más pequeño es casi lo suficientemente grande a menos que esté planeando hacer algunos cálculos de números graves como el procesamiento de imágenes.

En un entorno profesional, la clave para elegir el microcontrolador correcto es utilizar datos históricos. Tendrá un registro de los otros proyectos que ha desarrollado y sabrá qué memoria y otros recursos de silicio se requieren para implementar cada función. Sabrá lo que se espera que haga el producto y, por lo tanto, tendrá una buena lista de características y podrá calcular de manera rápida y precisa los recursos que el microcontrolador deberá proporcionar. Tratar de adivinar los requisitos de recursos a partir de una especificación de diseño inicial (desarrollada al inicio del proyecto cuando hay menos información disponible sobre el sistema) no es confiable en el mejor momento y solo los ingenieros muy experimentados, que han desarrollado una La base de datos de datos históricos en sus propias cabezas tendrá algún tipo de éxito en el uso de este método.

Muchas compañías han adoptado un enfoque 'Agile' para el software y el diseño electrónico, que implica la creación de una 'biblioteca' de tableros de características pequeños (p. ej. tableros RS-485, tableros ADC, etc.) junto con tableros de plataforma genéricos que aloje los microcontroladores, de forma similar al uso de un kit de desarrollo y complementos. Un producto puede ser prototipado rápidamente (en horas) seleccionando y conectando el conjunto de tableros necesarios para las características. El software se ensambla de manera similar a partir de los módulos de la biblioteca y se puede portar y probar rápidamente. Una vez que se conoce el tamaño de la parte del código específica del hardware, generalmente es suficiente seleccionar la parte más pequeña que contendrá eso. La excepción es la mencionada anteriormente, donde la funcionalidad del dispositivo involucra big data o algoritmos muy complejos. Este método proporciona una metodología precisa, confiable y rastreable, utilizando datos reales de productos reales de trabajo, en lugar de suposiciones basadas en especificaciones esperanzadoras.

(Otra ventaja del enfoque Agile es que permite que el software y el desarrollo electrónico se realicen en paralelo, y el diseño electrónico es un ejercicio para integrar el conjunto de tableros de funciones y hacer el EMC relevante y otras cosas difíciles al mismo tiempo. Mientras se está desarrollando el software de la aplicación en los conjuntos de prototipos, todavía es necesario realizar algunas adaptaciones e integraciones, pero se hace cuando hay disponibles software y dispositivos electrónicos disponibles.)

    
respondido por el Mike of SST

Lea otras preguntas en las etiquetas