TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Mensaje iniciado por: Estorki en 26 de Febrero de 2012, 17:50:44
-
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:
// 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
-
En realidad acabo de detectar que el problema viene de un void.
Versión arduino:
// 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:
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?