TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Carlos2302 en 11 de Diciembre de 2019, 13:06:08

Título: Sobre la compilacion multiple de ccs c
Publicado por: Carlos2302 en 11 de Diciembre de 2019, 13:06:08
Estoy leyendo sobre este tema de la compilacion multiple que ofrece Ccs C, pero no le encuentro sentido a mi logica. Tal vez no lo entiendo y por eso quiero que me lo expliquen mejor ustedes. Este es el enlace de donde estoy leyendo.
http://www.ccsinfo.com/faq.php?page=multi_comp_units
Lo que no entiendo es la necesidad de realizar multiples compilaciones, porque si yo incluyo los archivos con los #include, eso no quiere decir entonces que el compilador va a tomas lo que tenga ahi en esos archivos y me los va a compilar. Eso es lo que yo entiendo, no se si es asi o no.
En el mismo enlace esta el archivo del ejemplo para la compilacion multiple.
Alguien tan amable que me lo explique mejor. Gracias a todos.
Título: Re:Sobre la compilacion multiple de ccs c
Publicado por: KILLERJC en 11 de Diciembre de 2019, 14:52:54
Es totalmente valido hacerlo como se hacen en CCS, es decir incluir archivos .c
Pero desde mucho tiempo se trata de seguir un estándar, y que hace que solo incluyas los .h (header files)

Por supuesto que podes tener problemas, por ejemplo si tenes algo asi:

#include "operaciones.c"
#include "hardware.c"

En el cual operaciones necesita funciones de hardware y hardware necesita operaciones de C, implica crear un archivo nuevo con esas funciones en comun, y terminarias dispersando las funciones en otros archivos, haciendo dificil el mantenimiento del codigo. Incluir en operaciones.c el hardware.c podria ser una ventaja, pero tambien una desventaja en el sentido que puede NO necesitarse. Y seguro que hay mas posibles puntos de error. Asi tambien tiene algunas ventajas, pero que dependen unicamente del compilador.

En cambio, puedo usar la multiple compilacion, y en operaciones.c puedo agregar el .h de hardware, y viceversa. de esa forma no tengo problemas.

El problema de CCS es que es uno de los pocos compiladores C (que conozco es el unico) que no se alienta a la compilacion multiple, todos los ejemplos, todos los programas incluyen archivos .c. Los demas se manejan todo mediante .h y siguiendo el estandar. Entonces pasar de un compilador C de ST a uno de TI, a uno de Microchip como el XC8, no te supone demasiados cambios (solo los del propio compilador y hardware), y podes usar los archivos relativamente facil, mientras que con CCS necesitas cambiar bastante, y mas si te apoyas sobre "librerias" que encontras por internet. Hablando de codigos un poco mas complejos ( FS /Ethernet/etc)

Otro problema es que si queres compilacion multiple en CCS, las directivas las tenes que poner en todos los archivos. Algo absurdo en otros compiladores.
Título: Re:Sobre la compilacion multiple de ccs c
Publicado por: Carlos2302 en 11 de Diciembre de 2019, 20:30:28
OK ya entiendo, algo no todo, :oops: porque si ka idea es de colocar los #include en donde los vaya a utilizar simplemente.
Ahora una nueva pregunta que diferencia existe entre los .c y los .h,
yo en mi caso coloco todo lo referente a configuración, variables globales y constantes en el .h y las funciones en los .c bueno asi lo hago yo y como siempre hago trabajos sencillos pues casi nunca o mejor dicho nunca tengo problemas.
Título: Re:Sobre la compilacion multiple de ccs c
Publicado por: KILLERJC en 11 de Diciembre de 2019, 23:09:59
Te lo vuelvo a decir.. Usualmente el estandar de programacion que casi todos adoptaron fue:

.h:

Nada de codigo: nada ejecutable
Nada que ocupe memoria.
Definiciones, por ejemplo definir una estructura, definir los prototipos de las funciones a usar en el .c y en los que incluyas. definir una union, etc


.c:
Todo lo ejecutable y que ocupa espacio.
Aca definis variables que vas a ocupar en tu .c, funciones, donde tenes el codigo.

Citar
OK ya entiendo, algo no todo, :oops: porque si ka idea es de colocar los #include en donde los vaya a utilizar simplemente.

Podes probar si tenes algun otro compilador C.
Si pensamos en como trabaja el compilador, hacerlo como lo haces no es distinto de escribir todo en un solo archivo, a pesar que tenes varios, el resultado es como copiar y pegar todo en un solo archivo.

De la otra forma, cada archivo .c se compila de forma separada y se generan simbolos, que luego el linker une.