Autor Tema: Preguntas con CCS  (Leído 4903 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Preguntas con CCS
« en: 18 de Septiembre de 2017, 19:30:18 »
Bueno, hace poco lo agarre a CCS, y realmente no entiendo porque me esta dando errores. Utilizo el MPLAB X con el plugin CCS como IDE. Apenas cree el proyecto, compile y me dio error por no tener el #DEVICE, lo solucione agregando la ruta de include y agregando el PIC18F4550.h, pero apenas agregue un par mas de archivos al proyecto, el compilador se volvio loco.

Tengo un main.c y 3 archivos mas, pero que todavia no estan unidos por nada, lo que el tema va es un .c:

Este es mi .c

Código: C
  1. #include "communicationport.h"
  2.  
  3. // Para CCS esta funcion no tiene importancia
  4.  
  5. uint8_t I2C_Iniciar(uint32_t clockFreq)
  6. {
  7.     return 0;
  8. }
  9.  
  10. /*!< Writes data to a slave device. */
  11. void I2C_Escribir( uint8_t  slaveAddress, uint8_t  *dataBuffer, uint8_t  bytesNumber)
  12. {
  13.     uint8_t i;
  14.    
  15.     /*
  16.      * Comunicacion, pasos:
  17.      * - Start
  18.      * - SlaveAddress + W ( 0 para escribir )
  19.      * - Envio de comandos + datos, o registro + datos
  20.      * - Generamos el Stop
  21.      */
  22.    
  23.     i2c_start();
  24.     i2c_write(slaveAddress);
  25.     for(i = 0; i < bytesNumber; i++)
  26.     {
  27.         i2c_write(*dataBuffer++);
  28.     }
  29.  
  30.     i2c_stop();
  31. }
  32.  
  33. /*!< Reads data from a slave device. */
  34. void I2C_Leer( uint8_t  slaveAddress, uint8_t  *dataBuffer)
  35. {
  36.     /*
  37.      * Comunicacion, pasos:
  38.      * - Start
  39.      * - SlaveAddress + R ( 1 para leer )
  40.      * - lectura del byte + NACK
  41.      * - Generamos el Stop
  42.      */
  43.    
  44.     i2c_start();
  45.     i2c_write(slaveAddress | 0x01);
  46.     *dataBuffer = i2c_read(0);
  47.     i2c_stop();
  48. }

El problema aca son los errores que me da al compilar.. que son varios:

- math.h puedo abrirlo, pero no entiendo porque no posee la funcion sqrt(), como que para un PIC18 no va. Esta bajo un ifdef __PCD__
- Y luego lo que tiene que ver con el archivo de antes:

Citar
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:23:15:  Error#51  A numeric expression must appear here (start)
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:24:15:  Error#102  Expect comma (en el primer write )
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:27:30:  Error#102  Expect comma ( segundo write, de la esritura )
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:30:14:  Error#51  A numeric expression must appear here (stop de escritura )
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:44:15:  Error#51  A numeric expression must appear here (start de lectura)
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:45:30:  Error#102  Expect comma
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:46:30:  Error#102  Expect comma
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:47:14:  Error#51  A numeric expression must appear here

Basicamente en todas las instrucciones de I2C de ese .c

Y lo peor de todo:

Citar
C:\Program Files (x86)\PICC\Drivers\stdint.h:19:9:  Error#128  A #DEVICE required before this line

Me pide un #DEVICE en TODO archivo. Hasta en el stdint.
« Última modificación: 18 de Septiembre de 2017, 19:32:21 por KILLERJC »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Preguntas con CCS
« Respuesta #1 en: 18 de Septiembre de 2017, 19:37:07 »
Solucione de que me pida el #DEVICE en el stdint.h peeeero:


Me da error en todo un archivo diciendo esto, pongo el ejemplo de funcion y los errores:

Código: C
  1. void AD5933_SetRegisterValue(uint8_t registerAddress,
  2.                              uint32_t registerValue,
  3.                              uint8_t bytesNumber)
  4. {
  5.     uint8_t byte;
  6.     uint8_t writeData[2];
  7.  
  8.     for(byte = 0;byte < bytesNumber; byte++)
  9.     {
  10.         writeData[0] = registerAddress + bytesNumber - byte - 1;
  11.         writeData[1] = (uint8_t)((registerValue >> (byte * 8)) & 0xFF);
  12.         I2C_Escribir(AD5933_ADDRESS, writeData, 2);
  13.     }
  14. }

Citar
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:96:145:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:179:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:182:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:188:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:191:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:197:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:210:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:216:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:223:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:232:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:242:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:243:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:245:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:247:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:9:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:28:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:31:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:40:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:50:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:51:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:53:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:55:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:63:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:65:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:66:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:83:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:91:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:93:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:95:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:97:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:101:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:102:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:103:124:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:103:140:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:103:151:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:103:152:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:103:153:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:104:158:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:105:159:  Error#43  Expecting a declaration

EDIT:

Mismos archivos compilandolos con XC8:

Citar
BUILD SUCCESSFUL (total time: 1s)
Loading code from F:/CCS/MPLABx/XC8.X/dist/default/production/XC8.X.production.hex...
Loading completed

Los mismos, no cambie nada. Un par de warning de conversion de enteros con signos a sin signos ( a pesar que todos son sin signos ) pero compila correctamente.
Y un par de warning diciendo que las funciones no se usan.

Y el IDE PIC C Compiler, me vuelve loco, agregas los archivos, no te los compila. etc
« Última modificación: 18 de Septiembre de 2017, 21:29:55 por KILLERJC »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 255
Re:Preguntas con CCS
« Respuesta #2 en: 18 de Septiembre de 2017, 21:57:22 »
No tendrá que ver con que no encuentra la definición de uint8_t

Prueba con unsigned int8

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Preguntas con CCS
« Respuesta #3 en: 18 de Septiembre de 2017, 22:25:11 »
Deje solo una parte de codigo que es el que puse aca, todo lo demas esta comentado. Y cambie la definicion:

Código: C
  1. void AD5933_SetRegisterValue(unsigned int8 registerAddress,
  2.                              unsigned int32 registerValue,
  3.                              unsigned int8 bytesNumber)
  4. {
  5.     unsigned int8 byte;
  6.     unsigned int8 writeData[2];
  7.  
  8.     for(byte = 0;byte < bytesNumber; byte++)
  9.     {
  10.         writeData[0] = registerAddress + bytesNumber - byte - 1;
  11.         writeData[1] = (unsigned int8)((registerValue >> (byte * 8)) & 0xFF);
  12.         I2C_Escribir(AD5933_ADDRESS, writeData, 2);
  13.     }
  14. }

Citar
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:23:15:  Error#51  A numeric expression must appear here
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:24:15:  Error#102  Expect comma
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:27:30:  Error#102  Expect comma
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:29:14:  Error#51  A numeric expression must appear here
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:43:15:  Error#51  A numeric expression must appear here
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:44:30:  Error#102  Expect comma
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:45:30:  Error#102  Expect comma
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.c:46:14:  Error#51  A numeric expression must appear here
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.o ===>  8 Errors,  0 Warnings.
Build Failed.

nbproject/Makefile-default.mk:147: recipe for target 'build/default/production/AD5933/communicationport.o' failed
F:\CCS\MPLABx\Fran.X\main.c:16:1:  Warning#203  Condition always TRUE
F:\CCS\MPLABx\Fran.X\main.o ===>  0 Errors,  1 Warnings.
Build Successful.

F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:95:159:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:98:195:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:98:198:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:98:204:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:98:207:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:98:213:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:98:226:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:98:232:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:99:239:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:248:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:2:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:3:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:5:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:7:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:25:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:44:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:100:47:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:56:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:66:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:67:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:69:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:71:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:85:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:87:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:88:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:105:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:113:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:115:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:117:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:119:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:123:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:101:124:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:146:  Error#28  Expecting an identifier
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:162:  Error#48  Expecting a (
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:173:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:174:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:102:175:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:103:180:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.c:104:181:  Error#43  Expecting a declaration
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.o ===>  39 Errors,  0 Warnings.

Los demas no lo cambie... Pero ese archivo me sigue dando error, incluso varios en la misma linea.

Código: [Seleccionar]
"C:\PROGRA~2\PICC\CCSCON.exe"  out=""build/default/production\AD5933"" AD5933/AD5933.c +EXPORT +FH +DF +CC +Y=9 +EA I+="C:\Program Files (x86)\PICC\Devices" I+="C:\Program Files (x86)\PICC\Drivers" I+="AD5933" +DF +LN +T +A +M +J +EA +Z -P #__18F4550=1 +EXPORTD="build/default/production/AD5933" 
"C:\PROGRA~2\PICC\CCSCON.exe"  out=""build/default/production\AD5933"" AD5933/communicationport.c +EXPORT +FH +DF +CC +Y=9 +EA I+="C:\Program Files (x86)\PICC\Devices" I+="C:\Program Files (x86)\PICC\Drivers" I+="AD5933" +DF +LN +T +A +M +J +EA +Z -P #__18F4550=1 +EXPORTD="build/default/production/AD5933" 
"C:\PROGRA~2\PICC\CCSCON.exe"  out=""build/default/production"" main.c +EXPORT +FH +DF +CC +Y=9 +EA I+="C:\Program Files (x86)\PICC\Devices" I+="C:\Program Files (x86)\PICC\Drivers" I+="AD5933" +DF +LN +T +A +M +J +EA +Z -P #__18F4550=1 +EXPORTD="build/default/production" 

El main.c todo perfecto. Pero los demas no. Y es puro C, no tiene nada que ver con los includes, voy a tratar de quitar toda relacion entre los includes para ver si es eso.

Solo por las dudas, el main es:

Código: C
  1. #include <18F4550.h>
  2. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
  3. #use delay(clock=48000000)
  4. #use I2C(master,sda=PIN_B0,scl=PIN_B1,fast,FORCE_HW)
  5.  
  6. void main(void) {
  7.  
  8.     while(1);
  9. }
« Última modificación: 18 de Septiembre de 2017, 22:30:57 por KILLERJC »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Preguntas con CCS
« Respuesta #4 en: 18 de Septiembre de 2017, 22:29:45 »
Apenas quito los includes al PIC18F4550.h (no en el main) el unico error que me da es:

Citar
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.h:113:145:  Error#128  A #DEVICE required before this line
F:\CCS\MPLABx\Fran.X\AD5933\AD5933.o ===>  1 Errors,  0 Warnings.
Build Failed.
C:\Program Files (x86)\PICC\Drivers\stdint.h:19:9:  Error#128  A #DEVICE required before this line
F:\CCS\MPLABx\Fran.X\AD5933\communicationport.o ===>  1 Errors,  0 Warnings.
Build Failed.
nbproject/Makefile-default.mk:135: recipe for target 'build/default/production/AD5933/AD5933.o' failed
nbproject/Makefile-default.mk:147: recipe for target 'build/default/production/AD5933/communicationport.o' failed
F:\CCS\MPLABx\Fran.X\main.c:16:1:  Warning#203  Condition always TRUE
F:\CCS\MPLABx\Fran.X\main.o ===>  0 Errors,  1 Warnings.
Build Successful.

El problema es que deberia estar definido ya en el main, no entiendo porque necesita de que este definido en todos los lugares.
Encima ahora que veo. El archivo de cabecera PIC18F4550.h que provee CCS, no cuenta con guarda de include, es decir se puede incluir multiples veces.

-----------------------------------

Probando agregue unicamente esta linea a los archivos:

Código: C
  1. #device PIC18F4550

Y comenzaron a aparecer los errores. Asi que seguramente es por la multiple definicion de ese archivo, el problema esta en que sin eso da error.

-----------------------------------

Es como que los 3 archivos fueran compilados "independientes" uno de otro. Lo cual deberia ser, pero no al nivel que el compilador espera (que se pase las directivas de preprocesador para todos). Seguramente sea algo mal configurado en el IDE del MPLAB X.

Vi muchos codigos donde incluyen el .c donde esta el main() y parece que esa es la solucion que han llegado todos. Otro tema, parece no tener linker... y la compilacion de multiples archivos es un dolor de cabeza, algunos lo logran cargando varios archivos mas ( .sym .tre .sta . osym)
http://www.ccsinfo.com/forum/viewtopic.php?t=38254

Y otros poniendo el include del .c directo en el main.c
http://www.ccsinfo.com/forum/viewtopic.php?p=110805

Sino tenes que usar su IDE (PIC C Compiler ) quien es intenta arreglar todo esto. Pero ese IDE me mata, ni siquiera encuentro donde poner las rutas de include. Tengo agregado un .c pero no me lo compila, me lo deja afuera. Eso si, no me da esos errores igual que  en el MPLAB X.

Creo que ahora entiendo por que dicen que no usan varios archivos y todo lo hacen en uno solo. Si alguien posee una solucion correcta a esto es bienvenido. Sino tendre que irme a otro micro/compilador, aunque no le guste demasiado a mi compañero.
« Última modificación: 18 de Septiembre de 2017, 23:02:43 por KILLERJC »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 255
Re:Preguntas con CCS
« Respuesta #5 en: 19 de Septiembre de 2017, 02:37:55 »
Después de una búsqueda rápida encontré esto:

https://www.ccsinfo.com/faq.php?page=multi_comp_units

Incluso usan un .bat para realizar la compilación de distintas formas

Con algunas modificaciones probé el archivo linker.bat que modifique de

Código: Bash
  1. "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT report.c
  2. "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT filter.c
  3. "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT main.c
  4. "C:\Program Files\PICC\CCSC.exe" +FM project.c

a

Código: Bash
  1. "C:\Program Files\PICC\CCSC.exe" I+="C:\Program Files\PICC\Drivers" I+=. I+="C:\Program Files\PICC\Devices" +FM +EXPORT "Z:\home\alex\proyectos\php\crc_collision\EFiles\report.c"
  2. "C:\Program Files\PICC\CCSC.exe" I+="C:\Program Files\PICC\Drivers" I+=. I+="C:\Program Files\PICC\Devices" +FM +EXPORT "Z:\home\alex\proyectos\php\crc_collision\EFiles\filter.c"
  3. "C:\Program Files\PICC\CCSC.exe" I+="C:\Program Files\PICC\Drivers" I+=. I+="C:\Program Files\PICC\Devices" +FM +EXPORT "Z:\home\alex\proyectos\php\crc_collision\EFiles\main.c"
  4. "C:\Program Files\PICC\CCSC.exe" I+="C:\Program Files\PICC\Drivers" I+=. I+="C:\Program Files\PICC\Devices" +FM "Z:\home\alex\proyectos\php\crc_collision\EFiles\project.c"

y lo ejecute en Linux usando Wine (wineconsole cmd)


Código: [Seleccionar]
$ ls *.c
filter.c  main.c  project.c  report.c
$ ls *.h
filter.h  project.h  report.h

Y por si las dudas sobre que no se esta incluyendo el .c dentro del main.c

main.c
Código: C
  1. #include "project.h"
  2.  
  3. #include "report.h"
  4. #include "filter.h"
  5.  
  6. #include <stdlib.h>
  7. #include <input.c>
  8.  
  9. extern long report_line_number;
  10.  
  11. void main(void) {
  12.    long data;
  13.    
  14.    report_line_number = 0;
  15.    filter_clear();
  16.    
  17.    while( TRUE ) {
  18.       fprintf(PC, "  Enter data point: ");
  19.       data = get_long();
  20.       data = filter_data(data);      
  21.       report_data_line(data);
  22.    }
  23. }

report.c
Código: C
  1. #include "project.h"
  2.  
  3. long report_line_number;
  4.  
  5.  
  6. void report_data_line(int16 data){
  7.  
  8.    fprintf( PC, "%4lu  Data: %5lu\r\n", report_line_number++, data);
  9.  
  10. }
  11.  
  12. void report_error(errors error){
  13.  
  14.    switch( error ) {
  15.      case err_range    :  fprintf( PC, "%4lu  DATA POINT OUT OF RANGE\r\n", report_line_number++);
  16.      case err_too_far  :  fprintf( PC, "%4lu  DATA POINT TOO FAR FROM PREVIOUS POINT\r\n", report_line_number++);
  17.      case err_too_many :  fprintf( PC, "%4lu  TOO MANY DATA POINTS\r\n", report_line_number++);
  18.    }
  19. }

filter.c
Código: C
  1. #include "project.h"
  2.  
  3. #include "report.h"
  4.  
  5. #define WINDOW_SIZE 10
  6.  
  7. long history[WINDOW_SIZE];
  8. int points, history_ptr;
  9.  
  10.  
  11. void filter_clear() {
  12.    points=0;
  13.    history_ptr=0;
  14. }
  15.  
  16.  
  17. int32 calculate_average() {
  18.    int i;
  19.    int32 sum;
  20.  
  21.    for(sum=0,i=0; (i<WINDOW_SIZE) && (i<points); i++)
  22.       sum+=history[i];
  23.    return sum/i;
  24. }
  25.  
  26.  
  27. long filter_data(long value) {
  28.    long filtered;
  29.    
  30.    points++;
  31.    history[history_ptr]=value;
  32.    history_ptr=(history_ptr+1) % WINDOW_SIZE;
  33.  
  34.    filtered = calculate_average();
  35.    if(value > (filtered+100))
  36.      report_error(err_too_far);
  37.    
  38.    return filtered;
  39. }

project.c
Código: C
  1. #import(FILE=report.o)
  2. #import(FILE=filter.o)
  3. #import(FILE=main.o)

filter.h
Código: C
  1. void filter_clear();
  2. long filter_data(long value);

project.h
Código: C
  1. #include <16F877A.h>
  2. #fuses HS,NOWDT,NOPROTECT,NOLVP
  3.  
  4. #use delay(clock=20mhz)
  5. #use rs232(BAUD=9600, UART1, STREAM=PC)
  6.  
  7. enum errors { err_range, err_too_far, err_too_many };

report.h
Código: C
  1. void report_data_line(int16 data);
  2. void report_error(errors error);

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Preguntas con CCS
« Respuesta #6 en: 19 de Septiembre de 2017, 08:42:11 »
Voy a probarlo, veo que existe una solucion para el IDE tambien, pruebo esa, sino ire al .bat directamente. Gracias

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 899
Re:Preguntas con CCS
« Respuesta #7 en: 19 de Septiembre de 2017, 12:55:22 »
Creo que tu problema es que no has instalado el plug-in de ccs....   no basta con ejecutar el instalador del plug-in de CCS... también hay que activarlo dentro de MPLAB en: Tools/plugins/Available plugins/   selecciona la casilla de ccs picc compiler (o algo parecido) y darle al botón Install, reinicia el compilador y ahora crea un nuevo proyecto y cuando llegues a la pantalla de selección del compilador, seleccionas CCS.
Una vez que se haya abierto el proyecto, agrega tus archivos donde corresponda (.H en headers, .C en source files, etc).

Cuando compiles te tiene que salir la ventanita clásica de compilación de CCS.. también, tienes que usar la sintaxis de CCS, esto solo es un cambio de IDE cuya única ventaja es poder usar las herramientas de programación/depuración de microchip cosa que en CCS no se puede... aunque tienen un plugins para usar el RealIce pero por lo menos a mi, jamas me funcionó.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Preguntas con CCS
« Respuesta #8 en: 19 de Septiembre de 2017, 13:51:00 »
Los pasos que hice fueron:

Baje el MPLAB X, lo instale ( es decir una instalacion limpia ).
Instale CCS.
Instale el Plugin de CCS en el MPLAB X, es lo primero que probe y segui las instrucciones que te da CCS,
Cree el proyecto de cero luego de haber instalado el plugin y reiniciado el MPLAB X, correctamente seleccione el compilador CCS, tambien observe y dentro de Installed, se encuentra el plugin donde dice que esta Activo.
Aunque instale el plugin, tuve que cargar a mano las direcciones de include de "Devices" y "Drivers", ya que las direcciones de Include estaban vacias y por lo tanto no encontraba los archivos a incluir como son los de stdint.h, PIC18F4550.h, etc.

Ahora cuando posea un pequeño tiempito pruebo con lo que dice tsk. Y edito este post si es que es el ultimo.
« Última modificación: 19 de Septiembre de 2017, 13:54:38 por KILLERJC »

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 899
Re:Preguntas con CCS
« Respuesta #9 en: 19 de Septiembre de 2017, 14:12:28 »
Pues te cuento que yo he usado el mplab con ccs y nunca tuve que hacer nada raro con archivos .bat.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Preguntas con CCS
« Respuesta #10 en: 20 de Septiembre de 2017, 10:06:07 »
Cree un nuevo proyecto desde 0, cree 2 archivos, un main y otro con una funcion. Hice lo que hice antes, 0 problemas.

Seguramente el otro archivo posea algun caracter raro entre medio que el compilador no le gusta pero el de XC8 no tiene problemas. Voy a tratar de reproducir el otro archivo pasandolo a mano para ver si el problema persiste. Hasta entonces creo que esto queda solucionado o parcialmente solucionado.

Existe alguna definicion que diga que se compila con CCS? Ejemplo __CCS__ ?
« Última modificación: 20 de Septiembre de 2017, 10:43:49 por KILLERJC »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 255
Re:Preguntas con CCS
« Respuesta #11 en: 20 de Septiembre de 2017, 11:20:52 »
De aquí

http://www.microchip.com/forums/FindPost/673444

Código: C
  1. #if (defined(__C32__) || defined(__C16__) || defined(__C8__)) // If it is Microchip ANSI C
  2. #ifndef __MICROCHIP_C__
  3. #define __MICROCHIP_C__                                    // Make shortcut for identifying the compiler elsewhere
  4. #endif
  5. #include <GenericTypeDefs.h>
  6. #elif (defined(__PCB__) || defined(__PCM__) || defined(__PCH__))   // If it is CCS C
  7. #ifndef __CCS_C__
  8. #define __CCS_C__                // Make shortcut for identifying the compiler elsewhere
  9. #endif
  10. #include <GenericTypeDefsForCCS.h>          // UINT8 etc for CCS like GenericTypeDefs.h does for ANSI
  11. #endif

Aunque esta desactualizado pero creo que las definiciones para el CCS C deben de ser las mismas.

Desconectado JuanjoPic

  • PIC12
  • **
  • Mensajes: 97
Re:Preguntas con CCS
« Respuesta #12 en: 20 de Septiembre de 2017, 16:17:40 »
Compañeros, una consulta básica 
¿ Por que utilizar el compilador CCS y no utilizar el XC8 que es nativo de Microchip?
(¿Sera que CSS permite compilar mayor cantidad de codigo y XC8 tiene un limite, o tiene otras razones?)

Saludos!!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Preguntas con CCS
« Respuesta #13 en: 20 de Septiembre de 2017, 16:32:58 »
Gracias tsk

En mi caso porque un compañero no conoce otra cosa ademas de CCS, aunque no me guste.
Sino prefiero XC8, aunque no me guste la falta de optimizacion en el modo Free, despues lo otro que programe es ARM y alli siempre con GCC

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 899
Re:Preguntas con CCS
« Respuesta #14 en: 20 de Septiembre de 2017, 19:37:36 »
Para que quede claro.... el compilador CCS solo va a compilar código escrito en la sintaxis de CCS, que lo uses en el ide de microchip no significa que va a compilar programas escritos en xc8...  tienes que escribir tal como lo harías en el IDE de CCS...


 

anything