![](/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.