• AVR Freaks

Hot!Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F)

Author
kj6666
New Member
  • Total Posts : 22
  • Reward points : 0
  • Joined: 2019/02/21 07:28:03
  • Location: Dallas, Texas
  • Status: offline
2019/10/22 08:34:38 (permalink)
0

Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F)

Target - 18F67K40
MPLAB X IDE v4.10
XC8 v2.0
 
I used MCC to generate the bootloader code. Added Bootloader generator and Memory functions in MCC and generated code. When I compile this code, I get the following error
 
:0: error: (596) segment "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F)
 
I updated the codeoffest in linker options(as shown in attached image)
 
Here is the bootloader code
 
//******************************************************************************
 
 
 
//
 
 
 
// Memory Map
 
 
 
// -----------------
 
 
 
// | 0x0000 | Reset vector
 
 
 
// | |
 
 
 
// | 0x0008 | High Priority Interrupt vector
 
 
 
// | |
 
 
 
// | 0x0018 | Low Priority Interrupt vector
 
 
 
// | |
 
 
 
// | Boot Block | (this program)
 
 
 
// | |
 
 
 
// | 0x500 | Re-mapped Reset Vector (Actual address
 
 
 
// | 0x508 | Re-mapped High Priority Interrupt Vector
 
 
 
// | 0x518 | Re-mapped Low Priority Interrupt Vector
 
 
 
// | | |
 
 
 
// | |
 
 
 
// | Code Space | User program space
 
 
 
// | |
 
 
 
// | | |
 
 
 
// | |
 
 
 
// | End of Flash |
 
 
 
// -----------------
 
 
 
//
 
 
 
//
 
 
 
//
 
 
 
//
 
 
 
// *****************************************************************************
 
 
 
 
 
 
 
#define READ_VERSION 0
 
 
 
#define READ_FLASH 1
 
 
 
#define WRITE_FLASH 2
 
 
 
#define ERASE_FLASH 3
 
 
 
#define READ_EE_DATA 4
 
 
 
#define WRITE_EE_DATA 5
 
 
 
#define READ_CONFIG 6
 
 
 
#define WRITE_CONFIG 7
 
 
 
#define CALC_CHECKSUM 8
 
 
 
#define RESET_DEVICE 9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
    #include <xc.h> // Standard include
 
 
 
    #include <stdint.h>
 
 
 
    #include <stdbool.h>
 
 
 
    #include "bootload.h"
 
 
 
    #include "mcc.h"
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
void Get_Buffer (void); // generic comms layer
 
 
 
uint8_t Get_Version_Data(void);
 
 
 
uint8_t Read_Flash(void);
 
 
 
uint8_t Write_Flash(void);
 
 
 
uint8_t Erase_Flash(void);
 
 
 
uint8_t Read_EE_Data(void);
 
 
 
uint8_t Write_EE_Data(void);
 
 
 
uint8_t Read_Config(void);
 
 
 
uint8_t Write_Config(void);
 
 
 
uint8_t Calc_Checksum(void);
 
 
 
void StartWrite(void);
 
 
 
void BOOTLOADER_Initialize(void);
 
 
 
void Run_Bootloader(void);
 
 
 
bool Bootload_Required (void);
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
#define MINOR_VERSION 0x00 // Version
 
 
 
#define MAJOR_VERSION 0x01
 
 
 
#define ERROR_ADDRESS_OUT_OF_RANGE 0xFE
 
 
 
#define ERROR_INVALID_COMMAND 0xFF
 
 
 
#define COMMAND_SUCCESS 0x01
 
 
 
 
 
 
 
// To be device independent, these are set by mcc in memory.h
 
 
 
#define LAST_WORD_MASK (WRITE_FLASH_BLOCKSIZE - 1)
 
 
 
#define NEW_RESET_VECTOR 0x500
 
 
 
#define NEW_INTERRUPT_VECTOR_HIGH 0x508
 
 
 
#define NEW_INTERRUPT_VECTOR_LOW 0x518
 
 
 
 
 
 
 
#define _str(x) #x
 
 
 
#define str(x) _str(x)
 
 
 
// *****************************************************************************
 
 
 
 
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
    uint16_t check_sum; // Checksum accumulator
 
 
 
    uint16_t counter; // General counter
 
 
 
    uint8_t rx_data;
 
 
 
    uint8_t tx_data;
 
 
 
    bool reset_pending = false;
 
 
 
// Force variables into Unbanked for 1-cycle accessibility
 
 
 
    uint8_t EE_Key_1 __at(0x0) = 0;
 
 
 
    uint8_t EE_Key_2 __at(0x1) = 0;
 
 
 
 
 
 
 
 
 
 
 
frame_t frame;
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// The bootloader code does not use any interrupts.
 
 
 
// However, the application code may use interrupts.
 
 
 
// The interrupt vector on a PIC18F is located at
 
 
 
// address 0x0008 (High) and 0x0018 (Low).
 
 
 
// The following function will be located
 
 
 
// at the interrupt vector and will contain a jump to
 
 
 
// the new application interrupt vectors
 
 
 
// *****************************************************************************
 
 
 
 
 
 
 
    asm ("psect intcode,global,reloc=2,class=CODE,delta=1");
 
 
 
    asm ("GOTO " str(NEW_INTERRUPT_VECTOR_HIGH));
 
 
 
 
 
 
 
    asm ("psect intcodelo,global,reloc=2,class=CODE,delta=1");
 
 
 
    asm ("GOTO " str(NEW_INTERRUPT_VECTOR_LOW));
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
void BOOTLOADER_Initialize ()
 
 
 
