Necesita ayuda para elegir el tamaño de Flash en un microcontrolador

Necesito decidir sobre la selección del tamaño de Flash y RAM para un proyecto. El microcontrolador que prefiero usar es la serie TI MSP430. Debido a su bajo consumo de energía y costo de serie de línea de valor. Sin embargo, soy un completo novato en decidir sobre la recopilación de requisitos. La mayor parte de mi experiencia en programación es en sistemas basados ​​en escritorio donde, por lo general, el tamaño del programa, la memoria RAM y la velocidad del procesador no son una gran preocupación para las tareas algorítmicas comunes.

Tengo las siguientes preguntas:

  1. ¿Existen pautas o prácticas estándar para decidir el tamaño de RAM y Flash para un microcontrolador?
  2. ¿Cuántas líneas de código (C) se traducen a qué cantidad de tamaño de Flash en la MCU?
  3. ¿Es el lenguaje ensamblador la única salida si el tamaño de Flash debe mantenerse al mínimo?

Con respecto a la selección general de un microcontrolador para un proyecto, ¿cómo hacen los profesionales en este campo para decidir el microcontrolador más apropiado para la tarea? ¿Qué recursos buscan? ¿Qué pautas siguen?

Respuestas (6)

Las respuestas a todas tus preguntas dependerán de lo que quieras hacer.

Como dijiste, eres un novato, así que te sugiero que uses el microcontrolador más grande e intentes hacer el proyecto. Después de esto, puede visualizar cuánto código usa y luego escalarlo de acuerdo con lo que se usó.

Acordado. Comience con algo grande y luego, si es necesario, reduzca a la parte más pequeña que cumpla con sus requisitos finales.
"Más grande" debe calificarse con "En la serie a la que te diriges". Encuentre los periféricos que necesita y la clase de velocidad que necesita, elija una arquitectura/familia y luego desarrolle con el procesador más grande de esa familia. No empiece con algo con 512kB de Flash y 64kB de RAM porque es el microcontrolador más grande que puede encontrar; redúzcalo a Cortex-M3 vs. AVR vs. PIC18 vs. MSP430 (por ejemplo) antes de empezar a preocuparse por el tamaño. Sospecho que Daniel esperaba esto, pero solo pensó que debía indicarse en alguna parte.

En cuanto al msp430, es una buena arquitectura, herramientas bastante buenas disponibles mspgcc y mspgcc4 y llvm para el caso. binutils sin parchear. Puede obtener una plataforma de lanzamiento por menos de $ 5 a ese precio, compre algunas (eventualmente bloqueará algo o lo acortará y lo derretirá, tendrá un repuesto, especialmente a este precio) ...

Descargue las herramientas, todas son gratuitas, escriba algunas líneas de código, aprenda a vincularlo, vea qué tan grande se vuelve el binario, familiarícese con las líneas de código incrustadas, el tamaño de la rom, etc.

¿Cómo lo hacen los profesionales? Casi todas las formas que puedas imaginar:

Algunas empresas el mandato viene de lo alto y no hay nada que puedas hacer al respecto más que renunciar. Y es posible que nunca sepa por qué se eligió esa plataforma.

A veces el contratista/cliente favorito dicta la plataforma, a veces se puede educar/negociar, a veces no.

Algunas personas simplemente tienen un favorito, miedo a lo desconocido, lo que sea. La misma razón por la que algunas personas compran solo una marca de automóvil, porque mi papá lo hizo y su papá lo hizo antes, y esa podría ser la razón principal.

Algunas personas se enfocan en las herramientas. Aquí, nuevamente, hay personas leales a la marca, que se limitan a su empresa de compilación favorita y a los objetivos que admiten, o a la herramienta de código abierto favorita y lo que admite. Sistema operativo integrado favorito y límite a los objetivos que admite.

