“线程:HALCOGEN, 测试”中讨论的其它部件
您好,
我想将重置信息存储在 SRAM 中,并在执行热重置后读取该信息。 我尝试了所有选项,但在 PC 设置为重置条目矢量时,在任何类型的重置后,所有 RAM 数据都初始化回0。
我已将变量放入 noinit 部分,并使用了以下链接程序脚本:
#define NON_VOLATILE_DATA __attribute__ ((section(".noinit")))
NON_VOLATILE_DATA static char data[16];
#define SRAM_SIZE 0x00080000
#define STACKS_START_ADDR 0x08000000
#define STACKS_SIZE 0x00004e00
#define KRAM_START_ADDR (STACKS_START_ADDR + STACKS_SIZE)
#define KRAM_SIZE 0x00000800
#define RAM_START_ADDR (KRAM_START_ADDR + KRAM_SIZE)
#define RAM_SIZE (SRAM_SIZE - NOINIT_RAM_SIZE - KRAM_SIZE - STACKS_SIZE)
#define NOINIT_RAM_START_ADDR (RAM_START_ADDR + RAM_SIZE)
#define NOINIT_RAM_SIZE 0x000000100
MEMORY
{
VECTORS (X) : origin = 0x00000000 length = 0x00000020
KERNEL (RX) : origin = 0x00000020 length = 0x00008000
FLASH0 (RX) : origin = 0x00008020 length = 0x001F7FE0
FLASH1 (RX) : origin = 0x00200000 length = 0x00200000
STACKS (RW) : origin = STACKS_START_ADDR length = STACKS_SIZE
KRAM (RW) : origin = KRAM_START_ADDR length = KRAM_SIZE
RAM (RW) : origin = RAM_START_ADDR length = RAM_SIZE
NOINIT_RAM (RW) : origin = NOINIT_RAM_START_ADDR length = NOINIT_RAM_SIZE
}
SECTIONS
{
.intvecs : {} > VECTORS
/* FreeRTOS Kernel in protected region of Flash */
.kernelTEXT align(32) : {} > KERNEL
.cinit align(32) : {} > KERNEL
.pinit align(32) : {} > KERNEL
/* Rest of code to user mode flash region */
.text align(32) : {} > FLASH0 | FLASH1
.const align(32) : {} > FLASH0 | FLASH1
/* FreeRTOS Kernel data in protected region of RAM */
.kernelBSS : {} > KRAM
.kernelHEAP : {} > RAM
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
.noinit : {} > NOINIT_RAM type=NOINIT
}
我甚至在重置前尝试禁用内存块初始化:
l2ramwREG->MEMINITDOMAIN = 0x7f;
但上述情况不起作用,在重置后 RAM 总是读数为0。
在没有重置时初始化数据的情况下,是否有任何方法可以将数据存储在 SRAM 中?
谢谢!










