Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
2 participantes
Página 1 de 1.
Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
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:
4 Crear un archivo con la lista de archivos con la implementación de las funciones, por ejemplo:
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)
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
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:
de esta manera se crea el archivo _uno.o y linkeo de la siguiente manera:
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.
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
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
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();
}
- 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
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.
JosePablo- Participante
- Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 43
Localización : Costa Rica
Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
Hola JosePablo.
Quizás tengas que pasarle libfilename.lib al linker , mírate este post:
https://pic-linux.forosactivos.net/sdcc-f1/problema-con-la-libreria-delay-en-los-18f-t79.htm
Saludos.
Quizás tengas que pasarle libfilename.lib al linker , mírate este post:
https://pic-linux.forosactivos.net/sdcc-f1/problema-con-la-libreria-delay-en-los-18f-t79.htm
Saludos.
Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
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
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
JosePablo- Participante
- Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 43
Localización : Costa Rica
Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
En la lista tienes que poner: _uno.rel , creo que has puesto: _uno.csdcclib -l ../../lib/libfilename.lib filenamelist.txt
Adding: _uno.c
Para linkar yo diría que lo correcto es:
Fíjate que es -l libfilename.lib (i mayúscula).sdcc -mpic16 -p18f4550 -V --debug -Wl-c -Wl-m -Ilibfilename.lib -omain.hex main.o
Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
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
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
JosePablo- Participante
- Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 43
Localización : Costa Rica
Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
Claro... prueba algo como esto:
- Código:
sdcc --debug -I../../include -I/usr/bin/../share/sdcc/include/pic16 -c _uno.c
Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
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
Saludos
JosePablo- Participante
- Mensajes : 22
Fecha de inscripción : 10/01/2009
Edad : 43
Localización : Costa Rica
Re: Creación de una libreria para utilizar las funciones en un PIC18F4550 y en un MCS8051
Pues ni idea... de todas formas en el post anterior metí la pata, me refería a algo como esto:
pero eso genera _uno.o y no _uno.rel
- 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
Temas similares
» Libreria LCD 4Bit , para Pic16f
» Módulo kernel y firmware para conectar PIC18F4550 al PC vía USB
» Bug en la librería ADC para 18F
» librería ADC para PIC-GCC
» Libreria para PIC
» Módulo kernel y firmware para conectar PIC18F4550 al PC vía USB
» Bug en la librería ADC para 18F
» librería ADC para PIC-GCC
» Libreria para PIC
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.