En algunos casos se trata de herramientas, pero de otra manera, con el tiempo es posible que haya invertido mucho dinero en contratos de soporte anuales con un proveedor (digamos arm o xilinx o motorola, por ejemplo) y podría ser que le haya gustado su soporte. y no quieres cambiar o el diablo que conoces es mejor que el diablo que no conoces. O podría ser que debido a que los otros 5 proyectos activos en la empresa usan esta cosa y ya tenemos un contrato de soporte y seguiremos pagando por eso año tras año, debe elegir una de esas soluciones de proveedores.

A veces se trata de ahorrar los mil peniques. Esta parte es 1.5% más barata que esa parte, haz que funcione con esta parte, no te preocupes por el NRE, piensa en el ahorro de volumen de fabricación.

A veces se trata de los negativos. Es posible que un proveedor haya jodido a su empresa de una forma u otra. Incumplimiento del suministro de repuestos anunciado que provoque demoras o cancelaciones de sus productos. Estafas de cebo y cambio (la tarifa de $ 50,000 por el software no incluía la tarifa de $ 1200 por el dongle requerido para desbloquear la licencia, ese es un elemento de costo adicional. Ah, y eso era por usuario para la licencia flotante). Una vez que firma el NDA para ver el manual de referencia de los programadores o la guía de diseño de referencia, descubre cuán terrible es su ingeniería y puede optar por incluir en la lista negra todos sus productos de por vida. Historial pasado con horrible soporte técnico. Cualquier cantidad de razones puede hacer que nunca permita que sus vendedores entren por la puerta principal, o evitar que vuelva a mirar su sitio web.

A veces tiene que ver con el rendimiento, las interfaces, etc. Por ejemplo, digamos que tiene una interfaz que está cableada y necesita un pull up, la marca de microcontrolador XYZ por $ 3 por pieza tiene un conjunto de pines de E / S que se pueden usar sin necesidad de otro hardware externo, la marca ABC tiene una pieza de $3 que requerirá un transistor externo y una resistencia para que funcione como mínimo. Su ejemplo del msp430, digamos que se trata del consumo de energía, la parte A solo puede requerir que el usuario use una batería AAA y funcione durante meses, la parte B puede necesitar dos baterías AAA y funcionar durante semanas.

El caso más raro de todos es hacer la ingeniería, encuestar a todos los proveedores, hacer los cálculos de consumo de energía, calcular el precio por unidad de su producto, qué tamaño de rom necesitamos y a qué frecuencia ejecutar el chip, pega la lógica, una y otra vez. Por lo general, alguien (jefe/cliente/ingeniero sénior) toma sus años de experiencia y dispara desde la cadera (a menudo usando uno o más de los anteriores) para elegir el camino (a menudo un buen camino que ahorra toneladas de tiempo en programación y dólares) y el la ingeniería se realiza una vez para afinar la plataforma elegida.

Mi recomendación personal es ser flexible. La mayoría de las marcas/familias de microcontroladores de alguna forma o moda se pueden tener en una placa de evaluación por menos de $50. Sparkfun, olimex o directo del proveedor (ti para msp430 o stellaris, etc). Pruebe uno o más de cada uno, tenga una idea de lo que es común y lo que es diferente, herramientas, cargadores, qué tan difícil de desarmar, etc. Obtiene al menos dos cosas de esto, una es que cuando se ve obligado a seguir un camino desde lo alto o el cliente, puede comenzar a ejecutar, en segundo lugar, cuando es su turno de elegir la plataforma, está mejor informado sobre lo que está y no está disponible y puede elegir la plataforma correcta (palabra cargada) en función del problema para estar solucionado.

