Autor Tema: Proteus_ error_ Addres for TBLRD*+instruction (0x008) is not in code memory  (Leído 2474 veces)

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

Desconectado Estorki

  • PIC10
  • *
  • Mensajes: 10
Buenas, he estado escribiendo un código en CCS para un 18f452 basandome en un proyecto de Arduino. Total, que he terminado de pasarlo, compila pero en proteus 7.8 me salta el siguiente error:

[PIC18MEMORY] PC=0x07A2. Addres for TBLRD*+instruction (0x00008000) is not in code memory - zero returned
... Se multiplican sin cesar errores similares
Os adjunto la captura de pantalla


Sospecho ue puede haber algún problema con el siguiente código, pero no tengo ni idea:

Código: [Seleccionar]
// EEPROM size in bytes
#define EEPROM_SIZE         0x200  

// EEPROM Addresses for signature code and version of firmware
#define EE_ADDR_SIGNATURE_CODE1                      0x00 // BYTE
#define EE_ADDR_SIGNATURE_CODE2                      0x01 // BYTE
#define EE_ADDR_SIGNATURE_CODE3                      0x02 // BYTE
#define EE_ADDR_SIGNATURE_CODE4                      0x03 // BYTE
#define EE_ADDR_CODE_MAJOR_VERSION                   0x04 // BYTE
#define EE_ADDR_CODE_MINOR_VERSION                   0x05 // BYTE

// EEPROM Addresses for system config
#define EE_ADDR_system_useBacklight                  0x10 // BYTE
#define EE_ADDR_system_useSpeaker                    0x12 // BYTE
#define EE_ADDR_system_sensorTuningMode              0x14 // BYTE
#define EE_ADDR_system_cameraShutterLag              0x16 // WORD
#define EE_ADDR_system_cameraMirrorLockUpTimeout     0x18 // WORD
#define EE_ADDR_system_useFlash1                     0x1A // BYTE
#define EE_ADDR_system_useFlash2                     0x1C // BYTE
#define EE_ADDR_system_devicePortType                0x1E // BYTE

// EEPROM Addresses for interval mode config
#define EE_ADDR_intervalometerMode_autofocusTime     0x30 // WORD
#define EE_ADDR_intervalometerMode_preFlash1Time     0x32 // WORD
#define EE_ADDR_intervalometerMode_preFlash2Time     0x34 // WORD
#define EE_ADDR_intervalometerMode_preCloseTime      0x36 // WORD
#define EE_ADDR_intervalometerMode_intervalUnits     0x38 // BYTE
#define EE_ADDR_intervalometerMode_intervalValue     0x3A // WORD
#define EE_ADDR_intervalometerMode_numCycles         0x3C // WORD

// EEPROM Addresses for sensor trigger mode config
#define EE_ADDR_sensorTriggerMode_sensorType         0x50 // BYTE
#define EE_ADDR_sensorTriggerMode_sensorAudioLimit   0x52 // WORD
#define EE_ADDR_sensorTriggerMode_sensorBarrierLimit 0x54 // WORD
#define EE_ADDR_sensorTriggerMode_sensorLightLimit   0x56 // WORD
#define EE_ADDR_sensorTriggerMode_sensorShockLimit   0x58 // WORD
#define EE_ADDR_sensorTriggerMode_shootingMode       0x5A // BYTE
#define EE_ADDR_sensorTriggerMode_autofocusTime      0x5C // WORD
#define EE_ADDR_sensorTriggerMode_preFlash1Time      0x5E // WORD
#define EE_ADDR_sensorTriggerMode_preFlash2Time      0x60 // WORD
#define EE_ADDR_sensorTriggerMode_preCloseTime       0x62 // WORD
#define EE_ADDR_sensorTriggerMode_numCycles          0x64 // WORD
#define EE_ADDR_sensorTriggerMode_interCycleTime     0x66 // WORD
#define EE_ADDR_sensorTriggerMode_dropsCount         0x68 // WORD
#define EE_ADDR_sensorTriggerMode_dropsDuration      0x6A // WORD
#define EE_ADDR_sensorTriggerMode_dropsInterval      0x6C // WORD


Alguna sugerencia / idea me sería de grán ayuda, gracias
« Última modificación: 26 de Febrero de 2012, 17:57:05 por Estorki »

Desconectado Estorki

  • PIC10
  • *
  • Mensajes: 10
Re: Proteus_ error_ Addres for TBLRD*+instruction (0x008) is not in code memory
« Respuesta #1 en: 26 de Febrero de 2012, 20:11:51 »
En realidad acabo de detectar que el problema viene de un void.

Versión arduino:
Código: [Seleccionar]
// Print on lcd a progmem string
void display_printMessage(const prog_char* str) {
  char c;
  if (!str) return;
  while ((c = pgm_read_byte(str))) {
    lcd.print(c);
    str++;
  }
}


Versión que he hecho yo y me está fallando:
Código: [Seleccionar]
void display_printMessage(signed char* str) {            // Me llega una dirección de memoria de tamaño byte // Aldaketa: void display_printMessage(signed char* str) {
  char c;
  if (!str) return;
  while (read_program_memory(str,&c,1)) {                // Leo lo que hay en esa poición de memoria        //read_program_memory(str,&c,1)
    lcd_putc (c);                                        // Imprimo el byte en el display                   
    str++;                                               // avanzo una posición de memoria y luego imprimire el siguiente char
  }
}


Alguna sugerencia?


 

anything