ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
如果程序中有任何匯編函數,則在使用 --program_level_compile 選項時,請謹慎操作。編譯器只識別 C/C++ 源代碼,而不識別任何可能存在的匯編代碼。由于編譯器無法識別對 C/C++ 函數的匯編代碼調用和變量修改,因此 --program_level_compile 選項會優化這些 C/C++ 函數。要保留這些函數,請將 FUNC_EXT_CALLED pragma(請參閱節 5.11.14)放在對要保留的函數的任何聲明或引用之前。
在程序中使用匯編函數時可以采用的另一種方法是將 --call_assumptions=n 選項與 --program_level_compile 及 --opt_level=3 選項結合使用。有關--call_assumptions=n 選項的信息,請參閱節 3.4.1。
通常,采用明智的方式將 FUNC_EXT_CALLED pragma 與 --program_level_compile --opt_level=3 及 --call_assumptions=1 或 --call_assumptions=2 結合使用,可以獲得最佳結果。
如果您的應用程序出現以下任一情況,請使用建議的解決方案:
解決方案:使用 --program_level_compile --opt_level=3 --call_assumptions=2進行編譯,通知編譯器:外部函數不會調用 C/C++ 函數,也不會修改 C/C++ 變量。
如果僅使用 --program_level_compile --opt_level=3 選項進行編譯,編譯器會從默認優化級別 (--call_assumptions=2) 恢復到 --call_assumptions=0。編譯器使用 --call_assumptions=0 ,因為編譯器假定調用在 C/C++ 中定義的匯編語言函數可能會調用其他 C/C++ 函數或修改 C/C++ 變量。
解決方案:嘗試以下兩種解決方案,然后選擇最適合您的代碼的一種解決方案:
解決方案:將 volatile 關鍵字添加到可能被中斷修改的 C/C++ 變量中。然后,可以通過以下方式之一優化代碼:
請記住,如果不使用附加選項而使用了 --program_level_compile --opt_level=3,編譯器會刪除匯編函數調用的 C 函數。請使用 FUNC_EXT_CALLED pragma 保留這些函數。