Categories: NoticiasTecnología

Consejos y trucos de firmware integrados: use su memoria de solo lectura para liberar RAM

Este artículo le brinda algunas ideas sobre cómo aprovechar al máximo el almacenamiento no volátil de su MCU (a menudo sobreabundante).

Debe haber ingenieros por ahí que regularmente necesiten una porción significativa de 16, 32 o incluso 64 kB de memoria de programa proporcionada por microcontroladores de 8 bits. Seguramente los fabricantes no incluirían tanto espacio de código si los diseñadores no lo necesitaran.

Lo que puedo decir con confianza es que tengo Nunca se sintió limitado por la cantidad de memoria de programa en una MCU. Sin embargo, me he sentido limitado por la cantidad de memoria de datos, y el propósito de este artículo es explicar cómo puede usar su exceso de memoria de código para liberar algo de RAM.

¿Qué es la memoria de solo lectura? (Memoria de código AKA, memoria de programa AKA)

La memoria del microcontrolador se divide en categorías que corresponden a características eléctricas (p. Ej., Volátil frente a no volátil) y factores arquitectónicos, como la distinción del 8051 entre memoria de datos interna y memoria de datos "externa" (la RAM externa puede, de forma algo confusa, incluirse en -chip). Por ejemplo:

La estructura de memoria MSP430. Diagrama cortesía de Texas Instruments.

La memoria de código, la memoria de programa AKA o la memoria de solo lectura (ROM), es donde se almacenan las instrucciones del programa. También llamamos a esto "flash" porque hoy en día la memoria de código se implementa utilizando una tecnología de almacenamiento no volátil conocida como memoria flash.

Una cosa importante a entender acerca de la memoria de solo lectura de un microcontrolador es que no es memoria de solo lectura. En primer lugar, si fuera realmente "solo lectura", no tendría ningún valor porque el hardware del programador del MCU no podría escribir las instrucciones del programa en él. Más importante aún, las MCU le permiten escribir en esta memoria desde su firmware. Por lo tanto, en realidad es una memoria legible, grabable y no volátil que puede usar para el almacenamiento de datos generales.

(Nota: Creo que la capacidad de escribir en la memoria de código desde el firmware es bastante estándar hoy en día, pero si se encuentra con un microcontrolador moderno que no admite esta funcionalidad, infórmenos en la sección de comentarios a continuación).

¡Nota! No lo use a menos que tenga que hacerlo

Antes de continuar, quiero dejar claro este punto: cuando trabajas con datos que deben almacenarse durante la operación del programa, la memoria de código es un reemplazo de último recurso para la RAM.

Acceder a la RAM es más rápido y, en mi experiencia, el procedimiento requerido para escribir en la memoria de código durante la ejecución del firmware es complicado y conlleva el riesgo de corromper el flash.

No utilice memoria de código para almacenar variables y matrices que requieren modificaciones frecuentes—Esto debería estar en la memoria de datos.

Si su MCU no tiene suficiente RAM para todas sus variables frecuentemente modificadas, use una MCU diferente o agregue un chip de memoria externo.

Almacenamiento previo al tiempo de ejecución

La mejor manera de complementar la RAM utilizando memoria de código implica el almacenamiento de constante valores. Estas podrían ser muchas cosas diferentes: patrones de visualización que enviará a un módulo LCD, bytes fijos o secuencias de caracteres que se transmitirán a través de SPI o UART, valores de onda sinusoidal precalculados que se utilizarán para generar diferentes frecuencias de audio a través de digital a -análisis de conversión, y así sucesivamente.

Almacenar valores constantes en flash en lugar de RAM es fácil porque simplemente incluye los valores en su firmware (como variables o matrices normales) y le dice al compilador que los quiere almacenados en la memoria de código. Con mi compilador, todo lo que necesito hacer es colocar la palabra clave "código" antes del nombre de la variable (vea un ejemplo a continuación); Su compilador puede ser diferente.


código de char sin firmar UART_Message[4] = {0xAA, 0xAA, 0x1C, 0x2D};

La memoria de código es a veces tan abundante que esta técnica podría usarse para almacenar algún tipo de imagen básica o un breve clip de audio digitalizado.

Almacenamiento en tiempo de ejecución

