AnsweredAssumed Answered

Hard fault on KE02 caused by write to static variable

Question asked by Paul Robinson on Nov 5, 2015
Latest reply on Nov 12, 2015 by Paul Robinson

I am trying to implement the I2C bootloader (AN4775) on the KE02 and get a hard fault interrupt.  I have tracked it down to the line that causes it using methods described in other posts which worked as when I remove the offending line I do not get the hard fault interrupt.  The problem is that I don't understand why it is causing the interrupt.

 

in the FC_protocol.c module there are some variables declared:

 

static uint8_t u8MCU_ID_InfoBuff[64];

static uint8_t u8DataBuff[WRITE_BLOCK_SIZE];

static uint8_t u8MCU_ID_InfoLength;

 

and the line that causes the interrupt is the last line in a function within that module

 

void MCU_ID_Package( void )

{

  ADDRESS_TYPE *pTempAddress;

    uint32_t *pRxFrameLenth;

  uint32_t u32Index;

    uint32_t i;

  uint8_t Sum;

  u8MCU_ID_InfoBuff[4] = sMCU_Info.Version;

  u8MCU_ID_InfoBuff[5] = (unsigned char)sMCU_Info.Sdid>>8;

  u8MCU_ID_InfoBuff[6] = (unsigned char)sMCU_Info.Sdid;

 

  u32Index = 7;

 

     -     -     -     -     -     -

     -     -     -     -     -     -

 

  u8MCU_ID_InfoLength = u32Index;

}

 

I have made the problem go away in two ways:

1. Make u8MCU_ID_InfoLength non-static

2. Make u8MCU_ID_InfoLength a uint32_t

 

neither of which make any sense to me.

 

From map file in original state:

 

.bss.u8MCU_ID_InfoLength

                0x1ffffe68        0x1 ./FC_protocol/FC_protocol.o

.bss.u8DataBuff

                0x1ffffe69       0x40 ./FC_protocol/FC_protocol.o

.bss.u8MCU_ID_InfoBuff

                0x1ffffea9       0x40 ./FC_protocol/FC_protocol.o

 

If I change u8MCU_ID_InfoLength to uint32_t it stays in same place and u8DataBuff is shifted by 3 bytes as expected, but why should this work?

 

.bss.u8MCU_ID_InfoLength

                0x1ffffe68        0x4 ./FC_protocol/FC_protocol.o

.bss.u8DataBuff

                0x1ffffe6c       0x40 ./FC_protocol/FC_protocol.o

.bss.u8MCU_ID_InfoBuff

                0x1ffffeac       0x40 ./FC_protocol/FC_protocol.o

Outcomes