Files
2025-12-03 11:12:34 +08:00

746 lines
20 KiB
C

// *INDENT-OFF*
#include "app_config.h"
#include "audio_config_def.h"
/* ================================== BR35 SDK memory ============================================
_______________
| update |
|_______________|___ RAM_LIMIT_H
| HEAP |
|_______________|___ data_code_pc_limit_H
| audio overlay |
|_______________|
| data_code |
|_______________|___ data_code_pc_limit_L
| bss |
|_______________|
| data |
|_______________|
| TLB |
|_______________|
| irq_stack |
|_______________|
| boot info |
|_______________|___ RAM_LIMIT_L
|rom export ram |
|_______________|___ 0x100200
| isr base |
|_______________|___ 0x100000
=============================================================================================== */
#include "maskrom_stubs.ld"
EXTERN(
_start
#include "sdk_used_list.c"
);
UPDATA_SIZE = 0x200;
UPDATA_BEG = _RAM_LIMIT_H - UPDATA_SIZE;
UPDATA_BREDR_BASE_BEG = 0x4000000;
RAM_LIMIT_L = _MASK_EXPORT_MEM_BEGIN + _MASK_EXPORT_MEM_SIZE;
RAM_LIMIT_H = UPDATA_BEG;
PHY_RAM_SIZE = RAM_LIMIT_H - RAM_LIMIT_L;
//from mask export
ISR_BASE = _IRQ_MEM_ADDR;
ROM_RAM_SIZE = _MASK_EXPORT_MEM_SIZE;// _MASK_MEM_SIZE;
ROM_RAM_BEG = _MASK_EXPORT_MEM_BEGIN;//_MASK_MEM_BEGIN;
RAM0_BEG = RAM_LIMIT_L;
RAM0_END = RAM_LIMIT_H;
RAM0_SIZE = RAM0_END - RAM0_BEG;
RAM1_BEG = RAM_LIMIT_L;
RAM1_END = RAM0_BEG;
RAM1_SIZE = RAM1_END - RAM1_BEG;
CODE_BEG = 0xC000100;
PSRAM_BEGIN = 0x8000000;
#if !TCFG_PSRAM_DEV_ENABLE
FREE_DACHE_WAY = TCFG_FREE_DCACHE_WAY;
FREE_IACHE_WAY = TCFG_FREE_ICACHE_WAY;
DCACHE_RAM_SIZE = FREE_DACHE_WAY*8K;
ICACHE_RAM_SIZE = FREE_IACHE_WAY*8K;
PSRAM_SIZE = 0;
#else
// 使能psram时,默认不将cache当ram用
FREE_DACHE_WAY = 0;
FREE_IACHE_WAY = 0;
DCACHE_RAM_SIZE = 0;
ICACHE_RAM_SIZE = 0;
PSRAM_SIZE = TCFG_PSRAM_SIZE;
#endif
PSRAM_END = PSRAM_BEGIN + PSRAM_SIZE;
//=============== About BT RAM ===================
//CONFIG_BT_RX_BUFF_SIZE = (1024 * 18);
MEMORY
{
code0(rx) : ORIGIN = CODE_BEG, LENGTH = CONFIG_FLASH_SIZE
ram0(rwx) : ORIGIN = RAM0_BEG, LENGTH = RAM0_SIZE
//ram1 - 用于volatile-heap
//ram1(rwx) : ORIGIN = RAM1_BEG, LENGTH = RAM1_SIZE
psram(rwx) : ORIGIN = PSRAM_BEGIN, LENGTH = PSRAM_SIZE
dcache_ram(rw) : ORIGIN = 0x370000+((4-FREE_DACHE_WAY)*8K), LENGTH = DCACHE_RAM_SIZE
icache_ram(rw) : ORIGIN = 0x3C0000+((4-FREE_IACHE_WAY)*8K), LENGTH = ICACHE_RAM_SIZE
}
ENTRY(_start)
SECTIONS
{
. = ORIGIN(ram0);
.boot_info ALIGN(32):
{
*(.boot_info)
. = ALIGN(256);
// 需要避免与uboot和maskrom冲突
*(.debug_record)
. = ALIGN(4);
} > ram0
.irq_stack ALIGN(32):
{
_cpu0_sstack_begin = .;
*(.cpu0_stack)
_cpu0_sstack_end = .;
. = ALIGN(4);
} > ram0
// os bss依然存放在bss段
//.os_data_bss ALIGN(4):
//{
// *(.os.data.bss)
//} > ram0
//TLB 起始需要4K 对齐;
.mmu_tlb ALIGN(0x1000):
{
*(.mmu_tlb_segment);
} > ram0
.bss ALIGN(32):SUBALIGN(4)
{
. = ALIGN(4);
/* #include "system/system_lib_bss.ld" */
. = ALIGN(4);
*(.bss)
. = ALIGN(4);
*(.volatile_ram)
*(.btstack_pool)
*(.mem_heap)
#if !TCFG_PSRAM_DEV_ENABLE
*(.memp_memory_x)
#endif
. = ALIGN(4);
lp_data_save_bss_begin = .;
*(.power_driver.data.bss.overlay)
#if DAC_OBUF_OVERLAY_LP_BSS_EN
lp_data_save_bss_src_end = .;
. = (lp_data_save_bss_begin + 4800); // 可以在dac_overlay_malloc()中打印获取size
#endif
lp_data_save_bss_end = .;
lp_data_save_bss_size = lp_data_save_bss_end - lp_data_save_bss_begin;
. = ALIGN(4);
*(.usb.data.bss.exchange)
. = ALIGN(4);
*(.non_volatile_ram)
. = ALIGN(4);
#if ((!TCFG_ICACHE_RUN_BT_STATIC_RAM) && (!TCFG_DCACHE_RUN_BT_STATIC_RAM))
#include "btctrler/btctler_lib_bss.ld"
#endif
#include "btctrler/crypto/bss.ld"
. = ALIGN(32);
} > ram0
.data ALIGN(32):SUBALIGN(4)
{
//common bank code addr
common_code_run_addr = .;
//cpu start
. = ALIGN(4);
*(.data_magic)
. = ALIGN(4);
__a2dp_movable_slot_start = .;
*(.movable.slot.1);
__a2dp_movable_slot_end = .;
. = ALIGN(4);
app_mode_begin = .;
KEEP(*(.app_mode))
app_mode_end = .;
. = ALIGN(4);
/* #include "system/system_lib_data.ld" */
#include "btctrler/crypto/data.ld"
. = ALIGN(4);
#include "btctrler/btctler_lib_data.ld"
. = ALIGN(4);
} > ram0
.data_code ALIGN(32):SUBALIGN(4)
{
data_code_pc_limit_begin = .;
*(.must_ram_code)
*(.cache)
*(.flushinv_icache)
#if (!TCFG_ICACHE_RUN_DATA_CODE)
#include "sdk_ram_code.ld"
#endif
. = ALIGN(4);
} > ram0
__report_overlay_begin = .;
#include "app_overlay.ld"
//bank code addr
bank_code_run_addr = .;
OVERLAY : AT(0x300000) SUBALIGN(4)
{
.overlay_bank0
{
*(.bank.code.0*)
*(.bank.const.0*)
. = ALIGN(4);
}
.overlay_bank1
{
*(.bank.code.1*)
*(.bank.const.1*)
. = ALIGN(4);
}
.overlay_bank2
{
*(.bank.code.2*)
*(.bank.const.2*)
*(.bank.ecdh.*)
. = ALIGN(4);
}
.overlay_bank3
{
*(.bank.code.3*)
*(.bank.const.3*)
*(.bank.enc.*)
. = ALIGN(4);
}
.overlay_bank4
{
*(.bank.code.4*)
*(.bank.const.4*)
. = ALIGN(4);
}
.overlay_bank5
{
*(.bank.code.5*)
*(.bank.const.5*)
. = ALIGN(4);
}
.overlay_bank6
{
*(.bank.code.6*)
*(.bank.const.6*)
. = ALIGN(4);
}
.overlay_bank7
{
*(.bank.code.7*)
*(.bank.const.7*)
. = ALIGN(4);
}
.overlay_bank8
{
*(.bank.code.8*)
*(.bank.const.8*)
. = ALIGN(4);
}
.overlay_bank9
{
*(.bank.code.9*)
*(.bank.const.9*)
. = ALIGN(4);
}
} > ram0
data_code_pc_limit_end = .;
__report_overlay_end = .;
_HEAP_BEGIN = . ;
#if CONFIG_LCD_BUF_STATIC_RAM_LEN
_HEAP_END = RAM0_END - CONFIG_LCD_BUF_STATIC_RAM_LEN;
#else
_HEAP_END = RAM0_END;
#endif
_LCD_BUF_STATIC_START = _HEAP_END;
_LCD_BUF_STATIC_END = RAM0_END;
. = ORIGIN(psram);
.ps_ram_data_code ALIGN(32):
{
*(.psram_data)
*(.psram_code)
. = ALIGN(4);
} > psram
.ps_ram_bss ALIGN(32):
{
*(.psram_bss)
#if TCFG_PSRAM_DEV_ENABLE
*(.memp_memory_x)
#endif
. = ALIGN(4);
} > psram
.ps_ram_noinit ALIGN(32):
{
*(.psram_noinit)
. = ALIGN(4);
} > psram
_PSRAM_HEAP_BEGIN = .;
_PSRAM_HEAP_END = PSRAM_END;
. = ORIGIN(code0);
.text ALIGN(4):SUBALIGN(4)
{
PROVIDE(text_rodata_begin = .);
*(.startup.text)
*(.text)
. = ALIGN(4);
update_target_begin = .;
PROVIDE(update_target_begin = .);
KEEP(*(.update_target))
update_target_end = .;
PROVIDE(update_target_end = .);
. = ALIGN(4); // must at tail, make rom_code size align 4
PROVIDE(text_rodata_end = .);
. = ALIGN(4);
_SPI_CODE_CORE_START = . ;
*(.spi_code_core)
. = ALIGN(4);
_SPI_CODE_CORE_END = . ;
. = ALIGN(4);
_SPI_CODE_FLASH_START = . ;
*(.spi_code_flash)
. = ALIGN(4);
_SPI_CODE_FLASH_END = . ;
. = ALIGN(4);
_SPI_CODE_OTP_START = . ;
*(.spi_code_otp)
. = ALIGN(4);
_SPI_CODE_OTP_END = . ;
. = ALIGN(4);
_SFC_DTR_CODE_START = . ;
*(.sfc_dtr_code)
. = ALIGN(4);
_SFC_DTR_CODE_END = . ;
clock_critical_handler_begin = .;
KEEP(*(.clock_critical_txt))
clock_critical_handler_end = .;
hsb_critical_handler_begin = .;
KEEP(*(.hsb_critical_txt))
hsb_critical_handler_end = .;
lsb_critical_handler_begin = .;
KEEP(*(.lsb_critical_txt))
lsb_critical_handler_end = .;
chargestore_handler_begin = .;
KEEP(*(.chargestore_callback_txt))
chargestore_handler_end = .;
. = ALIGN(4);
app_msg_handler_begin = .;
KEEP(*(.app_msg_handler))
app_msg_handler_end = .;
. = ALIGN(4);
app_msg_prob_handler_begin = .;
KEEP(*(.app_msg_prob_handler))
app_msg_prob_handler_end = .;
. = ALIGN(4);
app_charge_handler_begin = .;
KEEP(*(.app_charge_handler.0))
KEEP(*(.app_charge_handler.1))
app_charge_handler_end = .;
. = ALIGN(4);
scene_ability_begin = .;
KEEP(*(.scene_ability))
scene_ability_end = .;
#include "media/framework/section_text.ld"
. = ALIGN(4);
tool_interface_begin = .;
KEEP(*(.tool_interface))
tool_interface_end = .;
. = ALIGN(4);
effects_online_adjust_begin = .;
KEEP(*(.effects_online_adjust))
effects_online_adjust_end = .;
. = ALIGN(4);
tws_tone_cb_begin = .;
KEEP(*(.tws_tone_callback))
tws_tone_cb_end = .;
. = ALIGN(4);
vm_reg_id_begin = .;
KEEP(*(.vm_manage_id_text))
vm_reg_id_end = .;
. = ALIGN(4);
*(.gpio.text.cache.L2)
*(.LED_code)
*(.LED_const)
. = ALIGN(4);
__fm_movable_region_start = .;
*(.movable.region.1)
__fm_movable_region_end = .;
__fm_movable_region_size = ABSOLUTE(__fm_movable_region_end - __fm_movable_region_start);
. = ALIGN(4);
__bt_movable_region_start = .;
*(.movable.region.2)
__bt_movable_region_end = .;
__bt_movable_region_size = ABSOLUTE(__bt_movable_region_end - __bt_movable_region_start);
. = ALIGN(4);
__aac_movable_region_start = .;
*(.movable.region.3)
__aac_movable_region_end = .;
__aac_movable_region_size = ABSOLUTE(__aac_movable_region_end - __aac_movable_region_start);
. = ALIGN(4);
*(.bt_aac_dec_const)
*(.bt_aac_dec_sparse_const)
. = ALIGN(4);
__aec_movable_region_start = .;
*(.movable.region.4)
__aec_movable_region_end = .;
__aec_movable_region_size = ABSOLUTE(__aec_movable_region_end - __aec_movable_region_start);
. = ALIGN(4);
__mic_eff_movable_region_start = .;
*(.movable.region.5)
__mic_eff_movable_region_end = .;
__mic_eff_movable_region_size = ABSOLUTE(__mic_eff_movable_region_end - __mic_eff_movable_region_start);
/********maskrom arithmetic ****/
*(.opcore_table_maskrom)
*(.bfilt_table_maskroom)
*(.bfilt_code)
*(.bfilt_const)
/********maskrom arithmetic end****/
. = ALIGN(4);
__VERSION_BEGIN = .;
KEEP(*(.sys.version))
__VERSION_END = .;
*(.noop_version)
. = ALIGN(4);
__a2dp_text_cache_L2_start = .;
*(.movable.region.1);
. = ALIGN(4);
__a2dp_text_cache_L2_end = .;
. = ALIGN(4);
/* #include "system/system_lib_text.ld" */
#include "btctrler/crypto/text.ld"
#include "btctrler/btctler_lib_text.ld"
. = ALIGN(4);
_record_handle_begin = .;
PROVIDE(record_handle_begin = .);
KEEP(*(.debug_record_handle_ops))
_record_handle_end = .;
PROVIDE(record_handle_end = .);
. = ALIGN(32);
} > code0
#if defined CONFIG_CXX_SUPPORT
PROVIDE(ctors_count = _ctors_end - _ctors_begin);
#endif
. = ORIGIN(dcache_ram);
.dcache_ram_data ALIGN(32):SUBALIGN(4)
{
*(.dch_ram_data)
. = ALIGN(4);
} > dcache_ram
.dcache_ram_bss ALIGN(32):SUBALIGN(4)
{
#if (TCFG_DCACHE_RUN_BT_STATIC_RAM)
#include "btctrler/btctler_lib_bss.ld"
#endif
*(.dcache_bss)
*(.dch_ram_bss)
. = ALIGN(4);
// 放最后面
dcache_ram_bss_remain_begin = .;
. = ORIGIN(dcache_ram) + LENGTH(dcache_ram);
dcache_ram_bss_remain_end = .;
. = ALIGN(4);
} > dcache_ram
. = ORIGIN(icache_ram);
.icache_ram_data_code ALIGN(32):SUBALIGN(4)
{
icache_ram_data_code_pc_limit_begin = .;
*(.ich_ram_code)
#if (TCFG_ICACHE_RUN_DATA_CODE)
#include "sdk_ram_code.ld"
*(.power_driver.text.cache.L1)
#endif
. = ALIGN(4);
*(.icache_code)
. = ALIGN(4);
icache_ram_data_code_pc_limit_end = .;
} > icache_ram
.icache_ram_bss ALIGN(32):SUBALIGN(4)
{
*(.ich_ram_bss)
#if (TCFG_ICACHE_RUN_BT_STATIC_RAM)
#include "btctrler/btctler_lib_bss.ld"
#endif
. = ALIGN(4);
// 放最后面
icache_ram_bss_remain_begin = .;
. = ORIGIN(icache_ram) + LENGTH(icache_ram);
icache_ram_bss_remain_end = .;
. = ALIGN(4);
} > icache_ram
}
#include "app.ld"
#include "update/update.ld"
#include "btstack/btstack_lib.ld"
#include "driver/cpu/br35/driver_lib.ld"
#include "utils/utils_lib.ld"
#include "ui/ui.ld"
#ifdef CONFIG_AUDIO_ENABLE
#include "cvp/audio_cvp_lib.ld"
#include "media/media_lib.c"
#endif
#if CONFIG_JL_UI_ENABLE
/* #include "jlui/ui.ld" */
#endif
#include "system/port/br35/system_lib.ld" //Note: 为保证各段对齐, 系统ld文件必须放在最后include位置
//================== mmu tlb addr check ======================
// mmu tlb的位置不合理,可能会由于对齐产生较大的内存空隙(空隙无法使用)
ASSERT(ADDR(.mmu_tlb) <= 0x101000,"mmu tlb location unreasonable !!!");
//================== cache ram size check ======================
spi_code_size = _SPI_CODE_FLASH_END - _SPI_CODE_CORE_START;
ASSERT(FREE_DACHE_WAY <= 3,"cache ram size config err !!!");
ASSERT(FREE_IACHE_WAY <= 3,"cache ram size config err !!!");
// 不能关闭太多icache,否则会导致无法使用spi code load to cache功能(icache空间不够装spi代码)
ASSERT(spi_code_size <= ((4 - FREE_IACHE_WAY) * 8K),"icache size less than spi code size !!!");
//================== Section Info Export ====================//
text_begin = ADDR(.text);
text_size = SIZEOF(.text);
text_end = text_begin + text_size;
ASSERT((text_size % 4) == 0,"!!! text_size Not Align 4 Bytes !!!");
bss_begin = ADDR(.bss);
bss_size = SIZEOF(.bss);
bss_end = bss_begin + bss_size;
ASSERT((bss_size % 4) == 0,"!!! bss_size Not Align 4 Bytes !!!");
boot_info_addr = ADDR(.boot_info);
boot_info_size = SIZEOF(.boot_info);
ASSERT(boot_info_size >= 128,"!!! boot_info_size must larger than 128 Bytes !!!");
data_addr = ADDR(.data);
data_begin = text_begin + text_size;
data_size = SIZEOF(.data);
ASSERT((data_size % 4) == 0,"!!! data_size Not Align 4 Bytes !!!");
data_code_addr = ADDR(.data_code);
data_code_begin = data_begin + data_size;
data_code_size = SIZEOF(.data_code);
ASSERT((data_code_size % 4) == 0,"!!! data_code_size Not Align 4 Bytes !!!");
//================ OVERLAY Code Info Export ==================//
#ifndef CONFIG_CODE_MOVABLE_ENABLE
aec_addr = ADDR(.overlay_aec);
aec_begin = data_code_begin + data_code_size;
aec_size = SIZEOF(.overlay_aec);
aac_addr = ADDR(.overlay_aac);
aac_begin = aec_begin + aec_size;
aac_size = SIZEOF(.overlay_aac);
#endif
/*
lc3_addr = ADDR(.overlay_lc3);
lc3_begin = aac_begin + aac_size;
lc3_size = SIZEOF(.overlay_lc3);
*/
//================ psram ==================//
#ifndef CONFIG_CODE_MOVABLE_ENABLE
ps_ram_data_code_begin = aac_begin + aac_size;
#else
ps_ram_data_code_begin = data_code_begin + data_code_size;
#endif
ps_ram_data_code_addr = ADDR(.ps_ram_data_code);
ps_ram_data_code_size = SIZEOF(.ps_ram_data_code);
//================ dcache ==================//
dcache_ram_bss_begin = ADDR(.dcache_ram_bss);
dcache_ram_bss_size = SIZEOF(.dcache_ram_bss);
dcache_ram_bss_end = dcache_ram_bss_begin + dcache_ram_bss_size;
ASSERT((dcache_ram_bss_size % 4) == 0,"!!! dcache_ram_bss_size Not Align 4 Bytes !!!");
dcache_ram_data_addr = ADDR(.dcache_ram_data);
dcache_ram_data_begin = ps_ram_data_code_begin + ps_ram_data_code_size;
dcache_ram_data_size = SIZEOF(.dcache_ram_data);
ASSERT((dcache_ram_data_size % 4) == 0,"!!! dcache_ram_data_size Not Align 4 Bytes !!!");
//================ icache ==================//
icache_ram_bss_begin = ADDR(.icache_ram_bss);
icache_ram_bss_size = SIZEOF(.icache_ram_bss);
icache_ram_bss_end = icache_ram_bss_begin + icache_ram_bss_size;
ASSERT((icache_ram_bss_size % 4) == 0,"!!! icache_ram_bss_size Not Align 4 Bytes !!!");
icache_ram_data_code_addr = ADDR(.icache_ram_data_code);
icache_ram_data_code_begin = dcache_ram_data_begin + dcache_ram_data_size;
icache_ram_data_code_size = SIZEOF(.icache_ram_data_code);
ASSERT((icache_ram_data_code_size % 4) == 0,"!!! icache_ram_data_code_size Not Align 4 Bytes !!!");
//================ BANK ==================//
bank_code_load_addr = icache_ram_data_code_begin + icache_ram_data_code_size;
/* moveable_addr = ADDR(.overlay_moveable) ; */
/* moveable_size = SIZEOF(.overlay_moveable) ; */
//===================== HEAP Info Export =====================//
ASSERT(CONFIG_FLASH_SIZE > text_size,"check sdk_config.h CONFIG_FLASH_SIZE < text_size");
ASSERT(_HEAP_BEGIN >= bss_begin,"_HEAP_BEGIN < bss_begin");
ASSERT(_HEAP_BEGIN >= data_addr,"_HEAP_BEGIN < data_addr");
ASSERT(_HEAP_BEGIN >= data_code_addr,"_HEAP_BEGIN < data_code_addr");
//ASSERT(_HEAP_BEGIN >= moveable_slot_addr,"_HEAP_BEGIN < moveable_slot_addr");
//ASSERT(_HEAP_BEGIN >= __report_overlay_begin,"_HEAP_BEGIN < __report_overlay_begin");
PROVIDE(HEAP_BEGIN = _HEAP_BEGIN);
PROVIDE(HEAP_END = _HEAP_END);
_MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN;
PROVIDE(MALLOC_SIZE = _HEAP_END - _HEAP_BEGIN);
ASSERT(MALLOC_SIZE >= 0x8000, "heap space too small !")
//============================================================//
//=== report section info begin:
//============================================================//
report_text_beign = ADDR(.text);
report_text_size = SIZEOF(.text);
report_text_end = report_text_beign + report_text_size;
report_mmu_tlb_begin = ADDR(.mmu_tlb);
report_mmu_tlb_size = SIZEOF(.mmu_tlb);
report_mmu_tlb_end = report_mmu_tlb_begin + report_mmu_tlb_size;
report_boot_info_begin = ADDR(.boot_info);
report_boot_info_size = SIZEOF(.boot_info);
report_boot_info_end = report_boot_info_begin + report_boot_info_size;
report_irq_stack_begin = ADDR(.irq_stack);
report_irq_stack_size = SIZEOF(.irq_stack);
report_irq_stack_end = report_irq_stack_begin + report_irq_stack_size;
report_data_begin = ADDR(.data);
report_data_size = SIZEOF(.data);
report_data_end = report_data_begin + report_data_size;
report_bss_begin = ADDR(.bss);
report_bss_size = SIZEOF(.bss);
report_bss_end = report_bss_begin + report_bss_size;
report_data_code_begin = ADDR(.data_code);
report_data_code_size = SIZEOF(.data_code);
report_data_code_end = report_data_code_begin + report_data_code_size;
report_overlay_begin = __report_overlay_begin;
report_overlay_size = __report_overlay_end - __report_overlay_begin;
report_overlay_end = __report_overlay_end;
report_heap_beign = _HEAP_BEGIN;
report_heap_size = _HEAP_END - _HEAP_BEGIN;
report_heap_end = _HEAP_END;
ps_ram_bss_addr = ADDR(.ps_ram_bss);
ps_ram_bss_size = SIZEOF(.ps_ram_bss);
ps_ram_noinit_addr = ADDR(.ps_ram_noinit);
ps_ram_noinit_size = SIZEOF(.ps_ram_noinit);
ps_ram_size = PSRAM_SIZE;
PROVIDE(PSRAM_HEAP_BEGIN = _PSRAM_HEAP_BEGIN);
PROVIDE(PSRAM_HEAP_END = _PSRAM_HEAP_END);
_PSRAM_MALLOC_SIZE = _PSRAM_HEAP_END - _PSRAM_HEAP_BEGIN;
PROVIDE(PSRAM_MALLOC_SIZE = _PSRAM_HEAP_END - _PSRAM_HEAP_BEGIN);
br35_PHY_RAM_SIZE = PHY_RAM_SIZE;
br35_SDK_RAM_SIZE = report_mmu_tlb_size + \
report_boot_info_size + \
report_irq_stack_size + \
report_data_size + \
report_bss_size + \
report_overlay_size + \
report_data_code_size + \
report_heap_size;
//============================================================//
//=== report section info end
//============================================================//