El almacenamiento en tiempo de ejecución es la forma más complicada de usar la memoria de código como reemplazo de RAM. Tendrá que consultar la hoja de datos de su MCU, o tal vez incluso una nota relevante de la aplicación, para encontrar el procedimiento requerido y conocer posibles problemas. Por ejemplo, el siguiente diagrama transmite información sobre los procedimientos de escritura flash para microcontroladores PIC de 16 bits:

Diagrama cortesía de Microchip.

El almacenamiento en memoria de código de tiempo de ejecución es útil para guardar los valores de calibración que se generan durante el funcionamiento del dispositivo. En este caso, la principal ventaja es el hecho de que la memoria de código no es volátil, ya que estos tipos de datos generalmente no consumen mucha RAM. Un ejemplo de una situación en la que el almacenamiento de memoria de código de tiempo de ejecución lo ayudaría a hacer frente a las limitaciones de RAM es si necesita registrar una larga secuencia de valores de medición que se recopilan una vez y luego se dejan solos hasta que un operador descarga las mediciones a una PC.

Conclusión

Para aquellos que, como yo, son mucho más propensos a quedarse sin RAM antes de que se queden sin memoria flash, la memoria del programa es un recurso valioso porque puede permitirle cumplir con los requisitos del sistema mientras usa un microcontrolador más pequeño y elimina la complejidad y el costo de incorporando un chip de memoria externo.

Si tiene algún consejo para escribir en flash (durante el tiempo de ejecución) con su familia de microcontroladores preferida, no dude en compartirlos en la sección de comentarios.

La imagen destacada se utiliza por cortesía de Steve Jurvetson a través de la licencia CC BY 2.0. La foto redimensionada es de una placa de memoria central histórica en exhibición en Core Memory Room de Adafruit.

ga('create', 'UA-1454132-1', 'auto'); ga('require', 'GTM-MMWSMVL'); ga('require', 'displayfeatures'); ga('set',{'dimension1':'memory,embedded,computing,embedded,memory,computers-peripherals'}); ga('set',{'contentGroup1':'memory,embedded,computing,embedded,memory,computers-peripherals'});

ga('set',{'dimension3':"September 16, 2019"});

ga('set',{'dimension4':"Robert Keim"});

ga('send', 'pageview');

!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1808435332737507'); // Insert your pixel ID here. fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: ['memory','embedded','computing','embedded','memory','computers-peripherals'], content_type: 'category'});

_linkedin_data_partner_id = "353081"; (function(){var s = document.getElementsByTagName("script")[0]; var b = document.createElement("script"); b.type = "text/javascript";b.async = true; b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; s.parentNode.insertBefore(b, s);})(); } if(jstz.determine().name().indexOf("Europe") === -1) { showSocialCode(); // NOT EU } else { showSocialCode(); window.addEventListener("load", function () { window.cookieconsent.initialise({ "palette": { "popup": { "background": "#252e39" }, "button": { "background": "#14a7d0" } }, "type": "opt-out", "content": { "message": "This website uses tracking cookies to ensure you get the best experience on our website.", "href": "https://www.allaboutcircuits.com/privacy-policy/", "dismiss": "OK, GOT IT" }, onInitialise: function (status) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },

onStatusChange: function (status, chosenBefore) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },

onRevokeChoice: function () { var type = this.options.type; if (type == 'opt-out') { console.log("eu"); //showSocialCode(); } },

}) }); }

Maria Montero

Me apasiona la fotografía y la tecnología que nos permite hacer todo lo que siempre soñamos. Soñadora y luchadora. Actualmente residiendo en Madrid.

Recent Posts

Máquina de mano Lean, Green, Raspberry Pi

Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…

2 years ago

Cómo pronosticar series de tiempo usando autorregresión

Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…

2 years ago

Aquí están todas las formas en que puede cargar su AirPods Pro

Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…

2 years ago

Las principales noticias tecnológicas del lunes: la prohibición de clientes de terceros de Twitter parece no ser un accidente

Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…

2 years ago

AirPods Max 2: aquí están las características más solicitadas

Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…

2 years ago

El remake de Dead Space continúa luciendo terriblemente genial en el nuevo tráiler de la historia

El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…

2 years ago