Editando
PROGMEM
(sección)
Ir a la navegación
Ir a la búsqueda
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
= Declaración de variables = Para alojar una variable constante en la memoria Flash se hace asi: PROGMEM const tipoVariable nombreVariable = valoresIniciales; Por ejemplo: PROGMEM const int a = 5; PROGMEM const int a[] = {0,3,4,2}; También puede hacerse asi: const int a[] PROGMEM = {0,4,3,2}; O de un modo más abreviado: const prog_uint16_t a[] = {0,4,3,2);//Esto equivale al ejemplo de encima ----- '----> se mantiene const Esta tabla muestra las equivalencias: {|class="wikitable" |+avr/pgmspace.h de AVR-GCC !escritura normal !escritura abrebiada !stdint.h |- |char PROGMEM |prog_char | |- |unsigned char PROGMEM |prog_uchar | |- |int8_t PROGMEM |prog_int8_t |signed char |- |uint8_t PROGMEM |prog_uint8_t |unsigned char |- |int16_t PROGMEM |prog_int16_t |signed int |- |uint16_t PROGMEM |prog_uint16_t |unsigned int |- |int32_t PROGMEM |prog_int32_t |signed long int |- |uint32_t PROGMEM |prog_uint32_t |unsigned long int |- |int64_t PROGMEM |prog_int64_t |signed long long int |- |uint64_t PROGMEM |prog_uint64_t |unsigned long long int |} == Comportamiento extraño(en Arduino IDE) == === Primer caso === <pre> const uint8_t a[] PROGMEM = {1,23,34,45}; void buffer(const uint8_t b[] PROGMEM){ uint8_t g; for(int i=0; i<4;i++){ g = pgm_read_byte(b++); Serial.print(g);Serial.print(" - "); } } void setup(){ Serial.begin(9600); buffer(a); } void loop(){} </pre> *En este caso la salida por serial será: 1 - 23 - 34 - 45 <pre> const prog_uint8_t a[] = {1,23,34,45}; void buffer(const uint8_t b[] PROGMEM){ uint8_t g; for(int i=0; i<4;i++){ g = pgm_read_byte(b++); Serial.print(g);Serial.print(" - "); } } void setup(){ Serial.begin(9600); buffer(a); } void loop(){} </pre> *En este caso la salida por serial no será correcta *No entiendo porque pasa si se supone que prog_uint8_t es equivalente a uint8_t PROGMEM === Segundo caso === <pre> const uint8_t a[] PROGMEM = {1,23,42,3}; uint8_t b[4]; void setup(){ Serial.begin(9600); for(int i=0; i<4;i++){ b[i] = pgm_read_byte(a++); Serial.print(b[i]); } } void loop(){} </pre> *Aqui recibo un error: increment of read-only location '(const uint8_t*)(&a)'. Cuando en los ejemplos de arriba no pasa al poner una función de por medio.
Resumen:
Ten en cuenta que todas las contribuciones a Proyectos se consideran publicadas bajo la Creative Commons Atribución-CompartirIgual (véase
Proyectos:Derechos de autor
para más información). Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre.
¡No uses textos con copyright sin permiso!
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Menú de navegación
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Espacios de nombres
Página
Discusión
español
Vistas
Leer
Editar
Ver historial
Más
Buscar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Páginas especiales
Herramientas
Lo que enlaza aquí
Cambios relacionados
Información de la página