我有一个 K8x,需要将大量常量数据放在外部 (QSPI XiP) 闪存上。我正在使用外部链接描述文件。

以下是相关摘录:
k81_memory.ld
MEMORY
{
PROGRAM_FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000
EXT_PGM_FLASH (rx) : ORIGIN = 0x04020000, LENGTH = 0x100000
/* 0x04020000-0x0405FFFF is XiP alias for 0x68020000-0x6805FFFF */
SRAM_LOWER (rwx) : ORIGIN = 0x1fff0000, LENGTH = 0x010000
SRAM_UPPER (rwx) : ORIGIN = 0x20000000, LENGTH = 0x030000
/* First 128K infineon has 4K erase, use for Configs */
TERM_SET
tiNGS (rx) : ORIGIN = 0x68000000, LENGTH = 0x018000 /* 96K */
MODULE_CONFIG (rx) : ORIGIN = 0x68018000, LENGTH = 0x008000 /* 32K */
XIP_RESERVED (rx) : ORIGIN = 0x68020000, LENGTH = 0x100000 /* 1M */
OTA_UPDATE (rx) : ORIGIN = 0x68120000, LENGTH = 0x100000 /* 1M */
}
k81.ld
INCLUDE "k81_memory.ld"
STACK_SIZE = 0x1000;
ENTRY(ResetISR)
SECTIONS
{
/* EXTERNAL QSPI XiP FLASH */
.text_Flash2 : ALIGN(4)
{
FILL(0xff)
*(.text_Flash2*)
*(.text_EXT_PGM_FLASH*)
*(.text.$Flash2*)
*(.text.$EXT_PGM_FLASH*)
} > EXT_PGM_FLASH
.data_Flash2 : ALIGN(4)
{
FILL(0xff)
*(.rodata_Flash2*)
*(.rodata_EXT_PGM_FLASH*)
*(.rodata.$Flash2*)
*(.rodata.$EXT_PGM_FLASH*)
}> EXT_PGM_FLASH
如果我将代码放在外部闪存中,例如
void __attribute__((section (".text_Flash2"))) delay_ms(uint16_t ms)
{
volatile uint32_t i = 0U;
for (i = 0U; i < (10000U*ms); ++i)
{
__asm("NOP"); /* delay */
}
}
...并构建:

...然后函数正确放置在外部闪光灯上。
但是,如果我改为将 const 数据放在外部闪存中
const TsBigBitMap __attribute__((section (".data_Flash2"))) Logo_bmp =
{
3, // BitMapType
512, // width_pixels
384, // height_pixels
192, // width_bytes
73728, // byte_count
{
// Line 0
0xFF, 0xFF, 0xF0, 0x0A, ... 0xFF, 0xFF 0xFF, 0xFF,
}
};
..并构建:

...那么它似乎没有放在外部闪光灯中。
我没看到什么?