Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Ver el tema anterior Ver el tema siguiente Ir abajo

Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por JosePablo el Lun 4 Oct 2010 - 1:33

Hola a tod@s

La cosa está asi.

Tengo que programar unas funciones que debe probar en un pic 18F4550 pero luego hay que portar la programación al micro MCS 8051. Yo escogí el compilador SDCC por que soporta ambas plataformas además de ser software libre.

La documentación del SDCC dice que para hacer una librería debo hacer lo siguiente:
1 Crear un archivo filename.h con las funciones prototipos, o sea, la declaración de las funciones y de los structs y unions que necesite.
2 Crear para cada función un archivo, func01.c, con la implementación de la misma.
3 Compilar los archivos .c, por ejemplo:
Código:

sdcc -I include/ -c _uno.c
sdcc -I include/ -c _tres.c
sdcc -I include/ -c _dos.c
etc
El compilador crea los archivos _uno.rel, _dos.rel,_tres.rel etc
4 Crear un archivo con la lista de archivos con la implementación de las funciones, por ejemplo:
Código:

_uno.rel
_dos.rel
_tres.rel
etc
El archivo se puede llamar filename.txt
5 Compilar la libreria con sdcclib de la siguiente manera:
sdcclib -l libfilename.lib filename.txt
En este punto ya tengo mi archivo libfilename.lib y ahora puedo utilizarlo.
Tengo un programa main.c donde hago uso de la libreria, el archivo contiene lo siguiente (omitiendo la configuracion de los __CONFIG1L y los demás)
Código:

#include <pic18f4550.h>
#include <filename.h>
void main() {
  uno();
}
y lo compilo con la siguiente instrucción
Código:
sdcc -mpic16 -p18f4550 -V --debug -I include main.c libfilename.lib -L lib

en el directorio include/ se encuentra filename.h y en el directorio lib/ el archivo libfilename.lib.
Hasta aquí todo parece bien y el problema es a la hora de linkear para generar el archivo main.hex.
Utilizo la siguiente instrucción
Código:
sdcc -mpic16 -p18f4550 --debug -Wl-c -Wl-m -I include/  -omain.hex main.o
y el programa dice:

message: using default linker script "/usr/share/gputils/lkr/18f4550.lkr"
error: missing definition for symbol "_uno", required by "main.o"

y no genera el archivo main.hex
lo que hice fue compilar el archivo uno.c de otra manera, asi:

Código:
sdcc  -mpic16 -p18f4550 --debug -I include/ -c _uno.c

de esta manera se crea el archivo _uno.o y linkeo de la siguiente manera:

Código:
sdcc -mpic16 -p18f4550 --debug -Wl-c -Wl-m -I include/  -omain.hex main.o _uno.o

y ahora si genera el main.hex. Revice los archivos que trae el SDCC y no utiliza *.o todas las librerías están en formato *.lib
y la idea es crear un archivo libfilename.lib que pueda utilizar en el PIC18F4550 y en el MCS8051, creo que siempre tendría que hacer dos
archivos .lib pero con el mismo código fuente con indicaciones del compilador diferentes.

Ahora si después de este largo cuento la pregunta.

Como hago para no tener que general el archivo _uno.o y que solo utilice la librería?
Cualquier ayuda se las agradeceré muchísimo.
avatar
JosePablo
Participante
Participante

Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 36
Localización : Costa Rica

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por Pikitin el Lun 4 Oct 2010 - 2:08

Hola JosePablo.

Quizás tengas que pasarle libfilename.lib al linker , mírate este post:
http://pic-linux.forosactivos.net/sdcc-f1/problema-con-la-libreria-delay-en-los-18f-t79.htm

Saludos.

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por JosePablo el Lun 4 Oct 2010 - 3:14

Hola.
Yo compilo la libreria asi:
sdcc --debug -I../../include -c _uno.c
sdcclib -l ../../lib/libfilename.lib filenamelist.txt
Adding: _uno.c

luego cuando linkeo para generar el archivo hex ejecuto lo siguiente:
sdcc -mpic16 -p18f4550 -V --debug -Wl-c -Wl-m -L ../../lib -ospider.hex spider.o libfilename.lib

+ "/usr/bin/gplink" -I"../../lib" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -I"/usr/bin/../share/sdcc/lib" -I"/usr/share/sdcc/lib" -c -m -w -r -o main.hex main.o crt0i.o libfilename.lib libdev18f4550.lib libsdcc.lib
error: "../../lib/libfilename.lib" is not a valid coff object or archive
message: using default linker script "/usr/share/gputils/lkr/18f4550.lkr"
+ "/usr/bin/gplink" -I"../../lib" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -I"/usr/bin/../share/sdcc/lib" -I"/usr/share/sdcc/lib" -c -m -w -r -o main.hex main.o crt0i.o libfilename.lib libdev18f4550.lib libsdcc.lib returned errorcode 256

El error dice:
error: "../../lib/libfilename.lib" is not a valid coff object or archive

y no entiendo donde está el error ni como corregirlo ya probe compilando la libreria asi:
sdcc -mpic16 -p18f4550 --debug -I../../include -c _uno.c
pero el problema persiste.

Saludos
avatar
JosePablo
Participante
Participante

Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 36
Localización : Costa Rica

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por Pikitin el Lun 4 Oct 2010 - 4:22

sdcclib -l ../../lib/libfilename.lib filenamelist.txt
Adding: _uno.c
En la lista tienes que poner: _uno.rel , creo que has puesto: _uno.c

Para linkar yo diría que lo correcto es:
sdcc -mpic16 -p18f4550 -V --debug -Wl-c -Wl-m -Ilibfilename.lib -omain.hex main.o
Fíjate que es -l libfilename.lib (i mayúscula).

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por JosePablo el Lun 4 Oct 2010 - 5:19

Gracias por notar mi error en el archivo con la lista, tenes razón yo tenía _uno.c cuando debía ser _uno.rel, eso corrigio un poco pero encontré otro problema. El archivo libfilename.lib es un texto plano y encontre dentro del mismo la siguiente línea:
O -mmcs51 --model-small
lo cual indica que la librería se creo para MCS8051 y no para PIC16, en este caso 18F4550. Por ahi va el problema pero no encuentro donde podría estar, la fuente _uno.c la compilo de esta manera:

sdcc -mpic16 -p18f455o --debug -I include -c _uno.c

y luego creo la librería asi:

sdcclib -l ../../lib/libfilename.lib filenamelist.txt

y el sdcclib no accepta la opción -mpic16. Alguna idea??

Saludos
avatar
JosePablo
Participante
Participante

Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 36
Localización : Costa Rica

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por Pikitin el Lun 4 Oct 2010 - 5:28

Claro... prueba algo como esto:

Código:
sdcc --debug -I../../include -I/usr/bin/../share/sdcc/include/pic16 -c _uno.c

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por JosePablo el Lun 4 Oct 2010 - 6:03

Nope, el problema persiste, debe ser en otra parte donde se le indica pero no tengo ni idea y ya revise la documentación del sdcc y no encuentro nada al respecto.
Saludos
avatar
JosePablo
Participante
Participante

Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 36
Localización : Costa Rica

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por Pikitin el Lun 4 Oct 2010 - 6:48

Pues ni idea... de todas formas en el post anterior metí la pata, me refería a algo como esto:
Código:
sdcc --debug -mpic16 -p18f4550 -I../../include -I/usr/bin/../share/sdcc/include/pic16 _uno.c

pero eso genera _uno.o y no _uno.rel

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.