![](/img/trans.png)
[英]Force CMake to use C++ compiler for C files with Visual Studio
[英]Force the Compiler Not to Link to Certain Object Files
我目前正在研究强制 rvct 编译器不链接特定翻译单元并假装它已链接它的可能性。
我们的产品在空间限制上运行得非常紧张,并且在控制空间的同时无法将一些单元测试与其集成。
基本上,我们在运行时可以利用的内存足以存储我们的单元测试,但是我们没有足够的 rom 空间来保存它们。
我们有办法在分散文件中准确控制我们代码的哪个内存段进入我们的设备,所以我们正在考虑定义单元测试代码将位于哪个区域并以某种方式强制编译器不链接在编译期间的特定代码中。
类似于以下内容:
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
。
这可能吗?
或者,如果没有,有人可以指出我寻找解决方案的正确方向,该解决方案以某种方式满足我们的空间限制并能够在运行时加载单元测试。
谢谢,
您应该能够使用分散文件将所有单元测试功能放入单独的加载区域。 当您链接图像时,您将获得一个 AXF,但是当您将其转换为二进制文件以加载到内存中时,您应该获得两个文件,每个区域一个。
您还可以在单元测试映像中有一些标记,您的 ROM 映像可以检查这些标记以验证二进制文件是否已加载。 此检查将替换您代码中的 hadTestInMemory 检查。 同样,您应该能够使用分散文件在第二个二进制文件的开头放置一些特定的 RO 数据。
随着你的进步,我可能会提供更多细节方面的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.