19.6.55. Function(声明控制方法)
语法:
Function ( FunctionName, ReturnType, ParameterTypes ) {TermList}
参数
ReturnType 是可选的,用于指定该方法返回对象的类型。如果该方法不返回对象,则不指定任何内容,或者指定 UnknownObj。要指定单一返回类型,只需使用 ObjectTypeKeyword(例如 IntObj、PkgObj 等)。要指定多个可能的返回类型,请将以逗号分隔的 ObjectTypeKeyword 用花括号括起来。例如:
{IntObj, BuffObj}.
ParameterTypes 是可选的,用于指定方法参数的数量和类型。它是一个以逗号分隔的可变长度列表,列出每个方法参数所期望的对象类型,或多个对象类型,并用大括号括起来。对于每个参数,参数类型由一个 ObjectTypeKeyword 或一个以逗号分隔并用大括号括起来的 ObjectTypeKeywords 子列表组成。参数总数不能超过七个。
说明
Function 声明一个具名包,其中包含一系列共同表示一个控制方法的项。控制方法是一个可被调用以执行计算的过程。Function 打开一个名称作用域。
系统软件通过按顺序执行包中的项来执行控制方法。有关方法执行的更多信息,请参见第 5.5.2 节。
在创建名称期间使用的当前命名空间位置会被调整为命名空间树上的当前位置。在此作用域内创建的任何名称都位于此包名称的“下方”。当前命名空间位置被赋给该方法包,并且在执行该包的控制方法期间发生的所有命名空间引用都相对于该位置。
Function 等同于指定了 NotSerialized 的 Method。因此,函数不应创建任何具名对象,因为可能重新进入该函数的第二个线程如果尝试两次创建同一个具名对象,将导致致命错误。
注意
兼容性说明: ACPI 3.0 新增
示例
以下 ASL 示例代码块展示了使用 Function 定义控制方法:
Function (EXAM, IntObj, {StrObj, {IntObj, StrObj}})
{
Name (Temp,"")
Store (Arg0, Temp) // could have used Arg1
Return (SizeOf (Concatenate (Arg1, Temp)))
}
此声明等同于:
Method (EXAM, 2, NotSerialized, 0, IntObj, {StrObj, {IntObj, StrObj}})
{
...
}