// XFLASH memory layout #pragma once #include #include "bootapp.h" // for RAMSIZE #include "config.h" #define XFLASH_SIZE 0x40000ul // size of XFLASH #define LANG_OFFSET 0x0 // offset for language data #ifndef XFLASH_DUMP #define LANG_SIZE XFLASH_SIZE #else #define DUMP_MAGIC 0x55525547ul struct dump_header_t { // start with a magic value to indicate the presence of a dump, so that clearing // a single page is sufficient for resetting the state uint32_t magic; uint8_t regs_present; // true when the lower segment containing registers is present uint8_t crash_reason; // uses values from dump_crash_source uint32_t pc; // PC nearby the crash location uint16_t sp; // SP nearby the crash location }; struct dump_data_t { // contiguous region containing all addressable ranges uint8_t regs[RAMSTART]; uint8_t sram[RAMSIZE]; }; struct dump_t { struct dump_header_t header; // data is page aligned (no real space waste, due to the larger // alignment required for the whole dump) struct dump_data_t __attribute__((aligned(256))) data; }; // dump offset must be aligned to lower 4kb sector boundary #define DUMP_OFFSET ((XFLASH_SIZE - sizeof(dump_t)) & ~0xFFFul) #define DUMP_SIZE (XFLASH_SIZE - DUMP_OFFSET) // effective dump size area #define LANG_SIZE DUMP_OFFSET // available language space #endif