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
默認情況下,編譯器允許函數(shù)之間的雙狀態(tài)交互工作。但是,編譯器允許您更改支持級別以滿足您的特定需求。
在雙狀態(tài)交互工作中,被調(diào)用函數(shù)負責處理調(diào)用函數(shù)所需的正確狀態(tài)更改。調(diào)用函數(shù)負責處理間接調(diào)用函數(shù)(通過地址調(diào)用)所需的正確狀態(tài)更改。因此,如果某個函數(shù)提供了需要狀態(tài)改變的函數(shù)直接調(diào)用該函數(shù)(按名稱調(diào)用)的能力,并提供間接調(diào)用涉及狀態(tài)改變的函數(shù)的機制,那么該函數(shù)支持雙狀態(tài)交互工作。
如果某個函數(shù)不支持雙狀態(tài)交互工作,則不能被需要狀態(tài)改變的函數(shù)調(diào)用,也不能間接調(diào)用支持雙狀態(tài)交互工作的函數(shù)。無論某個函數(shù)是否支持雙狀態(tài)交互工作,它都可以直接或間接調(diào)用某些函數(shù):
鑒于支持雙狀態(tài)的這種定義,ARM C/C++ 編譯器提供了三個級別的支持。使用表 6-8 來確定用于代碼的最佳支持級別。
| 如果代碼... | 使用這種支持級別... |
|---|---|
| 需要少量狀態(tài)更改 | 默認值 |
| 需要很多狀態(tài)更改 | 經(jīng)優(yōu)化的 |
| 不需要狀態(tài)更改并具有頻繁間接調(diào)用 | 無 |
以下是有關(guān)每個支持級別的詳細信息:
具有此支持級別的函數(shù)只能間接調(diào)用不需要狀態(tài)更改且不支持雙狀態(tài)交互工作的函數(shù)。具有此支持級別的函數(shù)不提供雙狀態(tài)交互工作,因此需要狀態(tài)更改的函數(shù)無法調(diào)用它們。
如果您不需要雙狀態(tài)交互工作,間接調(diào)用頻繁,并且不能容忍支持雙狀態(tài)交互工作的間接調(diào)用所產(chǎn)生的額外代碼大小或速度,請使用此支持級別。
當程序不需要任何狀態(tài)更改時,指定不支持和默認支持之間的唯一區(qū)別是默認支持級別中的間接調(diào)用更復雜。