Autor Tema: Traduccion de XC8 a CCS  (Leído 2428 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Traduccion de XC8 a CCS
« en: 21 de Enero de 2016, 16:14:50 »
Hola, estoy intentando pasar un codigo que me mandaron de XC8 a CCS, ya que es para complementar un proyecto que ya tengo hecho en este lenguaje. Les paso las partes que no pude interpretar, y si alguien me pudiera ayudar se los agradeceria.

Código: [Seleccionar]
#define TFT_CS             LATDbits.LATD0           //supuestamente es la configuracion de los pines del pic
#define TRIS_CS            TRISDbits.TRISD0

#define TFT_RES            LATDbits.LATD1
#define TRIS_RES           TRISDbits.TRISD1

#define TFT_DC             LATDbits.LATD2
#define TRIS_DC            TRISDbits.TRISD2

typedef char                     char;
typedef unsigned char            char;
typedef const char               char;
typedef const unsigned char      char;
typedef int                      int;
typedef unsigned int             int;


despues hay un archivo que el main "llama" al principio, pero me parece que es solo la configuracion del pic. se los dejo abajo igual a ver si alguno sabe.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Traduccion de XC8 a CCS
« Respuesta #1 en: 21 de Enero de 2016, 19:57:09 »
no entiendo cual es el problema, eso es de C.. no tiene nada que ver el compilador.

Pero esto....

Código: C
  1. typedef char                     char;
  2. typedef unsigned char            char;
  3. typedef const char               char;
  4. typedef const unsigned char      char;
  5. typedef int                      int;
  6. typedef unsigned int             int;

me parece innecesario

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re:Traduccion de XC8 a CCS
« Respuesta #2 en: 21 de Enero de 2016, 21:30:31 »
Y lo de los define? Xq en el codigo esos pines envian informacion a un sensor y nunca lo habia visto asi expresado a un pin.
Y otra cosa, estoy dele intentar compilarlo pero me manda este error en un prototipo de funcion, y yo no veo ninguno. No se que flasha el CCS pero capaz me equivoque yo asi que aca esta la linea

int RGBConvert(int red, int green, int blue);

y el error

expecting a identifier, en las comas me lo marca
« Última modificación: 21 de Enero de 2016, 21:34:47 por marcoscab1166 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Traduccion de XC8 a CCS
« Respuesta #3 en: 21 de Enero de 2016, 23:16:15 »
Para eso hay que leer el datasheet. Ese es el problema numero 1.

Código: C
  1. #define TFT_CS             LATDbits.LATD0
  2. #define TFT_RES            LATDbits.LATD1
  3. #define TFT_DC             LATDbits.LATD2

LATDbits, quiere decir los bits del registro LATD. LATD0 es el bit0 y posee el mismo nombre que en el datasheet. Y corresponde al puerto D bit 0, o como en CCS PIN_D0

Código: C
  1. #define TRIS_CS            TRISDbits.TRISD0
  2. #define TRIS_RES           TRISDbits.TRISD1
  3. #define TRIS_DC            TRISDbits.TRISD2

TRISDbits, O lo que es lo mismo que los bits del registro TRISD, TRISD0 corresponde al bit0 y posee el mismo nombre que en el datasheet. Equivalente arriba

La costumbre de abstraer a las personas que tiene CCS de lo que realmente se hace puede ser tanto beneficiosa como peligrosa. Ejemplo..

Código: C
  1. set_tris_d(xxx);

Ahi estarias seteando todo el registro TRISD. Ademas tenes que tener en cuenta de poner #use fast_io, por que si no CCS se encarga de modificar los TRIS a su voluntad dependiendo si se lee o se escribe un puerto.
Desconozco si CCS dispone ya de todos los registros definidos. Pero siempre que los vi, la persona debe realizarlo. Creo que es mucho mas simple el modo de XC8.

Código: C
  1. TRISD = xxx;

Respecto al LATx y PORTx son los registros de los Ports del micro. Uno para escribir el latch de salida y el otro para ver el estado del pin. Esto en CCS vos no lo ves.. ya que siempre haces:

Código: C
  1. input(PIN_D0);

En el cual CCS se encarga por detras de leer el registro PORTx, Y si haces un output_high(PIN_D0); lo hace automaticamente por el PORTx o LATx dependiendo del PIC.

Otra diferencia que podras ver es en las interrupciones, uno agrega codigo para borrar la bandera por si solo ( CCS ) mientras que en XC8 es uno el encargado de hacerlo.

A lo que voy... XC8 es lo mas parecido al datasheet posible. Vas a manejarte igual que lo que dice el datasheet. No va a hacer nada por detras tuyo. Las desventajas son evidentes al crear un codigo "rapido". Ya que CCS tiene funciones que te facilitan enormemente la vida. como su #use RS232, entre otros como los de LCD, etc. Pero ojo, esto no quiere decir que no se pueda hacer en XC8, se puede hacer tambien. Pero bueno si no se noto vas a ver que soy anti CCS, por esos motivos, no me gusta que hagan cosas que no se como funcionan. Quiero el codigo de lo que hace al frente mio, es decir tener realmente el control y saber que se esta haciendo. Por otra parte veo todos estos errores en gente que comienza a programar, y el comun es que comienzan con CCS, Siendo que con XC8 simplemente lees el paso a paso del datasheet y configuraste cada modulo. Y aunque no lo creas tiene un paso a paso para todo modulo casi.

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

Volviendo al tema que me fui por otros lados. Te di el "equivalente", el #define deberia ser igual en CCS. Lo que hace el define.. es encontrar cualquier uso en el codigo y reemplazarlo ANTES de compilarlo. Para que sea un equivalente en CCS seria algo asi:


Código: C
  1. #define TFT_CS             PIN_D0
  2. #define TRIS_CS            set_tris_d(get_tris_d()& ~( 1 << 0 ));
  3.  
  4. #define TFT_RES            PIN_D1
  5. #define TRIS_RES           set_tris_d(get_tris_d()& ~( 1 << 1 ));
  6.  
  7. #define TFT_DC             PIN_D2
  8. #define TRIS_DC            set_tris_d(get_tris_d()& ~( 1 << 2 ));

Y de querer cambiar el puerto deberias cambiar la letra de cada funcion. Sino la otra es "mapear" los TRIS y usar bit_clear o bit_set. (Aclaro, no se si es correcto la linea pero es lo unico que se me ocurre ).

Lo mapeas con #byte, suponete que PORTA esta en la direccion 0x05. Entonces:

Código: C
  1. #BYTE PORTA = 0x05

Y ahora podes usar para activar RA2 :

Código: C
  1. bit_set(PORTA,2);

Ahora pensalo para el tris y seria algo parecido a lo que tenes en XC8

Citar
Y otra cosa, estoy dele intentar compilarlo pero me manda este error en un prototipo de funcion, y yo no veo ninguno. No se que flasha el CCS pero capaz me equivoque yo asi que aca esta la linea

int RGBConvert(int red, int green, int blue);

El prototipo no tiene ningun error, tal ves puede ser un problema en otra parte del programa. Suele suceder que da errores en otro lado y por ahi es una llave o algun punto y coma en otro lado, etc.
« Última modificación: 21 de Enero de 2016, 23:36:37 por KILLERJC »

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re:Traduccion de XC8 a CCS
« Respuesta #4 en: 22 de Enero de 2016, 10:58:42 »
Genial Killerjc, ya solucione lo de los puertos. El pic usa spi para comunicarse con esta configuracion

OpenSPI(SPI_FOSC_16, MODE_00, SMPEND);

lo del oscilador es facil pero el mode_00 y el smpend que es?
« Última modificación: 22 de Enero de 2016, 11:20:03 por marcoscab1166 »

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re:Traduccion de XC8 a CCS
« Respuesta #5 en: 22 de Enero de 2016, 12:10:55 »
Puedes encontrar esa informacion, aqui:
http://www.wikiteka.com/apuntes/gestion-del-bus-spi-desde-c/

Saludos
« Última modificación: 22 de Enero de 2016, 12:15:49 por RALF2 »

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re:Traduccion de XC8 a CCS
« Respuesta #6 en: 23 de Enero de 2016, 11:21:50 »
Hola KILLERJC, pase el asunto a este post para crear una llamada a la accion a todo el que quiera colaborar
http://www.todopic.com.ar/foros/index.php?topic=45792.msg382283#msg382283