Si está visualizando en una pantalla LCD, supongo que se trata de un sistema integrado.
No coloque los datos en un encabezado.
Coloque los datos en un archivo ordinario de C o C++. Compila esto. Puede contener solo los datos, eso está bien y facilita la actualización.
A continuación, utilice el archivo de encabezado para dar acceso a los datos.
Por ejemplo, en un archivo images.c:
#include "images.h"
const byte numbers1[MAX_NUMBERS1] = { ... };
byte numbers2[MAX_NUMBERS2]; // will be initialsied to 0
El la images.h es:
#ifndef _IMAGES_H_
#define _IMAGES_H_
typedef unsigned char byte;
#define MAX_NUMBERS1 (450)
// different constants in case you change something
#define MAX_NUMBERS2 (450)
// even better if you can do const static int MAX_NUMBERS1=450;
// but depends on the compiler
extern const byte numbers1[MAX_NUMBERS1] = { ... };
extern byte numbers2[MAX_NUMBERS2]; // will be initialised to 0
#endif
A continuación, todos los demás archivos .c en el programa pueden acceder a ellos.
Es (casi) siempre una mala idea poner una definición de una variable en un fichero de cabecera.
A declaración de una variable, p. Ej. extern byte numbers2[MAX_NUMBERS2];
le dice al compilador de C que hay una variable de matriz llamada numbers2
en otro lugar en el programa final vinculado. Si el enlazador no obtiene esa definición (de otro lugar), generará un error porque no hay espacio para la variable asignada.
Definición de variable (aviso no extern), p. Ej. byte numbers2[MAX_NUMBERS2];
le dice al compilador de C que hay una variable de matriz llamada numbers2
y debe asignar el espacio aquí, en el código objeto resultante de este archivo fuente, y esto se usará para mantener el valor de la variable en el final , programa vinculado
El espacio para numbers2
es no asignado por el compilador de C cuando se ve una declaración (precedido por extern
), que se asigna cuando se ve la definición real (sin extern
).
Por lo tanto, si coloca la definición real de cualquier variable en un archivo de encabezado e la incluye en más de un código fuente (.c), el compilador de C asignará espacio a la variable más de una vez. Entonces el enlazador dará un error (generalmente múltiples definiciones del mismo nombre).
Hay un problema más sutil. Si, al desarrollar por primera vez el programa, el archivo de cabecera solo se incluye es un archivo fuente, el programa compilará y vinculará correctamente. Luego, en una fecha posterior, si un segundo archivo fuente incluye el encabezado (tal vez alguien acaba de dividir el archivo del código fuente original en dos archivos), el enlazador generará un error de "múltiples definiciones". Esto puede ser muy confuso porque el programa utilizado para compilar y vincular, y aparentemente nada ha cambiado.
Resumen
Nunca asignar espacio para una variable poniendo una definiciónen un fichero de cabecera. Solo coloque declaraciones de variables en archivos de encabezado.
¿Por qué no p ¿Cuál es el código que tiene hasta ahora y qué errores de compilación recibe? –
No se puede '# definir' algo así. Piénsalo; cada vez que lo use declarará una nueva matriz. Por supuesto, eso llevará a redefiniciones múltiples. Las macros son simplemente sustitución de texto. Sustituya el texto usted mismo y vea si tiene sentido. –