No se puede usar el atributo PROGMEM con variables no constantes

1

En un ATmega32, pretendo usar la memoria del programa para escribir también, pero obtengo un

variable 'var' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

error. La razón por la que pensé que también puedo usar la memoria del programa para escribir es que la instrucción SPM es compatible con el dispositivo que estoy usando. Entonces, ¿tendría alguna sugerencia de por qué recibo este error y qué puedo hacer para usar la memoria del programa para escribir también? Muchas gracias.

Saludos cordiales

    
pregunta Utku

2 respuestas

3

SPM instrucción o no, la memoria del programa utiliza tecnología de memoria flash, que requiere un procedimiento bastante elaborado para borrar y escribir datos nuevos. No hay un compilador que le permita tratarla como RAM ordinaria simplemente asignando variables allí.

Puede almacenar datos allí, pero siempre será a través de rutinas de biblioteca que ocultan la complejidad. Ir a través de la biblioteca API también enfatiza el hecho de que se trata de datos que no desea cambiar muy a menudo, porque no desea exceder prematuramente los límites de desgaste en la memoria flash.

    
respondido por el Dave Tweed
0

La memoria FLASH no está diseñada para el acceso de escritura desde la aplicación, es decir, mediante el comando {SPM}. La instrucción se puede usar solo si se ejecuta el código del cargador de arranque de código para volver a actualizar la aplicación principal (o incluso el cargador de arranque). Pero es un comando de bajo nivel sin ningún soporte en código C. Incluso la lectura del flash que necesita a través de {LPM} (o funciones C más altas). Por lo tanto, el uso de {PROGMEM} sin {const} no tiene sentido y el mensaje del compilador informa.

    
respondido por el TMa

Lea otras preguntas en las etiquetas