tambien si son constantes (que solo cargas el valor y los muestras) solo agrega "const" ejemplo
const int matris1
y se agrega a la flash
Creo que no le sirve de nada por que le PIC16F628A no puede leer desde la Flash, no creo haberme confundido y haber mirado mal el datasheet.
Pero tal ves con const lo grabe en la EEPROM, eso depende de lo que diga el linker
-La primera es que nunca he trabajado con la EEPROM y por eso me surgen algunas inquietudes, por ejemplo: ¿las variable las cargaría en la EEPROM por software en la propia programación (digamos leyendo las variables en un inicio, cargándolas en la EEPROM y a partir de ahí solo utilizarlas desde la EEPROM, o por el contrario, grabarlas directamente en el hardware de la EEPROM directamente desde el grabador del micro (PICKIT3 en este caso)? En el segundo caso (el de grabarla la EEPROM desde el grabador de PIC) ¿con que herramienta podría generar el archivo a grabar en la EEPROM?
Esto depende, yo no se como tenes definido tus arrays,
- Si cada array tiene valores distintos y son todos constantes (es decir siempre cargas los mismos al comienzo) entonces ahi sugiero ir por grabarlos en la EEPROM, en la Flash como dije no por que ese PIC no puede leer de la misma.
- Si cada array tiene los mismos valores pero solo usas algunos nomas y nuevamente comienzan con un valor siempre igual, entonces mejor aun y usas la EEPROM
- Si los valores de los array dependen de otra condicion entonces y no son siempre los mismos valores en cada array de comienzo, entonces no tenes que guardar nada. Creo que este es tu caso, ya que estas "cargando" los valores al array dentro del switch, si es asi entonces no necesitas guardar nada en la EEPROM, y solo tener en cuenta que deebrias limitarte a usar solo algunos valores.
En C hay formas de guardar en el EEPROM, en C creo que es:
#rom getenv("EEPROM_ADDRESS")={0x00,0x23,......,0x34}
Aunque no estoy muy seguro por que no use CCS, eso te lo va a agregar en el .hex para que lo grabes.
-La segunda interrogante es la siguiente: ¿no se supone que si en C se declara una variable como local (digamos dentro de una función) la misma se crea cuando se llama dicha función y se destruye automáticamente al salir, dejando libre la memoria que ocupó dicha variable? Lo que estoy viendo (según mi apreciación, que puede estar sujeta a errores) es que aún en este tipo de condiciones el consumo de memoria no disminuye. ¿Tiene que ver esto con el stack que mencionas?, si pudieras explicarme un poco eso del stack quizás pudiera entender mejor como el compilador maneja este asunto de la memoria y las variables.
Asi es...
Una variable global, sabes el espacio que ocupa y C sabe que no se destruye asi que lo crea en un espacio que no va a tocar en la RAM.
En cambio una local ( ya sea en el main o donde sea ) debe hacer espacio para esas variables, entonces usa la RAM que sobra como stack, que funcion cumple este stack?, almacena todas las variables locales, cuando se llama a una funcion se crea mas informacion apuntando a la base de la "seccion" anterior (ej correspondiente al main) y comienza a guardarse las nuevas variables locales a partir de ese punto del stack, cuando se sale de esa funcion, se toma la direccion de la seccion anterior (main) y se carga el stack pointer con ese valor
Lo que le llaman Frame, es como separan entre una funcion u otra, aca te doy una imagen para que me entiendas:
https://upload.wikimedia.org/wikipedia/en/a/a7/ProgramCallStack2.pngDonde si seguimos con el ejemplo anterior el Frame (N-3) es el main, luego llama a una funcion y se crea el frame (N-2) con las variables locales de esa funcion, si se llama a otra funcion con variables locales se crea el proximo y asi... cuando se deja de usar vuelve el stack pointer a apuntar al frame anterior.
Asi se maneja el stack.
Si vos creas tus variables locales en el main, no hay forma que se borren. por que quedan en ese stack a no ser que tu switch llame a una funcion distinta y ahi cree cada uno de los arrays. Pero creo que esto no es lo que queres hacer vos.
Tambien hay otra cosa llamada Heap en C, pero creo que no lo implementan aca en los micros.
Ademas si creas un solo array, no vas a tener problema de RAM ya que ocuparias 30 de 224 bytes.