{
 
 
 
    if (Bootload_Required () == true)
 
 
 
    {
 
 
 
        Run_Bootloader (); // generic comms layer
 
 
 
    }
 
 
 
    STKPTR = 0x00;
 
 
 
    asm ("goto " str(NEW_RESET_VECTOR));
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
bool Bootload_Required ()
 
 
 
{
 
 
 
 
 
 
 
// ******************************************************************
 
 
 
// Check the reset vector for code to initiate bootloader
 
 
 
// ******************************************************************
 
 
 
                                    // This section reads the application start
 
 
 
                                    // vector to see if the location is blank
 
 
 
    TBLPTR = NEW_RESET_VECTOR; // (0xFF) or not. If blank, it runs the
 
 
 
                                    // bootloader. Otherwise, it assumes the
 
 
 
                                    // application is loaded and instead runs the
 
 
 
                                    // application.
 
 
 
    NVMCON1 = 0x80;
 
 
 
    asm("TBLRD *+");
 
 
 
    if (TABLAT == 0xFF)
 
 
 
    {
 
 
 
        return (true);
 
 
 
    }
 
 
 
 return (false);
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
uint8_t ProcessBootBuffer()
 
 
 
{
 
 
 
    uint8_t len;
 
 
 
    EE_Key_1 = frame.EE_key_1;
 
 
 
    EE_Key_2 = frame.EE_key_2;
 
 
 
 
 
 
 
// Test the command field and sub-command.
 
 
 
    switch (frame.command)
 
 
 
    {
 
 
 
    case READ_VERSION:
 
 
 
        len = Get_Version_Data();
 
 
 
        break;
 
 
 
    case WRITE_FLASH:
 
 
 
        len = Write_Flash();
 
 
 
        break;
 
 
 
    case ERASE_FLASH:
 
 
 
        len = Erase_Flash();
 
 
 
        break;
 
 
 
    case READ_CONFIG:
 
 
 
        len = Read_Config();
 
 
 
        break;
 
 
 
    case WRITE_CONFIG:
 
 
 
        len = Write_Config();
 
 
 
        break;
 
 
 
    case CALC_CHECKSUM:
 
 
 
        len = Calc_Checksum();
 
 
 
        break;
 
 
 
    case RESET_DEVICE:
 
 
 
        reset_pending = true;
 
 
 
        len = 9;
 
 
 
        break;
 
 
 
    default:
 
 
 
        frame.data[0] = ERROR_INVALID_COMMAND;
 
 
 
        len = 10;
 
 
 
    }
 
 
 
    return (len);
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// Commands
 
 
 
//
 
 
 
// Cmd Length---------------- Address---------------
 
 
 
// In: [<0x00> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00>]
 
 
 
// OUT: [<0x00> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00> <VERL><VERH>]
 
 
 
// *****************************************************************************
 
 
 
uint8_t Get_Version_Data()
 
 
 
{
 
 
 
    frame.data[0] = MINOR_VERSION;
 
 
 
    frame.data[1] = MAJOR_VERSION;
 
 
 
    frame.data[2] = 0; // Max packet size (256)
 
 
 
    frame.data[3] = 1;
 
 
 
    frame.data[4] = 0;
 
 
 
    frame.data[5] = 0;
 
 
 
    TBLPTRU = 0x3F;
 
 
 
    TBLPTRH = 0xFF; // Get device ID
 
 
 
    TBLPTRL = 0xFE;
 
 
 
    NVMCON1 = 0xC0; // Setup writes
 
 
 
    asm("TBLRD *+"); // EECON1bits.RD = 1;
 
 
 
    frame.data[6] = TABLAT;
 
 
 
    asm("TBLRD *+"); // EECON1bits.RD = 1;
 
 
 
    frame.data[7] = TABLAT;
 
 
 
    frame.data[8] = 0;
 
 
 
    frame.data[9] = 0;
 
 
 
 
 
 
 
    frame.data[10] = ERASE_FLASH_BLOCKSIZE;
 
 
 
    frame.data[11] = WRITE_FLASH_BLOCKSIZE;
 
 
 
 
 
 
 
    TBLPTRU = 0x30;
 
 
 
    TBLPTRH = 0x00;
 
 
 
    TBLPTRL = 0x00;
 
 
 
// NVMCON1 = 0xC0; // Setup writes Hasn't changed sincelast assignment.
 
 
 
    for (uint8_t i= 12; i < 16; i++)
 
 
 
    {
 
 
 
        asm("TBLRD *+");
 
 
 
        frame.data[i] = TABLAT;
 
 
 
    }
 
 
 
 
 
 
 
    return 25; // total length to send back 9 byte header + 16 byte payload
 
 
 
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// Write Flash
 
 
 
// Cmd Length----- Keys------ Address--------------- Data ---------
 
 
 
// In: [<0x02> <0x00><0x00><0x55><0xAA> <0x00><0x00><0x00><0x00> <Data>..<data>]
 
 
 
// OUT: [<0x02> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00> <0x01>]
 
 
 
// *****************************************************************************
 
 
 
uint8_t Write_Flash()
 
 
 
{
 
 
 
    TBLPTRL = frame.address_L;
 
 
 
    TBLPTRH = frame.address_H;
 
 
 
    TBLPTRU = frame.address_U;
 
 
 
 NVMCON1 = 0xA4; // Setup writes
 
 
 
    for (uint16_t i = 0; i < frame.data_length; i ++)
 
 
 
    {
 
 
 
        TABLAT = frame.data[i];
 
 
 
        if (TBLPTR >= END_FLASH)
 
 
 
        {
 
 
 
            frame.data[0] = ERROR_ADDRESS_OUT_OF_RANGE;
 
 
 
            return (10);
 
 
 
        }
 
 
 
        asm("TBLWT *+");
 
 
 
        if (((TBLPTRL & LAST_WORD_MASK) == LAST_WORD_MASK)
 
 
 
          || (i == frame.data_length - 1))
 
 
 
        {
 
 
 
            asm("TBLRD *-");
 
 
 
            StartWrite();
 
 
 
            asm("TBLRD *+");
 
 
 
        }
 
 
 
    }
 
 
 
    frame.data[0] = COMMAND_SUCCESS;
 
 
 
    EE_Key_1 = 0x00; // erase EE Keys
 
 
 
    EE_Key_2 = 0x00;
 
 
 
    return (10);
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// Erase Program Memory
 
 
 
// Erases data_length rows from program memory
 
 
 
// Cmd Length----- Keys------ Address--------------- Data ---------
 
 
 
// In: [<0x03> <0x00><0x00><0x55><0xAA> <0x00><0x00><0x00><0x00>]
 
 
 
// OUT: [<0x03> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00> <0x01>]
 
 
 
// *****************************************************************************
 
 
 
uint8_t Erase_Flash ()
 
 
 
{
 
 
 
    TBLPTRL = frame.address_L;
 
 
 
    TBLPTRH = frame.address_H;
 
 
 
    TBLPTRU = frame.address_U;
 
 
 
    for (uint16_t i=0; i < frame.data_length; i++)
 
 
 
    {
 
 
 
        if (TBLPTR >= END_FLASH)
 
 
 
        {
 
 
 
            frame.data[0] = ERROR_ADDRESS_OUT_OF_RANGE;
 
 
 
            return (10);
 
 
 
        }
 
 
 
        NVMCON1 = 0x94; // Setup writes
 
 
 
        StartWrite();
 
 
 
        TBLPTR += ERASE_FLASH_BLOCKSIZE;
 
 
 
    }
 
 
 
    frame.data[0] = COMMAND_SUCCESS;
 
 
 
    frame.EE_key_1 = 0x00; // erase EE Keys
 
 
 
    frame.EE_key_2 = 0x00;
 
 
 
    return (10);
 
 
 
}
 
 
 
 
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// Read Config Words
 
 
 
// Cmd Length----- Address--------------- Data ---------
 
 
 
// In: [<0x06> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00>]
 
 
 
// OUT: [<0x06> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00> <Data>..<data>]
 
 
 
// *****************************************************************************
 
 
 
uint8_t Read_Config ()
 
 
 
{
 
 
 
    TBLPTRL = frame.address_L;
 
 
 
    TBLPTRH = frame.address_H;
 
 
 
    TBLPTRU = frame.address_U;
 
 
 
 NVMCON1 = 0xC0;
 
 
 
    for (uint8_t i = 0; i < frame.data_length; i++)
 
 
 
    {
 
 
 
        asm("TBLRD *+");
 
 
 
        frame.data[i] = TABLAT;
 
 
 
    }
 
 
 
    return (9 + frame.data_length); // 9 byte header + 4 bytes config words
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// Write Config Words
 
 
 
// Cmd Length----- Address--------------- Data ---------
 
 
 
// In: [<0x07> <0x00><0x00><0x55><0xAA> <0x00><0x00><0x00><0x00> <Data>..<data>]
 
 
 
// OUT: [<0x07> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00>]
 
 
 
// *****************************************************************************
 
 
 
uint8_t Write_Config ()
 
 
 
{
 
 
 
    TBLPTRL = frame.address_L;
 
 
 
    TBLPTRH = frame.address_H;
 
 
 
    TBLPTRU = frame.address_U;
 
 
 
    if (TBLPTR > 0x20000F)
 
 
 
        NVMCON1 = 0xC4; // Setup writes
 
 
 
    else
 
 
 
        NVMCON1 = 0x84;
 
 
 
    for (uint8_t i= 0; i < frame.data_length; i ++)
 
 
 
    {
 
 
 
        TABLAT = frame.data[i];
 
 
 
        asm("TBLWT *");
 
 
 
        StartWrite();
 
 
 
        ++ TBLPTRL;
 
 
 
    }
 
 
 
    frame.data[0] = COMMAND_SUCCESS;
 
 
 
    EE_Key_1 = 0x00; // erase EE Keys
 
 
 
    EE_Key_2 = 0x00;
 
 
 
    return (10);
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************************
 
 
 
// Calculate Checksum
 
 
 
// In: [<0x08><DataLengthL><DataLengthH> <unused><unused> <ADDRL><ADDRH><ADDRU><unused>...]
 
 
 
// OUT: [9 byte header + ChecksumL + ChecksumH]
 
 
 
// Cmd Length----- Address--------------- Data ---------
 
 
 
// In: [<0x08> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00>]
 
 
 
// OUT: [<0x08> <0x00><0x00><0x00><0x00> <0x00><0x00><0x00><0x00> <CheckSumL><CheckSumH>]
 
 
 
// *****************************************************************************
 
 
 
uint8_t Calc_Checksum()
 
 
 
{
 
 
 
#if END_FLASH > 0xFFFF
 
 
 
    uint24_t i;
 
 
 
    uint24_t length;
 
 
 
#else
 
 
 
    uint16_t i;
 
 
 
    uint16_t length;
 
 
 
#endif
 
 
 
 
 
 
 
    TBLPTRL = frame.address_L;
 
 
 
    TBLPTRH = frame.address_H;
 
 
 
    TBLPTRU = frame.address_U;
 
 
 
    NVMCON1 = 0x80;
 
 
 
    check_sum = 0;
 
 
 
    length = frame.data_length;
 
 
 
#if END_FLASH > 0xFFFF
 
 
 
    length += ((uint24_t) frame.EE_key_1) << 16;
 
 
 
#endif
 
 
 
    for (i = 0; i < length; i += 2)
 
 
 
    {
 
 
 
        asm("TBLRD *+");
 
 
 
        check_sum += (uint16_t)TABLAT;
 
 
 
        asm("TBLRD *+");
 
 
 
        check_sum += (uint16_t)TABLAT << 8;
 
 
 
     }
 
 
 
     frame.data[0] = (uint8_t) (check_sum & 0x00FF);
 
 
 
     frame.data[1] = (uint8_t)((check_sum & 0xFF00) >> 8);
 
 
 
     return (11);
 
 
 
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// Unlock and start the write or erase sequence.
 
 
 
// *****************************************************************************
 
 
 
void StartWrite()
 
 
 
{
 
 
 
    NVMCON2 = EE_Key_1;
 
 
 
    NVMCON2 = EE_Key_2;
 
 
 
    NVMCON1bits.WR = 1; // Start the write
 
 
 
    NOP();
 
 
 
    NOP();
 
 
 
    return;
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// Check to see if a device reset had been requested. We can't just reset when
 
 
 
// the reset command is issued. Instead we have to wait until the acknowledgement
 
 
 
// is finished sending back to the host. Then we reset the device.
 
 
 
// *****************************************************************************
 
 
 
void Check_Device_Reset ()
 
 
 
{
 
 
 
    if (reset_pending == true)
 
 
 
    {
 
 
 
        RESET();
 
 
 
    }
 
 
 
    return;
 
 
 
}
 
 
 
 
 
 
 
// *****************************************************************************
 
 
 
// *****************************************************************************
 
 
 

 
Please make suggestions. TIA
 
post edited by kj6666 - 2019/10/22 08:49:26

Attached Image(s)

#1

18 Replies Related Threads

    crosland
    Super Member
    • Total Posts : 2009
    • Reward points : 0
    • Joined: 2005/05/10 10:55:05
    • Location: Warks, UK
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/22 09:00:52 (permalink)
    +2 (2)
    This is clearly a problem in your application code, so I don't know why you included a listing of your bootloader.
     
    Without seeing the application, I would guess that the code you placed at the relocated high priority vector is too long and overlaps the lo priority vector. If so, you need to jump from the hi vector to somewhere else.
    #2
    mbrowning
    USNA79
    • Total Posts : 1789
    • Reward points : 0
    • Joined: 2005/03/16 14:32:56
    • Location: Melbourne, FL
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/22 09:34:32 (permalink)
    +2 (2)
    1 - Why are you posting in the C18 forum when you are using XC8? And it's more of an MCC question anyway.
     
    2 - The bootloader generator generates a low flash bootloader. By default the application reset vector is 0x500 (application codeoffset 0x500), but the bootloader codeoffset should be 0.
     
    3 - I don't think the bootloader will fit in 0x500 bytes. You might need to double it. I use 0x800 on K42
    You'll need to set the ROM range to constrain the bootloader to within 0-7ff (assuming app at 0x800)
     
    4 - Has the bootloader / bootloader app been updated to handle 128K flash devices? I think the protocol doesn't support more than 64K
    #3
    kj6666
    New Member
    • Total Posts : 22
    • Reward points : 0
    • Joined: 2019/02/21 07:28:03
    • Location: Dallas, Texas
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/23 07:08:30 (permalink)
    0
    mbrowning
     

    1 - Why are you posting in the C18 forum when you are using XC8? And it's more of an MCC question anyway.
    Will do in future. Sorry about that.
     
    2 - The bootloader generator generates a low flash bootloader. By default the application reset vector is 0x500 (application codeoffset 0x500), but the bootloader codeoffset should be 0.
     
    I tried  application reset vector of 0x900, but I get the same error code :0: error: (596) segment "intcode" (8-FB) overlaps segment "intcodelo" (18-1F).
    Can you please tell me how to define the bootloader codeoffset of 0? is that the Codeoffset in XC18 linker options. I did set that to 0
     
     
     
     
    3 - I don't think the bootloader will fit in 0x500 bytes. You might need to double it. I use 0x800 on K42
    You'll need to set the ROM range to constrain the bootloader to within 0-7ff (assuming app at 0x800)
     
    I did try to start at 0x900(as defined below). But I get the same error code(with 8-FB and 18-1f segment) 
    :0: error: (596) segment "intcode" (8-FB) overlaps segment "intcodelo" (18-1F).
     
     
    #define  NEW_RESET_VECTOR            0x900
    #define  NEW_INTERRUPT_VECTOR_HIGH   0x908
    #define  NEW_INTERRUPT_VECTOR_LOW    0x918
     
    4 - Has the bootloader / bootloader app been updated to handle 128K flash devices? I think the protocol doesn't support more than 64K
     
    MCC supports bootloader for 18F67K40 so I m assuming that bootloader is supported for this 128K flash device




    post edited by kj6666 - 2019/10/23 07:27:58
    #4
    kj6666
    New Member
    • Total Posts : 22
    • Reward points : 0
    • Joined: 2019/02/21 07:28:03
    • Location: Dallas, Texas
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/23 07:26:02 (permalink)
    0
    crosland
    This is clearly a problem in your application code, so I don't know why you included a listing of your bootloader.
     
    Without seeing the application, I would guess that the code you placed at the relocated high priority vector is too long and overlaps the lo priority vector. If so, you need to jump from the hi vector to somewhere else.



    All the memory mapping is in the bootloader code. Any changes to starting address is not making a difference to the compile error. Error still points to 8-FB and 18-1F, with #define below.
     
    :0: error: (596) segment "intcode" (8-FB) overlaps segment "intcodelo" (18-1F)
     
    #define  NEW_RESET_VECTOR            0x900
    #define  NEW_INTERRUPT_VECTOR_HIGH   0x908
    #define  NEW_INTERRUPT_VECTOR_LOW    0x918
     
     
    #5
    kj6666
    New Member
    • Total Posts : 22
    • Reward points : 0
    • Joined: 2019/02/21 07:28:03
    • Location: Dallas, Texas
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/23 07:54:38 (permalink)
    0
    Update
    So the error depends on codeoffset in XC18 linker.
    If I define x400 in the linker, I get the following error
    :0: error: (596) segment "intcode" (408-4FB) overlaps segment "intcodelo" (418-41F)
     
    Any changes in the memory map makes no difference to the error
    #define  NEW_RESET_VECTOR            0x300
    #define  NEW_INTERRUPT_VECTOR_HIGH   0x308
    #define  NEW_INTERRUPT_VECTOR_LOW    0x318
     
     
    How do I change the mapping so that they don't overlap?
    The relevant code in the MCC generated code is here
        asm ("psect  intcode,global,reloc=2,class=CODE,delta=1");
        asm ("GOTO " str(NEW_INTERRUPT_VECTOR_HIGH));
        asm ("psect  intcodelo,global,reloc=2,class=CODE,delta=1");
        asm ("GOTO " str(NEW_INTERRUPT_VECTOR_LOW));
     
     
     
    #6
    mbrowning
    USNA79
    • Total Posts : 1789
    • Reward points : 0
    • Joined: 2005/03/16 14:32:56
    • Location: Melbourne, FL
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/23 08:48:42 (permalink)
    +2 (2)
    Perhaps a newer version of tools? MPLABX 4.10 is pretty old now, and maybe you don't have the latest version of MCC.
     
    The codeoffset for the bootloader must be 0 (or blank). The bootloader window in MCC should have the application reset vector set to the same value as the codeoffset in the application. The bootloader ROM range should be restricted to less than the application reset vector. I suggest 0x800 for the application offset, and 0-7ff for the ROM range. Obviously the application offset needs to be high enough to allow space for the bootloader.
     
    I think you are violating these settings.
     
    I don't use MCC, although I did use MCC and bootloader generator a couple years ago but I had to do a lot of debugging and rework to get it to work on a K42 PIC
     
     
    #7
    kj6666
    New Member
    • Total Posts : 22
    • Reward points : 0
    • Joined: 2019/02/21 07:28:03
    • Location: Dallas, Texas
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/25 14:36:03 (permalink)
    0
    I updated all of them to the latest
    IDe to v5.20
    XC8 to v2.05
    MCC to v.35.1
     
    Started a new "Hello World" project with this target(18F67K40)
     
    However, after compiling this, I get the same error code
    :0:: error: (596) segment "intcode" (508-B83) overlaps segment "intcodelo" (518-51F)
     
    What is fundamentally wrong to get this error message as there is basically no application code anymore. I' cant change the target(18F67K40)
    #8
    ric
    Super Member
    • Total Posts : 27954
    • Reward points : 0
    • Joined: 2003/11/07 12:41:26
    • Location: Australia, Melbourne
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/25 14:48:07 (permalink)
    +1 (1)
    Latest?
    XC8 v2.10 has been out since July.
     

    I also post at: PicForum
    Links to useful PIC information: http://picforum.ric323.co...opic.php?f=59&t=15
    NEW USERS: Posting images, links and code - workaround for restrictions.
    To get a useful answer, always state which PIC you are using!
    #9
    crosland
    Super Member
    • Total Posts : 2009
    • Reward points : 0
    • Joined: 2005/05/10 10:55:05
    • Location: Warks, UK
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/27 02:08:51 (permalink)
    0
    I have just hit the same problem in XC8 2.05.
     
    The compiler/linker does not honour the placement of absolute located objects, nor reserved memory just above the relocated vectors.
     
    So, in a 25k40, with code offset 800 and ROM memory range '800-81f,840-7800'

    const uint8_t params[8] __at(0x820) = {0,1,2,3,4,5,6,7};
     
    void __interrupt (high_priority) high_isr(void) {
        isr_high();
    }
     
    void __interrupt (low_priority) low_isr(void) {
    }

     
    The compiler/linker will place a few instruction for the high ISR at 0x808 and then a GOTO to the main body of the ISR. It tries to place all of the low ISR at 0x818, which overlaps the absolute object at 0x820 (which I require for legacy reasons).
     
    If I remove the low_priority ISR declaration (I don't need it at the moment) then more of the high ISR is placed at 0x808 and again conflicts with the absolute object.
     
    I will try 2.10.
    #10
    crosland
    Super Member
    • Total Posts : 2009
    • Reward points : 0
    • Joined: 2005/05/10 10:55:05
    • Location: Warks, UK
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/27 03:26:09 (permalink)
    0
    Nope, problem still there in XC8 2.10
     
    :0:: error: (596) segment "_params_const" (820-827) overlaps segment "intcodelo" (818-829)
    (908) exit status = 1
     
    How do I get the compiler to realise that it needs to place a GOTO in the ISR code. Well, it knows this already in some circumstances.
     
    [Edit]
    I also tried an alternative form in the memory model ROM Ranges: -0-7ff,-820-83f
    post edited by crosland - 2019/10/27 03:29:16
    #11
    crosland
    Super Member
    • Total Posts : 2009
    • Reward points : 0
    • Joined: 2005/05/10 10:55:05
    • Location: Warks, UK
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/27 03:38:27 (permalink)
    0
    I've tried to copy/paste this to the XC8 forum but seemingly do not have permission to post there.
    #12
    mad_c
    Super Member
    • Total Posts : 1247
    • Reward points : 0
    • Joined: 2010/12/12 17:48:27
    • Location: Brisbane, Australia
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/27 13:40:07 (permalink)
    +2 (2)
    kj6666
    If I define x400 in the linker, I get the following error
    :0: error: (596) segment "intcode" (408-4FB) overlaps segment "intcodelo" (418-41F)

    The intcode psect has to be short so that it does not overlap with the intcodelo psect, should it be defined. The code generator is aware of this restriction and ensures this is met when compiling C interrupt routines. If assembly source is placed in that psect, then whoever is writing that assembly has to follow the same rules.
     
    Look in the assembly list file and see what is placed into intcode. Clearly there is more than just one GOTO. Note that there might be more than one contribution to the psect in different parts of the list file.
     
    The assembler optimizers can merge psects, too. If it were to merge something with intcode, that would cause such an issue, but I am quite certain that the assembler will never consider the intcode psect for such an optimization.
     
    Jeff.
     
    #13
    1and0
    Access is Denied
    • Total Posts : 10985
    • Reward points : 0
    • Joined: 2007/05/06 12:03:20
    • Location: Harry's Gray Matter
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/28 00:14:02 (permalink)
    +1 (1)
    crosland
    If I remove the low_priority ISR declaration (I don't need it at the moment) then more of the high ISR is placed at 0x808 and again conflicts with the absolute object.

    If you don't need a low-priority interrupt function, then try replacing it with a dummy function:
    void dummy(void) __at(0x818)
    {
    }

    That should force a branch in the high ISR over that absolute object.
     
    Edit: Now thinking about it, it might not work but give it a try anyway. Nothing to lose. ;)
     
    post edited by 1and0 - 2019/10/28 00:28:35
    #14
    crosland
    Super Member
    • Total Posts : 2009
    • Reward points : 0
    • Joined: 2005/05/10 10:55:05
    • Location: Warks, UK
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/28 02:07:08 (permalink)
    0
    Thanks all.
     
    I may need the low ISR eventually, but I will experiment more.
    #15
    crosland
    Super Member
    • Total Posts : 2009
    • Reward points : 0
    • Joined: 2005/05/10 10:55:05
    • Location: Warks, UK
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/28 02:21:49 (permalink)
    0
    Thinking laterally, I realised I have some flexibility and moved the codeoffset above the fixed object.
     
    To the OP. Apologies for hijacking the thread. It's a slightly different problem.
     
    Re-reading your posts, it's not clear, you are setting codeoffset on the application project, not the bootloader project, right?
     
     
     
    #16
    kj6666
    New Member
    • Total Posts : 22
    • Reward points : 0
    • Joined: 2019/02/21 07:28:03
    • Location: Dallas, Texas
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/28 13:15:32 (permalink)
    0
    crosland
    Thinking laterally, I realised I have some flexibility and moved the codeoffset above the fixed object.
     
    To the OP. Apologies for hijacking the thread. It's a slightly different problem.
     
    Re-reading your posts, it's not clear, you are setting codeoffset on the application project, not the bootloader project, right?



    NP. Hopefully we can tag team to resolve this similar problem.
     
    Yes the codeoffset in Linker is for the Interrupt manager of application code. Basically, I am trying to change it hoping that the error of Intcode overlapping intcodelo is resolved.
     
    I tried to compile with Intcode only(see code snippet below) . This removed the compile error.
     
        asm ("psect  intcode,global,reloc=1,class=CODE,delta=1");
        asm ("GOTO " str(NEW_INTERRUPT_VECTOR_HIGH));
     
       // asm ("psect  intcodelo,global,reloc=2,class=CODE,delta=1");
       // asm ("GOTO " str(NEW_INTERRUPT_VECTOR_LOW));
     
    With this change, the autobaud of the bootloader works correctly and advances with 0x55 received on the UART. However, after this none of the UART serial bytes are processed, implying that none of the interrupts are working. I confirmed that the application interrupts are not working, by commenting out the code for bootloader_initialize. The application code runs but stops at the first instance of timer0 interrupt(which is supposed to fire and be serviced every 100ms)
     
     
    post edited by kj6666 - 2019/10/28 13:18:36
    #17
    kj6666
    New Member
    • Total Posts : 22
    • Reward points : 0
    • Joined: 2019/02/21 07:28:03
    • Location: Dallas, Texas
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/28 13:31:15 (permalink)
    0
    mad_c
    kj6666
    If I define x400 in the linker, I get the following error
    :0: error: (596) segment "intcode" (408-4FB) overlaps segment "intcodelo" (418-41F)

    The intcode psect has to be short so that it does not overlap with the intcodelo psect, should it be defined. The code generator is aware of this restriction and ensures this is met when compiling C interrupt routines. If assembly source is placed in that psect, then whoever is writing that assembly has to follow the same rules.
     
    Look in the assembly list file and see what is placed into intcode. Clearly there is more than just one GOTO. Note that there might be more than one contribution to the psect in different parts of the list file.
     
    The assembler optimizers can merge psects, too. If it were to merge something with intcode, that would cause such an issue, but I am quite certain that the assembler will never consider the intcode psect for such an optimization.
     
    Jeff.
     


     
    I had to compile to see this list file. The only was I could get the code to compile was by commenting out Intcodelo section
    I'm using a lot of peripherals in my application, thereby a lot of interrupts. Even though I'm able to compile now, I still have interrupt issues(please see my previous post)
     
     Sharing the stack below
     
       207 ;; *************** function _INTERRUPT_InterruptManager *****************
       208 ;; Defined at:
       209 ;; line 58 in file "mcc_generated_files/interrupt_manager.c"
       210 ;; Parameters: Size Location Type
       211 ;; None
       212 ;; Auto vars: Size Location Type
       213 ;; None
       214 ;; Return value: Size Location Type
       215 ;; 1 wreg void
       216 ;; Registers used:
       217 ;; wreg, fsr2l, fsr2h, status,2, status,0, pclath, tosl, cstack
       218 ;; Tracked objects:
       219 ;; On entry : 0/0
       220 ;; On exit : 0/0
       221 ;; Unchanged: 0/0
       222 ;; Data sizes: COMRAM BANK0 BANK1 BANK2 BANK3 BANK4 BANK5 BANK6 BANK7 BANK8 BANK9 BANK10 BANK1
          +1 BANK12 BANK13
       223 ;; Params: 0 0 0 0 0 0 0 0 0 0 0 0
          +0 0 0
       224 ;; Locals: 0 0 0 0 0 0 0 0 0 0 0 0
          +0 0 0
       225 ;; Temps: 4 0 0 0 0 0 0 0 0 0 0 0
          +0 0 0
       226 ;; Totals: 4 0 0 0 0 0 0 0 0 0 0 0
          +0 0 0
       227 ;;Total ram usage: 4 bytes
       228 ;; Hardware stack levels used: 1
       229 ;; Hardware stack levels required when called: 2
       230 ;; This function calls:
       231 ;; Absolute function
       232 ;; _EUSART1_Receive_ISR
       233 ;; _EUSART1_Transmit_ISR
       234 ;; _EUSART2_Receive_ISR
       235 ;; _EUSART2_Transmit_ISR
       236 ;; _EUSART3_Receive_ISR
       237 ;; _TMR0_ISR
       238 ;; This function is called by:
       239 ;; Interrupt level 2
       240 ;; This function uses a non-reentrant model
       241 ;;
       242
       243 psect intcode
       244 000408 EF84 F001 goto 776 ;#
       245 00040C __pintcode:
       246 opt callstack 0
       247 00040C _INTERRUPT_InterruptManager:
       248 opt callstack 22
       249
       250 ;incstack = 0
       251 00040C 8256 bsf btemp,1,c ;set compiler interrupt flag (level 2)
       252 00040E CFFA F008 movff pclath,??_INTERRUPT_InterruptManager
       253 000412 CFFB F009 movff pclatu,??_INTERRUPT_InterruptManager+1
       254 000416 CFD9 F00A movff fsr2l,??_INTERRUPT_InterruptManager+2
       255 00041A CFDA F00B movff fsr2h,??_INTERRUPT_InterruptManager+3
       256
       257 ;interrupt_manager.c: 61: if(PIE0bits.TMR0IE == 1 && PIR0bits.TMR0IF == 1)
       258 00041E 010E movlb 14 ; () banked
       259 000420 BB29 btfsc 41,5,b ;volatile
       260
       261 ; BSR set to: 14
       262 000422 AB33 btfss 51,5,b ;volatile
       263 000424 D003 goto i2l36
       264
       265 ; BSR set to: 14
       266 ;interrupt_manager.c: 62: {;interrupt_manager.c: 63: TMR0_ISR();
       267 000426 EC69 F0E3 call _TMR0_ISR ;wreg free
       268
       269 ;interrupt_manager.c: 64: }
       270 00042A D056 goto i2u1043_49
       271 00042C i2l36:
       272
       273 ; BSR set to: 14
       274 ;interrupt_manager.c: 65: else if(INTCONbits.PEIE == 1)
       275 00042C ACF2 btfss 4082,6,c ;volatile
       276 00042E D054 goto i2u1043_49
       277
       278 ; BSR set to: 14
       279 ;interrupt_manager.c: 66: {;interrupt_manager.c: 67: if(PIE3bits.BCL1IE == 1 && PIR3bits
          + .BCL1IF == 1)
       280 000430 A32C btfss 44,1,b ;volatile
       281 000432 D002 goto i2l39
       282
       283 ; BSR set to: 14
       284 000434 B336 btfsc 54,1,b ;volatile
       285 000436 D050 goto i2u1043_49
       286 000438 i2l39:
       287
       288 ; BSR set to: 14
       289 ;interrupt_manager.c: 71: else if(PIE3bits.SSP1IE == 1 && PIR3bits.SSP1IF == 1)
       290 000438 A12C btfss 44,0,b ;volatile
       291 00043A D002 goto i2l41
       292
       293 ; BSR set to: 14
       294 00043C B136 btfsc 54,0,b ;volatile
       295 00043E D04C goto i2u1043_49
       296 000440 i2l41:
       297
       298 ; BSR set to: 14
       299 ;interrupt_manager.c: 75: else if(PIE3bits.TX1IE == 1 && PIR3bits.TX1IF == 1)
       300 000440 B92C btfsc 44,4,b ;volatile
       301
       302 ; BSR set to: 14
       303 000442 A936 btfss 54,4,b ;volatile
       304 000444 D00B goto i2l43
       305
       306 ; BSR set to: 14
       307 ;interrupt_manager.c: 76: {;interrupt_manager.c: 77: EUSART1_TxDefaultInterruptHandler()
          + ;
       308 000446 D801 call i2u1029_48
       309 000448 D047 goto i2u1043_49
       310 00044A i2u1029_48:
       311 00044A 0005 push
       312 00044C 6EFA movwf pclath,c
       313 00044E 0105 movlb 5 ; () banked
       314 000450 51EF movf _EUSART1_TxDefaultInterruptHandler& (0+255),w,b
       315 000452 6EFD movwf tosl,c
       316 000454 51F0 movf (_EUSART1_TxDefaultInterruptHandler+1)& (0+255),w,b
       317 000456 6EFE movwf tosh,c
       318 000458 51F1 movf (_EUSART1_TxDefaultInterruptHandler+2)& (0+255),w,b
       319 00045A D03B goto L4
       320 00045C i2l43:
       321
       322 ; BSR set to: 14
       323 ;interrupt_manager.c: 79: else if(PIE3bits.RC1IE == 1 && PIR3bits.RC1IF == 1)
       324 00045C BB2C btfsc 44,5,b ;volatile
       325
       326 ; BSR set to: 14
       327 00045E AB36 btfss 54,5,b ;volatile
       328 000460 D00B goto i2l45
       329
       330 ; BSR set to: 14
       331 ;interrupt_manager.c: 80: {;interrupt_manager.c: 81: EUSART1_RxDefaultInterruptHandler()
          + ;
       332 000462 D801 call i2u1032_48
       333 000464 D039 goto i2u1043_49
       334 000466 i2u1032_48:
       335 000466 0005 push
       336 000468 6EFA movwf pclath,c
       337 00046A 0105 movlb 5 ; () banked
       338 00046C 51EC movf _EUSART1_RxDefaultInterruptHandler& (0+255),w,b
       339 00046E 6EFD movwf tosl,c
       340 000470 51ED movf (_EUSART1_RxDefaultInterruptHandler+1)& (0+255),w,b
       341 000472 6EFE movwf tosh,c
       342 000474 51EE movf (_EUSART1_RxDefaultInterruptHandler+2)& (0+255),w,b
       343 000476 D02D goto L4
       344 000478 i2l45:
       345
       346 ; BSR set to: 14
       347 ;interrupt_manager.c: 83: else if(PIE3bits.TX2IE == 1 && PIR3bits.TX2IF == 1)
       348 000478 BD2C btfsc 44,6,b ;volatile
       349
       350 ; BSR set to: 14
       351 00047A AD36 btfss 54,6,b ;volatile
       352 00047C D00B goto i2l47
       353
       354 ; BSR set to: 14
       355 ;interrupt_manager.c: 84: {;interrupt_manager.c: 85: EUSART2_TxDefaultInterruptHandler()
          + ;
       356 00047E D801 call i2u1035_48
       357 000480 D02B goto i2u1043_49
       358 000482 i2u1035_48:
       359 000482 0005 push
       360 000484 6EFA movwf pclath,c
       361 000486 0105 movlb 5 ; () banked
       362 000488 51F5 movf _EUSART2_TxDefaultInterruptHandler& (0+255),w,b
       363 00048A 6EFD movwf tosl,c
       364 00048C 51F6 movf (_EUSART2_TxDefaultInterruptHandler+1)& (0+255),w,b
       365 00048E 6EFE movwf tosh,c
       366 000490 51F7 movf (_EUSART2_TxDefaultInterruptHandler+2)& (0+255),w,b
       367 000492 D01F goto L4
       368 000494 i2l47:
       369
       370 ; BSR set to: 14
       371 ;interrupt_manager.c: 87: else if(PIE3bits.RC2IE == 1 && PIR3bits.RC2IF == 1)
       372 000494 BF2C btfsc 44,7,b ;volatile
       373
       374 ; BSR set to: 14
       375 000496 AF36 btfss 54,7,b ;volatile
       376 000498 D00B goto i2l49
       377
       378 ; BSR set to: 14
       379 ;interrupt_manager.c: 88: {;interrupt_manager.c: 89: EUSART2_RxDefaultInterruptHandler()
          + ;
       380 00049A D801 call i2u1038_48
       381 00049C D01D goto i2u1043_49
       382 00049E i2u1038_48:
       383 00049E 0005 push
       384 0004A0 6EFA movwf pclath,c
       385 0004A2 0105 movlb 5 ; () banked
       386 0004A4 51F2 movf _EUSART2_RxDefaultInterruptHandler& (0+255),w,b
       387 0004A6 6EFD movwf tosl,c
       388 0004A8 51F3 movf (_EUSART2_RxDefaultInterruptHandler+1)& (0+255),w,b
       389 0004AA 6EFE movwf tosh,c
       390 0004AC 51F4 movf (_EUSART2_RxDefaultInterruptHandler+2)& (0+255),w,b
       391 0004AE D011 goto L4
       392 0004B0 i2l49:
       393
       394 ; BSR set to: 14
       395 ;interrupt_manager.c: 91: else if(PIE4bits.TX3IE == 1 && PIR4bits.TX3IF == 1)
       396 0004B0 A12D btfss 45,0,b ;volatile
       397 0004B2 D002 goto i2l51
       398
       399 ; BSR set to: 14
       400 ;interrupt_manager.c: 92: {;interrupt_manager.c: 93: EUSART3_TxDefaultInterruptHandler()
          + ;
       401 0004B4 B137 btfsc 55,0,b ;volatile
       402 0004B6 D010 goto i2u1043_49
       403 0004B8 i2l51:
       404
       405 ; BSR set to: 14
       406 ;interrupt_manager.c: 95: else if(PIE4bits.RC3IE == 1 && PIR4bits.RC3IF == 1)
       407 0004B8 B32D btfsc 45,1,b ;volatile
       408
       409 ; BSR set to: 14
       410 0004BA A337 btfss 55,1,b ;volatile
       411 0004BC D00D goto i2u1043_49
       412
       413 ; BSR set to: 14
       414 ;interrupt_manager.c: 96: {;interrupt_manager.c: 97: EUSART3_RxDefaultInterruptHandler()
          + ;
       415 0004BE D801 call i2u1043_48
       416 0004C0 D00B goto i2u1043_49
       417 0004C2 i2u1043_48:
       418 0004C2 0005 push
       419 0004C4 6EFA movwf pclath,c
       420 0004C6 0105 movlb 5 ; () banked
       421 0004C8 51F8 movf _EUSART3_RxDefaultInterruptHandler& (0+255),w,b
       422 0004CA 6EFD movwf tosl,c
       423 0004CC 51F9 movf (_EUSART3_RxDefaultInterruptHandler+1)& (0+255),w,b
       424 0004CE 6EFE movwf tosh,c
       425 0004D0 51FA movf (_EUSART3_RxDefaultInterruptHandler+2)& (0+255),w,b
       426 0004D2 L4:
       427 0004D2 6EFF movwf tosu,c
       428 0004D4 50FA movf pclath,w,c
       429 0004D6 0012 return ;indir
       430 0004D8 i2u1043_49:
       431
       432 ; BSR set to: 14
       433
       434 ;interrupt_manager.c: 98: }
       435 0004D8 C00B FFDA movff ??_INTERRUPT_InterruptManager+3,fsr2h
       436 0004DC C00A FFD9 movff ??_INTERRUPT_InterruptManager+2,fsr2l
       437 0004E0 C009 FFFB movff ??_INTERRUPT_InterruptManager+1,pclatu
       438 0004E4 C008 FFFA movff ??_INTERRUPT_InterruptManager,pclath
       439 0004E8 9256 bcf btemp,1,c ;clear compiler interrupt flag (level 2)
       440 0004EA 0011 retfie f
       441 0004EC __end_of_INTERRUPT_InterruptManager:
       442 opt callstack 0

     
    post edited by kj6666 - 2019/10/28 13:41:53
    #18
    kj6666
    New Member
    • Total Posts : 22
    • Reward points : 0
    • Joined: 2019/02/21 07:28:03
    • Location: Dallas, Texas
    • Status: offline
    Re: Bootloader error "intcode" (508-5FB) overlaps segment "intcodelo" (518-51F) 2019/10/28 14:39:29 (permalink)
    0
    ric
    Latest?
    XC8 v2.10 has been out since July.
     


    Same error with this version as well.
    #19
    Jump to:
    © 2020 APG vNext Commercial Version 4.5