强制编译器不链接到某些对象文件

时间:2012-11-07 14:58:09

标签: c embedded arm realview

我目前正在调查是否有可能强制rvct编译器不要在特定的翻译单元中进行链接,只是假装已将其链接起来。

我们的产品在空间限制方面运行非常严格,无法将一些单元测试与其集成,同时保持空间受控。

基本上,我们在运行时可以利用的内存足以存储我们的单元测试,但是我们没有足够的空间来容纳它们。

我们有办法在散点文件中精确控制代码的哪个内存段进入我们的设备,因此我们正在考虑定义单元测试代码所在的区域以及某种方式强制编译器在编译期间不要在该特定代码中链接。

如下所示:

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...
}

然后在运行时,我们将单元测试二进制文件上传到我们在散点文件中定义的指定内存区域,并将hasTestInMemory翻转到true

这可能吗?

如果没有,有人可以指出我正确的方向寻找一种解决方案,以某种方式满足我们的空间约束并能够在运行时加载单元测试。

谢谢,

1 个答案:

答案 0 :(得分:3)

您应该能够使用分散文件将所有单元测试功能放入单独的加载区域。当您链接图像时,您将获得一个AXF,但当您将其转换为二进制文件以加载到内存中时,您应该获得两个文件,每个区域一个。

您还可以在单​​元测试图像中添加一些标记,ROM映像可以检查该标记以验证二进制文件是否已加载。此检查将替换您的代码中的hadTestInMemory检查。您应该能够使用分散文件在第二个二进制文件的开头放置一些特定的RO数据。

随着您的进步,我可能会提供更多详细信息。