本帖最后由 摸鱼校尉 于 2024-12-10 19:08 编辑
硬汉哥,各位站内大佬,今天工作中遇见一个问题,百思不得其解。问题描述如下:
图一:
[C] 纯文本查看 复制代码
/* Specify the memory areas */
MEMORY
{
/* APP从300KB开始,且总的APP区域 700KB */
m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000400
m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x000AF000 - 0x00000410
/* 标定参数区域从0x000AF000开始,且总的标定参数区域 64KB */
m_calibration_rom (RX) : ORIGIN = 0x000AF000, LENGTH = 0x00010000
/* SRAM_L */
/* 从SRAM_L区域中划分标定参数区域 */
m_data (RW) : ORIGIN = 0x1FFE0000, LENGTH = 0x00020000 - 0x00010000
m_calibration_ram (RW) : ORIGIN = 0x1FFE0000 + 0x00020000 - 0x00010000, LENGTH = 0x00010000
/* SRAM_U */
m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x0001F000
}
图二:
[C] 纯文本查看 复制代码 /* 定义标定参数ROM区 */
.calibration_rom :
{
. = ALIGN(4);
calibration_data_rom_start = .; /* ROM区域起始地址 */
*(.calibration_rom)
calibration_data_rom_end = .; /* ROM区域结束地址 */
. = ALIGN(4);
} > m_calibration_rom
/* 定义标定参数RAM区 */
.calibration :
{
. = ALIGN(4);
calibration_data_ram_start = .; /* RAM区域起始地址 */
*(.calibration)
calibration_data_ram_end = .; /* RAM区域结束地址 */
. = ALIGN(4);
} > m_calibration_ram AT > m_calibration_rom
calibration_data_rom_end = calibration_data_rom_start + (calibration_data_ram_end - calibration_data_ram_start);
如上图,我想实现在线更新标定参数,但是我发现我无法通过flash驱动擦除m_calibration_rom(0xAF000)区域,但是同样的擦除函数我可以擦除0xBF000区域(0xAF000 + 0x10000后的地址),请问各位大佬有何解决想法。我使用的MCU是S32K148。
|