在大多数 MCU 上、从 RAM 运行函数的速度通常要快得多、但是我创建了一个快速基准测试项目、证明从 RAM 运行相同函数的速度要慢25%左右。
请参阅以下代码:
"
/********* /
/* MISC_NOP
*
*该函数执行一定数量的 NOP。
***/
/********* /
void MISC_NOP (无符号 int nops)
{
unsigned int i;
for (i=0;<nops;i++))
{
NOP();
}
}
#pragma CODE_SECTION (MISC_NOP_RAM、".TI.ramfunc");
/********* /
/* MISC_NOP_RAM
*
*该函数执行一定数量的 NOP。
***/
/********* /
void MISC_NOPS_RAM (无符号 int nops)
{
unsigned int i;
for (i=0;<nops;i++))
{
NOP();
}
}
"
RAM 中的一个需要~13uS、而闪存中的一个需要~10uS。
链接器:
"
存储器
{
/*存储在内部闪存中并从内部闪存执行的应用程序*/
闪存(RX):origin = APP_BASE,length = 0x00100000
/*应用程序使用内部 RAM 进行数据*/
SRAM (rwx):origin = 0x20000000,length = 0x00030000
SRAM_RAMFUNC (rwx):origin = 0x20030000,length = 0x00010000
}
/*内存中的段分配*/
部分
{
.intvecs:> app_base
.text:> FLASH
.const:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH
.vtable:> RAM_base
.data :> SRAM
.bss:> SRAM
.sysmem:> SRAM
.stack:> SRAM,填充0xAA5555
.TI.ramfunc:{} load = FLASH,
运行= SRAM_RAMFUNC、
Load_start (RamfuncsLoadStart)、
load_size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
run_size (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
}
"