TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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;
-
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.
-
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! :-)
-
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.
-
Es un puntero en RAM que apunta a una dirección de ROM.
Saludos
-
claro, eso es más lógico. Gracias Maunix, (bueno y gracias a to2 los demás tambien por supuesto) :mrgreen: