AnsweredAssumed Answered

I am getting Hard Fault whenever I am trying to access Program memory

Question asked by aniket bhumkar on Aug 3, 2018
Latest reply on Aug 6, 2018 by Erich Styger
  Hello,
 
  I am using NXP K2x K22FN512M12 controller and MCUXpresso IDE.
  I am getting Hard Fault whenever I am trying to access Program memory.
 
  Example:
  I have saved this array in Program memory using following method
 
  __attribute__ ((section (".myAccessArray"))) uint8_t au8DeviceObject
  [MAX_PROP_SUPPORTED+1][MAX_OBJECT_TYPE-1]
 
  Linker File:
  I have allocated memory from text area
 
  MEMORY {
  m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000198  /* Debugger COmpatible, no bootloader compatible*/
  /*m_interrupts (RX) : ORIGIN = 0x00012800, LENGTH = 0x00000198*/   /*  bootloader compatible*/
  m_text      (RX) : ORIGIN = 0x00012C10, LENGTH = 0x0006D3F0
  m_data      (RX) : ORIGIN = 0x1FFF0000, LENGTH = 0x00010000
  m_heap_rtos (RW) : ORIGIN = 0x20000000, LENGTH = 0x00010000
  m_cfmprotrom  (RX) : ORIGIN = 0x00012C00, LENGTH = 0x00000010
  WIFI_DATA (RX) : ORIGIN = 0x00011800, LENGTH = 0x00000800     /*0x00011800 to 0x00012000*/
  OTHER_DATA (RX) : ORIGIN = 0x00012000, LENGTH = 0x00000800   /*0x00012000 to 0x00012800*/
  ACCESS_ARRAY(RX) : ORIGIN = 0x00100000, LENGTH = 0x000051d8
  DATA_ARRAY(RX) : ORIGIN = 0x001053E0, LENGTH = 0x000051d8
  }
  /* Define output sections */
  SECTIONS
  {
 /* The startup code goes first into INTERNAL_FLASH */
 .
 .
 .// other sections
 .
  .myAccessArray  :
  {
    KEEP(*(.AccArrCfg)) /* keep my variable even if not referenced */
  } > ACCESS_ARRAY
 
  .myDataArray  :
  {
    KEEP(*(.DataArrCfg)) /* keep my variable even if not referenced */
  } > DATA_ARRAY

  }

  Accessing array:
 
  uint8_t *pu8AccArray = NULL;
  uint8_t *pu8Ptr = NULL;
  uint32_t u32DevProp = PROP_DEVICE;
  uint32_t u32ObjType = OBJECT_ANALOG;
  uint32_t u32PropType = 0;
 
  pu8AccArray = &au8DeviceObject[0][0];
 
  pu8Ptr = (pu8AccArray + ((MAX_PROP_SUPPORTED+1) * u32DevProp) + u32ObjType);
 
  u32PropType = *pu8Ptr; // @ this point exception occurs and controller goes into hard fault.
 
 
  Please let me know if there is anything that I am doing wrong.
  Thank You!!!

Outcomes