123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // XFLASH memory layout
- #pragma once
- #include <stdint.h>
- #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
|