Actualmente estoy pasando un mal momento al usar un chip de RAM externo (512 kB) con un PIC18F8720 y el compilador Microchip XC8 (v1.35, modo PRO).
Cada vez que intento escribir un código para modificar una variable en la memoria externa, el enlazador emite un error (712): "no se puede generar código para esta expresión". Esto no ocurre al leer las variables lejos : solo cuando escribe en ellas.
Este error es reproducible, incluso en este pequeño programa de ejemplo:
#include <xc.h>
#include <stdio.h>
far int intArray[10];
far int intVariable;
void main(void) {
intVariable = 2; // --> ERROR 712
intArray[1] = 3; // --> ERROR 712
printf("%d\n", intVariable);
printf("%d\n", intArray[0]);
}
Los comandos de compilación + vinculación son generados por MPLAB X v3.20:
"/opt/microchip/xc8/v1.35/bin/xc8" --pass1 --chip = 18F8720 -Q -G --double = 24 --float = 24 --emi = byteselect --ram = predeterminado, + 20000-9FFFF --opt = predeterminado, + asm, + asmfile, -speed, + espacio, -debug --addrqual = require --mode = pro -P -N255 --warn = -3 --asmlist - -summary = predeterminado, -psect, -class, + mem, -hex, -file --output = predeterminado, -inhx032 --runtime = predeterminado, + clear, + init, -keep, -no_startup, -download, + config , + clib, -plib --output = -mcof, + elf: multilocs --stack = compilado: auto: auto: auto "- formato =% f:% l: error: (% n)% s" "- -warnformat =% f:% l: advertencia: (% n)% s "" --msgformat =% f:% l: advisory: (% n)% s "-obuild / default / production / main.p1 main. c
"/opt/microchip/xc8/v1.35/bin/xc8" --chip = 18F8720 -G -mdist / default / production / Test01.X.production.map --double = 24 --float = 24 --emi = selección de bytes --ram = predeterminado, + 20000-9FFFF --opt = predeterminado, + asm, + asmfile, -speed, + espacio, -debug --addrqual = require --mode = pro -P -N255 - -warn = -3 --asmlist --summary = default, -psect, -class, + mem, -hex, -file --output = default, -inhx032 --runtime = default, + clear, + init, -keep , -no_startup, -download, + config, + clib, -plib --output = -mcof, + elf: multilocs --stack = compilado: auto: auto: auto "--errformat =% f:% l: error: (% n)% s "" --warnformat =% f:% l: advertencia: (% n)% s "" --msgformat =% f:% l: advertencia: (% n)% s "--memorysummary dist / default / production / memoryfile.xml -odist / default / production / Test01.X.production.elf compilación / default / production / main.p1
Salida de compilación:
main.c: 9: error: (712) no puede generar código para esta expresión
main.c: 10: error: (712) no se puede generar código para esta expresión
Microchip MPLAB XC8 C Compiler (Modo PRO) V1.35
Fecha de construcción: 07/07/2015
Versión de soporte de pieza: 1.35
Copyright (C) 2015 Microchip Technology Inc.
Tipo de licencia: Configuración del nodo
¿Qué estoy haciendo mal? La salida del compilador no ayuda mucho, ya que el error es demasiado genérico para dar alguna pista.