Заставить компилятор не связываться с некоторыми объектными файлами

В настоящее время я изучаю возможность заставить компилятор 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 в начало второго двоичного файла, используя ваш файл разброса.

Я, вероятно, могу помочь с некоторыми более подробными сведениями по мере вашего продвижения.

Другие вопросы по тегам