Incluso si no quiere o no puede salir y gastar esa cantidad de dinero en el hardware, la mayoría tiene herramientas que puede descargar (gratis), en casos como el microchip, ahora puede obtener el compilador C (solía ser de alta tecnología) pero tienes que suscribirte (dar tu dirección de correo electrónico). gcc te guste o lo odies estará en tu futuro, escritorio o incrustado, ensúciate las manos y aprende a usarlo como un compilador cruzado. Pruebe llvm también, estará disponible por un tiempo y le dará a gcc una competencia seria. De todos modos, escriba o encuentre algunos emuladores, mame tiene muchos, gdb tiene algunos, etc. y haga que los programas se ejecuten en ambos antes de cambiar solo al hardware). Preparé un emulador msp430 pero me detuve un poco. El conjunto de instrucciones es tan pequeño que la mayor parte del trabajo es un proyecto por la noche o quizás un sábado. Lo mismo ocurre con el PIC, una tarde larga y tienes un simulador de conjunto de instrucciones con el que practicar integrado. Si nada más, puede simplemente escribir los programas, compilarlos y vincularlos para tener una idea de cómo hacerlo y qué tan grandes terminan siendo los programas, cómo ajustar los programas para producir un código más ajustado, etc.

En cuanto a C vs ensamblador, algunos conjuntos de instrucciones son compatibles con C y otros no. Algunos compiladores son medianos y algunos son realmente malos y solo unos pocos son realmente buenos (y generalmente cuestan unos miles de dólares una vez o por año para usarlos). Al igual que con el rendimiento en cualquier lugar, si realmente desea impulsarlo, es posible que se requiera una combinación de lenguaje de alto nivel (digamos C) y ensamblador. Entonces, la habilidad no es escribir toda la aplicación en ensamblador, la habilidad es determinar qué código está causando que no cumpla con el tiempo/rendimiento y luego saber cómo resolverlo a través de C, opciones del compilador, elegir el compilador correcto o escribir ensamblador.

Le recomiendo que conozca ensamblador para todas las plataformas que elija usar, si nada más conocimiento legible de él como con incrustado. Le recomiendo que lo desensamble con frecuencia (mientras descubre dónde están sus problemas de rendimiento). Muchas plataformas requieren o desean algún ensamblador para el código de arranque de todos modos.

Si desea ahorrar ese 10-20 % en el precio por unidad y quiere comprar el microcontrolador u oscilador más barato/más lento, o la parte flash de 32 Kb en lugar de la parte flash de 64 KB y puede cubrir el costo de desarrollo con el volumen de ventas, y tal vez una larga lista de otras cosas que puede elegir para escribir todo en ensamblador, rápido, de bajo consumo, bajo costo, clientes satisfechos.

Dependiendo de su experiencia hasta el momento, tal vez no debería preocuparse por escribir en ensamblador y tal vez por los aspectos de ingeniería eléctrica integrados con microcontroladores, leer esquemas, saber qué colector abierto, tri estado, empujar y tirar, pwm, adc, dac y un larga lista de otros términos y cómo usarlos. bit banging i2c, spi, mdio, dallas one wire, etc. Uso de un osciloscopio como depurador de software. A pesar de que los osciloscopios pueden resaltar cosas para usted hoy (un elemento de costo adicional), debería poder observar i2c y spi y algunos otros protocolos sin los aspectos destacados.

También recomiendo que para cada una de las plataformas con las que juegues, salgas de la caja de arena de otra persona (el entorno de programación/ide de Arduino, por ejemplo). Escriba el código de arranque que hace que el procesador se reinicie en su programa main(), haga todo lo que pueda para comprender cómo cargar/programar el flash hasta el punto de que eso puede implicar escribir su propio cargador, aunque los de estantería son allá. Se trata de educación personal, cuanto más sepa y pueda sacar de su bolsillo trasero y usar, más control tendrá sobre su carrera y más ceros al final del número en su cheque de pago.

