TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RALF2 en 19 de Enero de 2009, 19:00:03
-
Que tal amigos!
Estoy iniciandome en el CCS :-/ y aunque me he leido muchos de los post que han colocado y los ejemplos me quedan aun ciertas dudas que espero que me las puedn aclarar :shock:
Asi comienso preguntando:
Como se crean las estructuras(structures)?.
Lei la ayuda pero nada no entendi ni pio :D
En la lbreria lcd.c definen una estructura asi
struct lcd_pin_map { // This structure is overlayed
BOOLEAN enable; // on to an I/O port to gain
BOOLEAN rs; // access to the LCD pins.
BOOLEAN rw; // The bits are allocated from
BOOLEAN unused; // low order up. ENABLE will
int data : 4; // be pin B0.
} lcd;
Bueno aqui me surgen un monton de dudas:
utilizan una variable tipo boolean que segun entiendo debe ser igual que short o int1?
luego tiene una int data : 4, que ni idea de lo que sera :(
y por ultimo tenemos lcd; que no se que hace alli :8}
Me podrian dar una ayudita explicando me que es cada cosa, por favor :mrgreen:
Ah y se me olvidaba esto que es lo que hace:
struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in
Ni idea :(
Saludos
-
sobre los boolean tienes razón
sobre int data:4, te hace un entero de 4 bits, que en este caso irán a parar a la parte alta del mismo registro donde se pone todo el struct, esto solo se puede hacer con compiladores como CCS, ya que no creo que esté en el estándar de C.
lcd; crea una variable del tipo lcd_pin_map. El concepto aquí es simple, lo que viene después de la palabra reservada struct es una definición de tipo que luego se puede utilizar para crear variables de ese tipo. Además de eso C te deja crear una variable del tipo que se acaba de definir inmediatamente después de su definición, en este caso, después de la llave.
Me podrian dar una ayudita explicando me que es cada cosa, por favor Mr. Green
Ah y se me olvidaba esto que es lo que hace:
struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in
Estas dos líneas crean dos constantes del tipo lcd_pin_map, LCD_WRITE y LCD_READ, y le asigna valores, así de simple. Estas constantes luego las puedes utilizar para trabajar con la LCD.
Saludos
Reinier
-
Es facil, una estructura es un conjunto de variables de distintos tipos. Suponete q tenes un elemento con muchos atributos, por ejemplo un auto, y los atributos son la marca, el color, y el kilometraje. Entonces definimos una estructura "auto" con sus atributos:
struct auto{char* marca, char* color, int km};Para hacerlo mas comodo visualmente le podemos dar la forma
struct auto{
char* marca,
char* color,
int km
};Entonces ahora podemos acceder a las variables de nuestra estructura de la siguiente manera:
auto.marca="ferrari";
Si te pones a estudiar en profundidad se puede volver un poquito complejo, porq podes definir tipos de estructuras y cosas asi q son muy utiles. Te recomiendo q leas algun libro de C, o busques un poco por internet.
saludos!
-
Gracias amigos por sus respuestan tan veloces :mrgreen:
No obstante me quedaron algunas dudillas :?
reiniertl:
struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in
Estas dos líneas crean dos constantes del tipo lcd_pin_map, LCD_WRITE y LCD_READ, y le asigna valores, así de simple. Estas constantes luego las puedes utilizar para trabajar con la LCD.
ESto me dejo frio :2]
Eso asigna un bloque de constantes a una estructura eso si que esta intersante.
Eso no lo se donde lo explicaran porque no lo he visto por ningun lado :shock:
La forma como asignan valores a la estructura esta muy interesante :mrgreen:
debo probarla
-
Estas dos líneas le dicen al compilador que debe poner en memoria de programas dos constantes, una llamada LCD_WRITE y otra LCD_READ, esto lo sabe el compilador por la directiva "const", ahora una constante debe estar "tipeada" para ello es que utilizas en la declaración en lugar de un tipo estándar un tipo definido por tí, en este caso el tipo es "lcd_pin_map" pero como este compilador es de C y no de C++, y el tipo no es de los que vienen por defecto con el compilador debes anteponer el struct, puesto que tu definición de "lcd_pin_map" es del tipo struct, y valga la redundancia.
Ahora una vez en ejecución, tu programa dispone de dos constantes del tipo "lcd_pin_map" que además están inicializadas con los valores que has puesto entre las llaves que crean a las constantes. Los valores en la llave no son del tipo entero, los 4 primeros son int1 o short que son valores de 1 bit para este compilador y el último es un entero de 4 bits. A diferencia de C estándar en que el dato menor es de 8 bits, el compilador de CCS puede manejar datos de un bit, 2 bits, 3 bits y ese tipo de cosas que se salen del estándar.
-
hola, pues lo del LCD ni yo lo entendí nunca me metí con ese, jeje, para usar estructuras yo hago lo que hace el amigo de acá: http://www.todopic.com.ar/foros/index.php?topic=5730.msg31714#msg31714 existen dos formas de crear las estructuras, yo uso la primera, me parece más elegante
espero sirva de ayuda amigo, un saludo!
-
struct total
{
int1 x;
int1 y;
int1 z;
int1 w;
};
struct total var1; //variable de tipo total
Mira vos, no conocia esta forma de crear estructuras. Es del C estandar? Yo siempre uso typedef, me es mas familiar y es mas facil de entender q estas creando un tipo.
saludos!
-
Si gera, esa forma es del C estándar
-
Muchas gracias reiniertl! La verdad q tantos años estudiando C y uno nunca termina de aprender jaja.
Saludos!
-
Muchas gracias amigos!
Muy interesantes todas sus respuestas y me han servido de mucho para ir entendiendo el tema respecto a las estructuras. :mrgreen:
Yo de C solo C que no C nada :D
Estoy empesando a estudiarlo y ya he aprendido mucho gracias a los ejemlos que han posteado en el foro :mrgreen:
Bueno seguire estudiando el ccs y practicando con el, cualquier duda estare de nuevo por aqui :mrgreen:
Saludos
-
La verdadera potencia de las estructuras la tenemos en las "uniones". Podéis ver un ejemplo de uso en:
http://www.todopic.com.ar/foros/index.php?topic=4867.msg36512#msg36512
Un saludo
-
Hola.
Se podria hacer algo como un int64 a partir de la union de dos int32? o estoy hablando pabadas ....