Necesito decidir sobre la selección del tamaño de Flash y la RAM para un proyecto. El microcontrolador que prefiero usar es la serie TI MSP430. Debido a su bajo consumo de energía y al costo de la serie de líneas de valor. Sin embargo, soy un novato completo para decidir sobre la recopilación de requisitos. La mayor parte de mi experiencia en programación es en sistemas basados en escritorio donde generalmente el tamaño del programa, la RAM y la velocidad del procesador no son una gran preocupación para las tareas algorítmicas comunes.
Tengo las siguientes preguntas:
- ¿Existen pautas o prácticas estándar para decidir el tamaño de RAM y Flash para un microcontrolador?
- ¿Cuántas líneas de código (C) se traducen a qué cantidad de tamaño de Flash en la MCU?
- ¿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?
En cuanto al msp430, es una buena arquitectura, herramientas bastante buenas por ahí mspgcc y mspgcc4 y llvm para el caso. binutils sin parches. Puede obtener una plataforma de lanzamiento por menos de $ 5 a ese precio, compre algunas (eventualmente bloqueará algo o lo cortará y lo derretirá, tendrá un repuesto, especialmente a este precio) ...
Descargue las herramientas, todas son gratuitas, escriba algunas líneas de código, aprenda cómo vincularlo, vea qué tan grande se vuelve el binario, tenga una idea de las líneas de código incrustadas al tamaño de rom, etc.
¿Cómo lo hacen los profesionales? Casi todas las formas que puedas imaginar:
El mandato de algunas empresas se reduce desde lo alto y no hay nada que pueda hacer al respecto que no sea renunciar. Y es posible que nunca sepas por qué se eligió esa plataforma.
A veces, el contratista / cliente favorito dicta la plataforma, a veces 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óviles, porque mi papá lo hizo y su papá lo hizo antes, y esa podría ser la razón.
Algunas personas se centran en las herramientas. Una vez más, tienes gente leal a la marca, limitándose a su compañía compiladora favorita y a los objetivos que admiten, o la herramienta de código abierto favorita y lo que eso admite. Sistema operativo integrado favorito y límite a los objetivos que admite.
En algunos casos se trata de herramientas, pero de una manera diferente, con el tiempo puede haber invertido una gran cantidad de dinero en contratos de soporte anual con un proveedor (por ejemplo, brazo o xilinx o motorola) y podría ser que le haya gustado su apoyo y no quieres cambiar o el diablo que conoces es mejor que el diablo que no quieres. O podría ser que debido a que los otros 5 proyectos activos en la compañía usan esto y ya tenemos un contrato de soporte y continuaremos pagando ese año tras año, debe elegir una de esas soluciones de proveedores.
A veces se trata de salvar las milpeniques. Esta parte es 1.5% más barata que esa parte, haga que funcione con esta parte, no se preocupe por la NRE, piense en los ahorros de fabricación en volumen.
A veces se trata de lo negativo. Un proveedor puede haber jodido a su empresa de una forma u otra. No cumplir con el suministro anunciado de piezas que causa demoras o cancelación de sus productos. Estafas de cebo y cambio (la tarifa de $ 50,000 para el software no incluía la tarifa de $ 1200 por el dongle requerido para desbloquear la licencia, que es un artículo de costo adicional. Ah, y eso era por usuario para la licencia flotante). Una vez que firme el NDA para ver el manual de referencia de los programadores o la guía de diseño de referencia, descubrirá cuán terrible es su ingeniería y puede optar por incluir en la lista negra todos sus productos de por vida. Historia pasada con horrible soporte técnico. Cualquier número de razones puede hacer que nunca permita que sus vendedores vengan a la puerta de entrada o que no vuelva a mirar su sitio web nuevamente.
A veces tiene que ver con el rendimiento, las interfaces, etc. Por ejemplo, si tiene una interfaz cableada y necesita un pull up, la marca de microcontroladores 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 parte de $ 3 que requerirá un transistor y una resistencia externos 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 las matemáticas de consumo de energía, el precio por unidad de la matemática de su producto, la cantidad de rom que necesitamos y a qué frecuencia ejecutar el chip, lógica de pegamento, y sigue. Por lo general, alguien (jefe / cliente / ingeniero superior) 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 horario y dólares) y el la ingeniería se realiza una vez para ajustar 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 un tablero de evaluación por menos de $ 50. Sparkfun, olimex o directo del vendedor (ti para msp430 o stellaris, etc.). Pruebe uno o más de cada uno, tenga una idea de lo que es común y diferente, herramientas, cargadores, qué tan difícil de desabrochar, etc. Al menos, obtiene dos cosas de esto, una es cuando se ve obligado a seguir un camino desde arriba o desde el cliente puede comenzar a ejecutar, en segundo lugar, cuando es su turno de elegir la plataforma, está mejor educado sobre lo que está y no está allí y puede elegir la plataforma correcta (palabra cargada) según el problema para estar solucionado.
Incluso si no puede salir y gastar esa cantidad de dinero en el hardware, la mayoría tiene herramientas que puede descargar (gratis), en casos como microchip ahora puede obtener el compilador C (solía ser de alta tecnología) pero tiene que suscribirse (renunciar a su dirección de correo electrónico). gcc le guste u odie será en su futuro, escritorio o incrustado, ensucie sus manos y aprenda 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. He escrito uno llamado thumbulator en github, solo en modo ARM thumb, similar a un cortex-m3, excepto que no soporto thumb2 (todavía puedo aprender bastante y que los programas se ejecuten en ambos antes de cambiar al hardware solamente). Creé un emulador msp430 pero me detuve un poco en eso. El conjunto de instrucciones es tan pequeño que la mayor parte del trabajo es una noche o quizás un proyecto de sábado. Lo mismo ocurre con el PIC, una larga tarde y tiene un simulador de conjunto de instrucciones con el que practicar incrustado. Si no hay nada más, simplemente puede escribir la compilación y el enlace de los programas 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 estricto, etc.
En cuanto a C vs ensamblador, algunos conjuntos de instrucciones son C amigables y otros no. Algunos compiladores son medianos y algunos son realmente malos y solo unos pocos son realmente buenos (y usualmente cuestan unos pocos miles de dólares una vez o por año para usar). Al igual que con el rendimiento en cualquier lugar si realmente desea impulsarlo, puede ser necesaria una mezcla 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 cumplas con el tiempo / rendimiento y luego saber cómo resolver eso a través de C, las opciones del compilador, elegir el compilador correcto o escribir el ensamblador.
Te recomiendo que conozcas el ensamblador para todas las plataformas que elijas usar, si no hay nada más que un conocimiento legible sobre él como con el incorporado, te recomiendo que lo desarmes con frecuencia (mientras descubres dónde están tus problemas de rendimiento). En muchas plataformas se requiere o se desea un ensamblador para el código de arranque de todos modos.
Si desea ahorrar ese 10-20% en el precio por unidad y desea comprar el microcontrolador u oscilador más barato / más lento, o la parte de flash de 32Kb en lugar de la parte de flash de 64KB y puede cubrir el costo de desarrollo con el volumen de ventas, y quizás una larga lista de otras cosas que puede elegir escribir todo en ensamblador, rápido, bajo consumo, bajo costo, clientes satisfechos.
Dependiendo de sus antecedentes hasta el momento, tal vez no debería preocuparse por escribir en todos los ensambladores y quizás por los aspectos de ingeniería eléctrica de los microcontroladores integrados, leer esquemas, saber qué colector abierto, tri estado, push pull, 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 alcance como depurador de software. A pesar de que los ámbitos 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 más destacados.
También recomiendo que para cada una de las plataformas con las que juegas, salgas del entorno limitado de alguien más (por ejemplo, el entorno de programación / ide Arduino). Escriba el código de arranque que hace que el procesador se reinicie en su programa main (), haga todo lo posible para comprender cómo cargar / programar el flash hasta el punto de que eso puede implicar escribir su propio cargador, aunque los de la plataforma sean allí. Se trata de educación personal, cuanto más sepa y pueda sacar de su bolsillo trasero y use más control tendrá sobre su carrera y más ceros al final del número en su cheque de pago.
Hagas lo que hagas, NO, intentes aprender x86 como tu primer ensamblador en un escritorio, elige prácticamente cualquier otra cosa y compila y simula de forma cruzada, 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, microcodificado, no microcodificado, 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.
fuente
La mejor manera de determinar los requisitos de 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 características 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.
fuente
Creo que la mejor manera de tener una "idea" de cuáles son sus requisitos, en este caso en términos de memoria es obtener algunas muestras de un MCU, programarlo 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 con las especificaciones. Simplemente seleccione uno con mucha memoria, muchos periféricos, etc. De esa manera puede aprender mucho de un solo MCU. Cuando realice su primer proyecto con esa MCU, tendrá una mejor noción de memoria que necesita para futuros proyectos.
¿El MCU más apropiado para una tarea? ¿Cuántos canales ADC necesitas? ¿Qué hay de DAC? ¿Qué es más importante en su aplicación: rendimiento o baja potencia? ¿Es ese tipo de preguntas que debe responder al seleccionar una MCU específica?
fuente
Elija un microcontrolador que tenga el conjunto de periféricos que necesita. Probablemente habrá una familia de micros que tengan el mismo periférico / similar pero diferentes cantidades de RAM y Flash. Comience con el chip con la mayor RAM / Flash. Una vez que tenga un prototipo que funcione, puede desplegarse en un micro más barato si su programa encaja.
fuente
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 ser demasiado costoso, pero que encaja bien con la experiencia disponible, herramientas, bibliotecas, etc. 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 del flash uno de los parámetros que difieren entre los diferentes chips. Una opción "segura" es seleccionar inicialmente el chip con el mayor tamaño de flash, para que pueda reducir la escala si la aplicación se ajusta a 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 del flash IME ya no es un factor de gran costo, incluso el número de pines es menor, el tamaño de la RAM parece ser el mayor factor de costo.
fuente