【发布时间】:2017-10-27 10:28:27
【问题描述】:
我目前正在尝试在链接器文件中保留闪存的一个扇区,以将一些数据保存到其中(使用 driverlib API)。我首先将脚本写入特定的内存地址,然后运行我的应用程序来读取保存的数据。
不幸的是,每当我刷机时,数据都会丢失。因此,我正在尝试更改链接器文件并保留一些空间,但我不确定我是否正确执行此操作。我将不胜感激任何帮助或提示。
MEMORY
{
/* Flash Size 128 KB minus the CCA area below (88 bytes) */
/* OLD: FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x0001FFA8 */
FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x0001FF88
/*
* Custom reserved memory space with size of 32 bytes
*/
CNVM (RX) : ORIGIN = 0x0001FF88, LENGTH = 32
/*
* Customer Configuration Area and Bootloader Backdoor configuration
* in flash, up to 88 bytes
*/
FLASH_CCFG (RX) : ORIGIN = 0x0001FFA8, LENGTH = 88
/* RAM Size 20KB */
SRAM (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00005000
/* Application can use GPRAM region as RAM if cache is disabled in CCFG */
GPRAM (RWX) : ORIGIN = 0x11000000, LENGTH = 0x00002000
}
/*. Highest address of the stack. Used in startup file .*/
_estack = ORIGIN(SRAM) + LENGTH(SRAM); /* End of SRAM */
/*. Generate a link error if heap and stack don’t fit into RAM .*/
_Min_Heap_Size = 0;
_Min_Stack_Size = 0x100;
SECTIONS
{
.text :
{
_text = .;
KEEP(*(.vectors))
*(.text*)
*(.rodata*)
_etext = .;
} > FLASH = 0
.text:
{
*(.rodata*)
} > CNVM
.data :
{
_data = .;
*(vtable)
*(.data*)
_edata = .;
} > SRAM AT > FLASH
.ARM.exidx :
{
*(.ARM.exidx*)
} > FLASH
.bss :
{
_bss = .;
*(.bss*)
*(COMMON)
_ebss = .;
} > SRAM
.ccfg :
{
KEEP(*(.ccfg))
} > FLASH_CCFG
/* User_heap_stack section, used to check that there is enough RAM left */
._user_heap_stack :
{
. = ALIGN(4);
. = . + _Min_Heap_Size;
. = . + _Min_Stack_Size;
. = ALIGN(4);
} > SRAM
.gpram :
{
} > GPRAM
}
【问题讨论】:
-
如何刷板?
-
我猜你正试图在闪存上的空间应用程序之间保留空间,
CNVM (RX) : ORIGIN = 0x0001FF88, LENGTH = 32。我建议将自定义保留空间移动到闪存的末尾,当您擦除和闪存固件时,只需擦除应用程序的大小,然后再闪存应用程序。 -
@GauravPathak 他已经在使用尽可能接近“闪存结束”的区域。
-
@kfx 我明白了!
FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x0001FF88。谢谢! -
@kfx 我正在使用 TI UniFlash 工具。
标签: c linker contiki flash-memory