Autor Tema: Duda de principiante sobre librerías  (Leído 2205 veces)

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

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Duda de principiante sobre librerías
« en: 07 de Junio de 2009, 18:01:47 »
Hola a todos de nuevo, sigo con el intento de aprender C, ahora me surge una duda que seguro que para vosotros es fácil, se trata de lo siguiente, cuando en los ejemplos que veo en la red, existe una librería, veo que algunos tienen extensión *.h y otros *.c, ¿porqué ocurre esto?, además tenía entendido que debía de estar las librerías en el mismo directorio que el código fuente, pero ya he visto varios ejemplos que menciona una librería y estas no están ¿cómo puede ser esto?

De nuevo agradezco a todos vuestra colaboración y comprensión por estas preguntas tan elementales.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Duda de principiante sobre librerías
« Respuesta #1 en: 07 de Junio de 2009, 20:30:20 »
Hola, los archivos H se llaman archivos cabezeras y contienen normalmente definicion de constantes, tipos y prototipos de funciones esto es para que el compilador "conozca" como tratar a los mismos, en los archivos C se encuentran las implementaciones. Cuando se usa una libreria, se la debe proveer con un archivo H, para que la puedas incluir en alguno de los archivos C de tu proyecto, el que resuelve todo es el linker, y no hace falta que este en el mismo directorio, solo tenes que instruir al linker para que la busque el directorio correspondiente.

Saludos !

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Duda de principiante sobre librerías
« Respuesta #2 en: 08 de Junio de 2009, 08:59:46 »
Muchas gracias RICHI777 por tu respuesta, pero sigo sin entender los ejemplos a los que hacia mención, son los ejemplos de nuestro colega VsZener, en el siguinte ejemplo, pone como librerías " #include <24256.c> y #include <lcd.c> " ¿dónde están las librerías? ¿porqué tienen extensión *.c?

#include <16f648a.h>            //pic a utilizar
#use delay(CLOCK=4000000)         //Fosc=4Mhz
#fuses HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT   //comandos para el programador
#define use_portb_lcd TRUE         //utilizar el port b para lcd
#define EEPROM_SDA PIN_A1          //definimos los pines donde...
#define EEPROM_SCL PIN_A0          //la eeprom ira conectada
#include <24256.c>               //libreria de eeprom externa 24LC256
#include <lcd.c>                //libreria de lcd

///PROGRAMA
void main(void){
   int dir=0;               //direccion de eeprom a escribir y leer mensajes
   char men1[]="VsZeNeR'05";   //declaracion de...
   char men2[]="Hola";
   char men3[]="Foro";
   char men4[]="TODOPIC!";      //...mensajes a escribir y leer por 25LC256


Y en este otro  ejemplo si tiene la extensiónn .h, y en el mismo directorio está este archivo. ¿Dónde está la diferencia?

#include <16f648a.h>            //pic a utilizar
#include <vs_lib_luces.h>         //nuestra libreria para las funciones kit(),juego_luces()
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use standard_io(B)
#use standard_io(A)

///PROGRAMA
void main(void)
{
   set_tris_a(0xFF);            //porta como entrada
   set_tris_b(0x00);            //portb como salida
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas

   do{                     //bucle...
      if(!input(PIN_A0))      //¿switch cerrado?
         kit();            //SI ->ejecuta coche fantastico(kit)
      else
         juego_luces();      //NO ->ejecuta juego luces
      }while(TRUE);         //...infinito
}


Nuevamente os doy las gracias a todos por responder estas preguntas tan triviales.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Duda de principiante sobre librerías
« Respuesta #3 en: 08 de Junio de 2009, 11:05:11 »
Hola, no te puedo ayudar, lo que si te puedo decir es que no es una buena practica incluir archivos C dentro de otros, y tu duda en logica si se incluye un archivo de esa manera tiene que estar en el path del proyecto o en los path de configuración.

Saludos !

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda de principiante sobre librerías
« Respuesta #4 en: 08 de Junio de 2009, 11:13:42 »
Hola.

Eso depende mucho de la sintaxis que tengas.

Cuando pones la libreria entre <>, el compilador hace referencia a la carpeta que trae configurada como fuente -eso esta en las opciones de configuracion del compilador- y busca la libreria en esa carpeta. Pero si pones la libreria entre comillas " " entonces el compilador busca primero en la carpeta donde estas haciendo el proyecto.

Normalmente en los .h van las directivas de compilacion y los prototipos de las funciones y en l .c van las definiciones de las funciones, tal cual lo dice Richi.

Tienen extension .c porque dentro de esos archivos esta el codigo en c que permite el manejo del perifercio que hace referencia la libreria. Esos archivos estan en la carpeta drivers del compilador.

Saludos
El papel lo aguanta todo

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Duda de principiante sobre librerías
« Respuesta #5 en: 09 de Junio de 2009, 05:43:11 »
Gracias de nuevo por vuestra colabortación, pero sigo sin verlo claro, en el primer ejemplo donde estan las librerías:
Citar
#include <24256.c>               //libreria de eeprom externa 24LC256
#include <lcd.c>                //libreria de lcd
¿dónde se encuentran estas librerías? ya que del ejemplo de VsZener no estabán, o por el contrario ¿ya estaban creadas en la carpeta que nos dice nuestro amigo MLO?, (por cierto serias tan amable de decirme con más detalle donde está esta carpeta, ya que incluso con el buscador no la encuentro).

Por otro lado, si lo que he puesto arriba fuera cierto, entonces en el segundo ejemplo, aunque tenga extensión .h, al ser de elaboración propia y no estar predefinida en la carpeta que se mencionaba antes, sí que la pongo en el mismo directorio que el progrmaa pricipal; e incluso ¿podía guardarla con la extensión .C?

Nuevamente os doy las gracias por la paciencia que estais teniendo conmigo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda de principiante sobre librerías
« Respuesta #6 en: 09 de Junio de 2009, 10:46:24 »
La ruta es:

Archivos de programa/PICC/Drivers

Si tu generas un .c, éste no se adicionará en el linker files, pero si generas el .h si se adicionara. No he probado nunca crear un .c en el que estan las configuraciones como los #fuses y demas, siempre lo pongo en un .h -asi lo he aprendido-

El lio con "donde guardarla" es mas relacionado con el orden en tus proyectos. Si defines un archivo "configuracion.h" para cada proyecto y lo guardas en la misma carpeta se te va sobreescribir, ademas, es bueno tener portabilidad en los programas, es decir que puedas sin problema compilarlo en otro ordenador sin depender de que librerias tenga el otro ordenador ... esto se logra llevando tu, tus librerias.

Saludos
El papel lo aguanta todo

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Duda de principiante sobre librerías
« Respuesta #7 en: 09 de Junio de 2009, 12:46:06 »
Muchas gracias por la respuesta.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Duda de principiante sobre librerías
« Respuesta #8 en: 11 de Junio de 2009, 11:08:03 »
Buenas:

Aunque ya te han contestado, te comento sobre las rutas de las librerias:

· Si dicha librería está entre triángulos: < >, ejemplo: #include<lcd.c>. El compilador irá a buscarla en la carpeta interna que se creó cuando instalaste el programa, en este caso, el de la casa CCS.

La dirección suele ser:

* C:\Program Files\PICC\Drivers
* C:\Program Files\PICC\Devices

· Otra opción es leer cargar la librería de una localización diferente, la sintaxis es: #include "C:\lcd.c", donde están indicando al compilador que la librería lcd.c está en la ruta especificada.

Un saludo ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte