Autor Tema: Existe el tipo bit en C18  (Leído 1582 veces)

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

Desconectado Arimai

  • PIC10
  • *
  • Mensajes: 6
Existe el tipo bit en C18
« en: 13 de Julio de 2006, 06:47:44 »
Hola a todos,
Resulta que he realizado un programa en C utilizando el compilador CCS en el que utilizaba el pic16f877A. Ahora quiero pasar el mismo programa a un pic18 ya que el pic16 se me quedaba pequeño en cuestion de RAM.

He estado leyendo en el foro y he llegado a la conclusion que lo mejor seria utilizar el compilador C18 de Microchip (puede que no sea una buena conclusion). Pero claro, ahora me surgen las dudas en la 'traduccion' despues de leerme el manual de C18 y empiezo a pensar que no es tan buena idea el cambio. Empiezo con mis dudas:

1) En CCs existe el tipo bit o int1 (entero de 1 bit). ¿Existe algun tipo parecido en C18? Es que no quiero desperdiciar 7 bits si solo quiero utilizar 1.

2) ¿Es posible renombrar los pines del PIC como en CCS, para una mayor legibilidad y facilidad en el manejo del software? En CCS seria por ejemplo:
                       
                           #define EEPROM_SDA   PIN_B3

Muchas gracias por adelantado. Un saludo. :-)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Existe el tipo bit en C18
« Respuesta #1 en: 13 de Julio de 2006, 08:18:49 »
He estado leyendo en el foro y he llegado a la conclusion que lo mejor seria utilizar el compilador C18 de Microchip (puede que no sea una buena conclusion). Pero claro, ahora me surgen las dudas en la 'traduccion' despues de leerme el manual de C18 y empiezo a pensar que no es tan buena idea el cambio. Empiezo con mis dudas:

Sobre opiniones...

Sin entrar en polémicas para mi el C18 es el mejor compilador C (sin conocer el IAR) que hay para los PICs.  Sï, tiene limitaciones si estas acostumbrado al CCS, tienes que hacer más cosas TU mismo pero es porque es casi 100% un ANSI C compiler. 


1) En CCs existe el tipo bit o int1 (entero de 1 bit). ¿Existe algun tipo parecido en C18? Es que no quiero desperdiciar 7 bits si solo quiero utilizar 1.

No, no existe como tipo de dato independiente.  Lo que se hace es hacer una union entre un dato de 8 bits (char) o 16bits (int) o de la cantidad de bits que necesites y defines ahi todos los bits que desees.

Ocupa el mínimo de memoria y es muy eficiente.

De hecho , de seguro CCS hace lo mismo internamente o tal vez ocupe un byte por bit declarado (habría que consultar con los que lo usan con frecuencia y hayan observado el código generado en detalle).

Al no existir el tipo de dato 'bit' en el core del microcontrolador, hay que hacer 'trucos' para solucionarlo.  La gente de CCS no ni nadie puede ignorar o superar estas limitaciones.

Te muestro una declaración del puerto B, extraída de las definiciones de la libreria .h del PIC18F4520

Código: C
  1. extern volatile near union {
  2.   struct {
  3.     unsigned RB0:1;
  4.     unsigned RB1:1;
  5.     unsigned RB2:1;
  6.     unsigned RB3:1;
  7.     unsigned RB4:1;
  8.     unsigned RB5:1;
  9.     unsigned RB6:1;
  10.     unsigned RB7:1;
  11.   };
  12.   struct {
  13.     unsigned INT0:1;
  14.     unsigned INT1:1;
  15.     unsigned INT2:1;
  16.     unsigned CCP2:1;
  17.     unsigned KBI0:1;
  18.     unsigned KBI1:1;
  19.     unsigned KBI2:1;
  20.     unsigned KBI3:1;
  21.   };
  22.   struct {
  23.     unsigned AN12:1;
  24.     unsigned AN10:1;
  25.     unsigned AN8:1;
  26.     unsigned AN9:1;
  27.     unsigned AN11:1;
  28.     unsigned PGM:1;
  29.     unsigned PGC:1;
  30.     unsigned PGD:1;
  31.   };
  32. } PORTBbits;



2) ¿Es posible renombrar los pines del PIC como en CCS, para una mayor legibilidad y facilidad en el manejo del software? En CCS seria por ejemplo:
                       
                           #define EEPROM_SDA   PIN_B3

Claro que si, la instrucción #define existe en cualquier compilador / ensamblador que haya tocado con mis manos.

Puedes hacer por ejemplo,

#define EEPROM_SDA PORTBbits.RB3

aunque en los pic18 si usarás un pin como salida te sugiero hacer

#define EEPROM_SDA LATBbits.LATB3


Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything