Я скомпилировал свой проект с помощью компилятора gcc, используя опцию '--coverage', чтобы получить покрытие кода.
Внутри проекта я стираю большие области памяти до нуля.
С того момента, как я включил ключ --coverage, Проект больше не работает. Причина в том, что разделы gcov RAM также удаляются.
Теперь я ищу способ размещения сгенерированных разделов gcov в ОЗУ в отдельном местоположении.
Я проанализировал файл карты, но сгенерированные gcov разделы не задокументированы
Я выгрузил объектные файлы с помощью инструмента «nm» и получил символы вроде этого
201c0d80 d ___gcov0.CopyWords
Я попытался адаптировать файл компоновщика для DL компоновщика GNU, но, похоже, нет синтаксиса для определения местоположения всех символов '___gcov0' в одном сегменте.
Раздел из моего файла компоновщика
SECTIONS
{
RAM_1 :
{
*___gcov0*(.bss) // this line seems to have no effect
___RAM_start__ = . ;
*(.bss)
___RAM_end__ = . ;
}
}
Очистка системной оперативной памяти в моем проекте:
void clearRam(void) {
// Clear whole RAM
memset(&__RAM_start__, (uint8_t)0, (int32_t)&__RAM_end__ - (int32_t)&__RAM_start__);
}
Я ожидал, что было бы возможно найти ОЗУ gcov до метки RAM_start , но в макете памяти не было изменений.