TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ramirez 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.
-
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 !
-
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.
-
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 !
-
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
-
Gracias de nuevo por vuestra colabortación, pero sigo sin verlo claro, en el primer ejemplo donde estan las librerías:
#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
-
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
-
Muchas gracias por la respuesta.
-
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 ;)