常量数组定义在函数内部时,函数运行时需要将常量数组拷贝到堆栈,浪费了堆栈空间,还增加了函数#?CopyMemoryBytes的时间开销。所以对于数组常量建议存储于函数外部,当然这仅限于430的iar编译器,别的情况就要实际运行一下看了。
对比分析:
常量数组定义在函数内部
static void updata_lead_num(void)
{
UINT8 const Dsp_Lead[12][4] = { "V1 ","V2 ","V3 ","V4 ","V5 ","V6 ",
"I ","II ","III","aVL","aVR","aVF" };
_DINT();//关总中断
LCD_WRITE_STRING86(7,9,0,Dsp_Lead[LeadNum]);
_EINT();//开总中断
}
对应汇编
static void updata_lead_num(void)
{
updata_lead_num:
00A150 8031 0030 sub.w #0x30,SP
UINT8 const Dsp_Lead[12][4] = { "V1 ","V2 ","V3 ","V4 ","V5 ","V6 ",
"I ","II ","III","aVL","aVR","aVF" };
00A154 410C mov.w SP,R12
00A156 403E 4897 mov.w #0x4897,R14
00A15A 403D 0030 mov.w #0x30,R13
00A15E 13B0 A824 calla #?CopyMemoryBytes
_DINT();//关总中断
0