TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: black_flowers en 28 de Julio de 2007, 08:59:28

Título: duda con c18 y declaracion de variables.
Publicado por: black_flowers en 28 de Julio de 2007, 08:59:28
hola estoy tratando de entender el codigo en c18, para ello me baso en un programa que he bajado de la red y hay cosas que no entiendo bien. Por ejemplo:

en este codigo la linea subrayada se define como unsigned char rom *. ¿en qué se diferencia del resto de los unsigned char que hay en el bloque?

un saludo.

#pragma udata
BUFDESC USB_buffer_desc;
unsigned char USB_buffer_data[8];
unsigned char USB_error_flags;
unsigned char USB_curr_config;
unsigned char USB_device_status;
unsigned char USB_dev_req;
unsigned char USB_address_pending;
unsigned char rom *USB_desc_ptr;
unsigned char USB_bytes_left;
unsigned char USB_packet_length;
unsigned char USB_USTAT;
unsigned char USB_USWSTAT;
unsigned char COUNTER_L;
unsigned char COUNTER_H;
Título: Re: duda con c18 y declaracion de variables.
Publicado por: micro_cadaver en 28 de Julio de 2007, 15:57:32
el parámetro ROM implica que esa variable está ubicada en la memoria ROM o más conocida como memoria de programa.
el resto esta sobreentendido que se ubican en la RAM o memoria de datos volatil.
Título: Re: duda con c18 y declaracion de variables.
Publicado por: black_flowers en 28 de Julio de 2007, 19:32:10
entonces por qué se declara en la sección udata, y no en la sección romdata? (pongo un trozo de codigo en el que se definen las dos secciones):

#pragma udata
BUFDESC USB_buffer_desc;
unsigned char USB_buffer_data[8];
unsigned char USB_error_flags;
unsigned char USB_curr_config;
unsigned char USB_device_status;
unsigned char USB_dev_req;
unsigned char USB_address_pending;
unsigned char rom *USB_desc_ptr;
unsigned char USB_bytes_left;
unsigned char USB_packet_length;
unsigned char USB_USTAT;
unsigned char USB_USWSTAT;
unsigned char COUNTER_L;
unsigned char COUNTER_H;

#pragma romdata
rom const unsigned char Device[] = {
   0x12,   // bLength
   DEVICE,   // bDescriptorType
   0x10,   // bcdUSB (low byte)
   0x01,   // bcdUSB (high byte)
   0x00,   // bDeviceClass
   0x00,   // bDeviceSubClass
   0x00,   // bDeviceProtocol
   MAX_PACKET_SIZE,   // bMaxPacketSize
   0xD8,   // idVendor (low byte)
   0x04,   // idVendor (high byte)
   0x01,   // idProduct (low byte)
   0x00,   // idProduct (high byte)
   0x00,   // bcdDevice (low byte)
   0x00,   // bcdDevice (high byte)
   0x01,   // iManufacturer
   0x02,   // iProduct
   0x00,   // iSerialNumber (none)
   NUM_CONFIGURATIONS   // bNumConfigurations
};



UN SALUDO!   :-)
Título: Re: duda con c18 y declaracion de variables.
Publicado por: micro_cadaver en 29 de Julio de 2007, 13:13:42
segun lo que dice el manual la seccion udata es para registros o variables sin valores inicializados
ejm:
unsigned char todopic;

la seccion idata es para registros o variables con valores inicializados
ejm:
unsigned char foropic=16;

la seccion rom data no la he estudiado aun, pero supongo que son valores escritos en la ROM del pic osea en la memoria de programa.
Título: Re: duda con c18 y declaracion de variables.
Publicado por: maunix en 30 de Julio de 2007, 06:42:22
Es un puntero en RAM que apunta a una dirección de ROM.

Saludos
Título: Re: duda con c18 y declaracion de variables.
Publicado por: black_flowers en 03 de Agosto de 2007, 17:24:14
claro, eso es más lógico. Gracias Maunix, (bueno y gracias a to2 los demás tambien por supuesto)   :mrgreen: