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
默认情况下,编译器允许函数之间的双状态交互工作。但是,编译器允许您更改支持级别以满足您的特定需求。
在双状态交互工作中,被调用函数负责处理调用函数所需的正确状态更改。调用函数负责处理间接调用函数(通过地址调用)所需的正确状态更改。因此,如果某个函数提供了需要状态改变的函数直接调用该函数(按名称调用)的能力,并提供间接调用涉及状态改变的函数的机制,那么该函数支持双状态交互工作。
如果某个函数不支持双状态交互工作,则不能被需要状态改变的函数调用,也不能间接调用支持双状态交互工作的函数。无论某个函数是否支持双状态交互工作,它都可以直接或间接调用某些函数:
鉴于支持双状态的这种定义,ARM C/C++ 编译器提供了三个级别的支持。使用表 6-8 来确定用于代码的最佳支持级别。
如果代码... | 使用这种支持级别... |
---|---|
需要少量状态更改 | 默认值 |
需要很多状态更改 | 经优化的 |
不需要状态更改并具有频繁间接调用 | 无 |
以下是有关每个支持级别的详细信息:
具有此支持级别的函数只能间接调用不需要状态更改且不支持双状态交互工作的函数。具有此支持级别的函数不提供双状态交互工作,因此需要状态更改的函数无法调用它们。
如果您不需要双状态交互工作,间接调用频繁,并且不能容忍支持双状态交互工作的间接调用所产生的额外代码大小或速度,请使用此支持级别。
当程序不需要任何状态更改时,指定不支持和默认支持之间的唯一区别是默认支持级别中的间接调用更复杂。