Relacionado ligeramente con este: enlace
Puedo reubicar el código muy bien, pero estoy teniendo problemas con las constantes:
Código de ejemplo:
#include <xc.h>
unsigned char buffer[16];
__section("SecConst1") const unsigned char constants1[] = "const1";
__section("SecConst2") const unsigned char constants2[] = "const2";
//__section("SecText1") const unsigned char constants1[] = "const1";
//__section("SecText2") const unsigned char constants2[] = "const2";
__section("SecText1") void fill_buffer1(void)
{
unsigned char i = sizeof(constants1);
do
{
i--;
buffer[i] = constants1[i];
}
while(i);
}
__section("SecText2") void fill_buffer2(void)
{
unsigned char i = sizeof(constants2);
do
{
i--;
buffer[i] = constants2[i];
}
while(i);
}
__section("SecText") void main(void)
{
while(1)
{
fill_buffer1();
fill_buffer2();
}
}
Opciones de enlazador:
-L-aClass1=1200h-17FFh,1800h-1FFDh -L-dClass1=2 -L-pSecText1=Class1 -L-pSecText2=Class1 -L-pSecText=Class1
Si lo compilo sin opciones de vinculador, o si solo especifico las funciones (como arriba), se compila sin errores y veo todos los nombres de las secciones en el archivo de mapa, así que sé que están todos ahí. . Pero si especifico dónde colocar una constante, la compilación falla porque el nombre de esa sección no se definió. Si cambio al otro conjunto de declaraciones constantes (intercambiar los comentarios), los nombres de esos de repente no se definen.
Siento que esto es un error en la cadena de herramientas, y se lo he dicho a Microchip a través de su sitio de soporte, pero ¿alguien sabe de una buena solución?
Prefiero no especificar la dirección de todas las constantes directamente en el código fuente porque el proyecto completo tiene muchas de ellas y todas pueden cambiar el tamaño y el contenido de una versión a la siguiente.
Estoy usando un PIC16F1454, pero estoy bastante seguro de que no importa para este problema.