Autor Tema: [SOLUCIONADO]Problemas al añadir driver nuevo a proyecto viejo  (Leído 1356 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
[SOLUCIONADO]Problemas al añadir driver nuevo a proyecto viejo
« en: 11 de Diciembre de 2012, 20:08:40 »
Buenas a todos, pues llevo varios días intentando añadir un driver que he hecho en un proyecto con las pilas TCP/IP de microchip y no hay manera, me da errores varios, como por ejemplo:

Error - could not find definition of symbol '__OpenI2C:1' in file 'Obj-C18-PIC18F4620_ENC28\MainDemo.o'.

El proyecto sin ese driver va perfecto.

El driver que he hecho es para manejar el dispositivo DS1621 probándolo sólo en un proyecto aparte sólo para el, funciona perfecto.

He colocado los archivos en varias zonas.

He colocado el includer del driver, tanto el .h como el .c así como el i2c.h en diferentes sitos, tanto en el main.c como en el main.h, como en el TCPIP.h , en fin en un mogollón de sitios y de diferentes maneras y siempre me salta algún error raro, nunca es el mismo, eso es según donde ponga los archivos.

Mi pregunta es:
¿Hay alguna pauta o regla para poder añadir un archivo nuevo a las pilas TCP/IP?

EDITO:
Uy.... me olvidaba de decir con qué compilador lo hago y con que IDE.
pues utilizo C18 y MPLAB
« Última modificación: 17 de Diciembre de 2012, 15:35:59 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problemas al añadir driver nuevo a proyecto viejo
« Respuesta #1 en: 13 de Diciembre de 2012, 15:02:01 »
¿No hay nadie que me pueda echar un cable?

Voy a decir las rutas donde he añadido los archivos y que es lo que he hecho.

He intentado seguir la estructura de todos los archivos del proyecto.

Archivos añadidos:

Los archivos que estoy intentado incluir es un driver del termometro digital-termostato DS1621, éste driver consta de dos archivos uno de cabecera llamado DS1621.h donde declaro las variables y las funciones  y un código fuente llamado DS1621.C donde están las funciones que manejan el dispositivo, estos dos archivos los incluyo en las carpetas TCPIP Stack correspondientes, el .h en el inlcuder y el .c en el de las librerías.

 y por último el código de cabecera del protocolo i2c que trae el compilador y se llama i2c.h.

Rutas de los archivos:

Lo primero que he hecho es crear una definición en el archivo de cabecera TCPIPConfig.h , para ello he incluido esta línea:
Código: [Seleccionar]
#define DEVICE_DS1621
Luego he creado la llamada a los drivers en el fichero TCPIP.h
Lo he añadido a lo último del fichero, debajo de #if defined(WF_CS_TRIS) de ésta manera
Código: [Seleccionar]
#if defined(DEVICE_DS1621)
        #include <i2c.h>
#include "TCPIP Stack/DS1621.h"
#endif

Luego en el main.c del proyecto, detro de la función InitializeBoard(); le he añadido la configuración del protocolo i2c que voy a utilizar, de esta manera
Código: [Seleccionar]
//*****************************************************************
//Configuración del i2c
//*****************************************************************
#if defined(DEVICE_DS1621)
OpenI2C(MASTER,SLEW_OFF); //Configuración de Master y velocidad a 100KHz
SSPADD = 9; //100KHz para cristal de 4MHz
#endif


También he añadido dentro de la función main(); del archivo principal, la inicialización del dispositivo y la función de configuración del mismo, ejemplo:
Código: [Seleccionar]
#if defined(DEVICE_DS1621)
init_ds1621(address, command);
config_ds1621(address, config);
#endif

En el bucle principal del main.c, bucle while(), he añadido la función que lee el dato del dispositivo DS1621 de esta manera.

   
Código: [Seleccionar]
#if defined(DEVICE_DS1621)
temperatura = read_temp_normal_precision(address);
#endif


A todas las funciones y driver nuevos que he añadido menos al DS1621.h y al i2c.h (ósea a DS1621.c sólo) la definición de:
Código: [Seleccionar]
#if defined(DEVICE_DS1621)
#endif
Para que si desactivo el dispositivo estas funciones no las compile el compilador.

Pues después de añadir todo esto cuando le doy a compilar el MPLAB me da un error

Código: [Seleccionar]
Error - could not find definition of symbol '__OpenI2C:1' in file 'Obj-C18-PIC18F4620_ENC28 \Main.o'.
He probado a añadirle en la cabecera del código fuente del DS1621.C los archivos de cabecera
Código: [Seleccionar]
#include "TCPIPConfig.h"
#include "TCPIP Stack/TCPIP.h"

Y otros mas, ósea que lo he cambiado de todas las maneras que se me ha ocurrido y no me va.
Cada vez que cambio estos u otras posiciones de los archivos me dan errores diferentes.

Unas veces que no esta declaradas las funciones del driver, otras que no encuentra ciertos archivos del archivo de cabecera i2c.h y así

A ver si alguien me puede orientar.

Si hacen falta más datos o que comparta todo o parte del código me lo decís y lo subo, así también podrán tener el driver que he hecho aunque no está terminado pero lo básico funciona perfectamente

Gracias
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problemas al añadir driver nuevo a proyecto viejo
« Respuesta #2 en: 15 de Diciembre de 2012, 06:56:29 »
Hola de nuevo, sigo pidiendo ayuda.
según he leido por ahí, al parecer el error es del c18 tiene que ver algo con el archivo linker pero no tengo mucha idea.
¿no hay nadie que sepa del tema?
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Problemas al añadir driver nuevo a proyecto viejo
« Respuesta #3 en: 17 de Diciembre de 2012, 15:35:29 »
Pues he resuelto el problema, era tan sencillo como añadir a la ventana del proyecto las librerías de todo el protocolo I2C que se encuentra en la ruta /scr/pmc_common/I2C.
lo he podido resolver gracias a un comentario del compañero Suky en otro post
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...