我使用gcc编译器使用选项'--coverage'编译了Project,以获取代码覆盖率。
在项目内部,我将大面积的内存擦除为零。
从启用--coverage开关开始,项目不再起作用。原因似乎是,gcov RAM部分也被删除了。
现在,我正在寻找一种将RAM中生成的gcov节定位到单独位置的方法。
我分析了地图文件,但未记录gcov生成的部分
我使用'nm'工具转储了目标文件,并得到了这样的符号
201c0d80 d ___gcov0.CopyWords
我试图为GNU链接器DL修改链接器文件,但似乎没有语法将所有'___gcov0'符号定位到一个Segment。
链接文件中的部分
SECTIONS
{
RAM_1 :
{
*___gcov0*(.bss) // this line seems to have no effect
___RAM_start__ = . ;
*(.bss)
___RAM_end__ = . ;
}
}
在我的项目中清除系统RAM:
void clearRam(void) {
// Clear whole RAM
memset(&__RAM_start__, (uint8_t)0, (int32_t)&__RAM_end__ - (int32_t)&__RAM_start__);
}
我希望可以在标签 RAM_start 之前找到gcov RAM,但是内存布局没有变化。