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