Заставить компилятор не связываться с некоторыми объектными файлами
В настоящее время я изучаю возможность заставить компилятор rvct не ссылаться в определенных единицах перевода и просто притворяться, что он связал его.
Наш продукт работает очень жестко из-за нехватки места и не может интегрировать в него некоторые модульные тесты, сохраняя пространство под контролем.
По сути, память, которую мы можем использовать во время выполнения, более чем достаточна для хранения наших модульных тестов, но у нас недостаточно места для их хранения.
У нас есть средства, позволяющие точно контролировать, какой сегмент памяти нашего кода помещается на наше устройство в scatter-файле, поэтому мы думаем о том, в какой области будут расположены коды модульного теста, и каким-то образом заставим компилятор не связывать в этом конкретном коде во время компиляции.
Что-то вроде следующего:
Result UnitTestEntryPoint (UnitTest suite) {
if (hasTestInMemory) {
switch (suite) {
case EncrpytionTest:
return EncrptyUnitTest();
// more tests.
}
}
}
// Actual Tests, can we not link this code, but just pretend we link to them?
Result EncrpyUnitTest (void) {
// Do stuff...
}
Затем во время выполнения мы загрузим двоичные файлы модульного теста в указанную область памяти, которую мы определили в scatter-файле, и перевернем hasTestInMemory
в true
,
Это возможно?
Или, если нет, может кто-то указать мне правильное направление поиска решения, которое каким-то образом отвечает нашему ограничению пространства и способно загружать модульные тесты во время выполнения.
Спасибо,
1 ответ
Вы должны быть в состоянии использовать свой scatter-файл, чтобы поместить все функции модульного тестирования в отдельную область загрузки. Когда вы связываете свое изображение, вы получаете один AXF, но когда вы конвертируете его в двоичный файл для загрузки в память, вы должны получить два файла, по одному для каждого региона.
У вас также может быть маркер в образе модульного теста, который ваш образ ПЗУ может проверить, чтобы убедиться, что двоичный файл загружен. Эта проверка заменит вашу проверку hadTestInMemory в вашем коде. Опять же, вы должны быть в состоянии поместить некоторые конкретные данные RO в начало второго двоичного файла, используя ваш файл разброса.
Я, вероятно, могу помочь с некоторыми более подробными сведениями по мере вашего продвижения.