第一步:设置变量属性
uint32_t __attribute__((section("noinit_data"), zero_init)) data;
变量必须是属于ZI段的未初始化的全局变量,zero_init
即将data设置为ZI段。
第二步:设置noinit_data的section的属性
LR_IROM1 0x00000000 0x00008000 { ; load region size_region
ER_IROM1 0x00000000 0x00008000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
NOINIT_m_data 0x20000000 UNINIT {
* (noinit_data)
}
RW_IRAM1 +0 { ; RW data
.ANY (+RW +ZI)
}
}
用UNINIT
来描述NOINIT_m_data
这个section的属性,即该setcion中的变量在单片机启动阶段不会被初始化。