Haga lo que haga, NO intente aprender x86 como su primer ensamblador en una computadora de escritorio, elija casi cualquier otra cosa y compile y simule, ARM, THUMB, MSP430, PIC, AVR, incluso 6502, 8051. x86 es una instrucción horrible conjunto y, como resultado, se ha transformado y moldeado de muchas maneras, microcodificadas, no microcodificadas, multinúcleo, una y otra vez. Mantenga el x86 en lenguajes de alto nivel y sistemas operativos voluminosos. Úselo para su editor de texto y compiladores y apunte a otra cosa.

Perdón por la larga respuesta... espero que haya sido útil.

hmmm, si la pregunta fuera ¿cómo eligen los profesionales el tamaño del flash? a veces escribe algún código que se asemeje a la solución, compila y ve qué tan grande es. Si se va a utilizar un rtos, tome algunas muestras y cámbielas de tamaño y agregue un factor de fudge para el código que agregará. Mucho de esto tiene que ver con la experiencia personal en la estimación. A menudo, puede optar por estimar y luego duplicarlo por si acaso y su jefe puede duplicar su estimación para no meterse en problemas y así sucesivamente. Y eso puede ayudar porque una vez implementado, puede cambiar a la parte más pequeña y ser un héroe con los ahorros.
A pesar de su longitud, encuentro esta respuesta muy buena.

La mejor manera de determinar los requisitos de memoria flash/RAM para su proyecto es construir un prototipo y medirlo.

Implemente los algoritmos centrales en una PC y calcule el tamaño del código objeto y el uso de RAM. Esto le dará una cifra aproximada para trabajar.

No olvide agregar más a su presupuesto si confía en las funciones del sistema operativo, como stdio o administración de memoria.

No hay una forma directa de comparar líneas de código con el tamaño del código compilado. Pero puede comparar arquitecturas de procesador en términos de densidad de código.

Creo que la mejor manera de tener una "sensación" de cuáles son sus requisitos, en este caso en términos de memoria, es obtener algunas muestras de una MCU, programarla y ver cuánta memoria se está utilizando. De hecho, dependerá del compilador utilizado. Si es la primera vez que programa una MCU, no se preocupe demasiado por las especificaciones. Simplemente seleccione uno con mucha memoria, muchos periféricos, etc. De esa manera, puede aprender mucho de una sola MCU. Cuando haga su primer proyecto con esa MCU, tendrá una mejor noción de la memoria que necesita para proyectos posteriores.

¿La MCU más apropiada para una tarea? ¿Cuántos canales ADC necesita? ¿Qué pasa con DAC? ¿Qué es más importante en su aplicación: el rendimiento o la baja potencia? Es ese tipo de preguntas que debe responder al seleccionar una MCU específica.

Elija un microcontrolador que tenga el conjunto de periféricos que necesita. Probablemente habrá una familia de micros que tengan el mismo/similar periférico pero diferentes cantidades de RAM y Flash. Comience con el chip con la RAM/Flash más grande. Una vez que tenga un prototipo de trabajo, puede bajar a un micro más barato si su programa se ajusta.

Los verdaderos profesionales no eligen un microcontrolador de forma aislada, ejecutan un proyecto para obtener el máximo beneficio. Dependiendo de los criterios del proyecto que podrían hacer que se seleccione un microcontrolador que parece demasiado costoso, pero encaja bien con la experiencia, las herramientas, las bibliotecas, etc. disponibles. No tome decisiones aisladas, tenga en cuenta el panorama general. , especialmente la suma (costos de desarrollo + costos de producción)!

La mayoría de los fabricantes de microcontroladores ofrecen rangos de chips, con el tamaño de flash como uno de los parámetros que difieren entre los distintos chips. Una opción 'segura' es seleccionar inicialmente el chip con el tamaño de flash más grande, de modo que pueda reducir la escala si la aplicación cabe en un chip más pequeño. Pero las aplicaciones tienden a crecer para adaptarse a todos los tamaños disponibles (y más).

El tamaño de la memoria flash IME ya no es un gran factor de costo, incluso la cantidad de pines es un factor menor, el tamaño de la RAM parece ser el mayor factor de costo.