19.6.45. External(声明外部对象)
语法 :
External ( ObjectName, ObjectType, ReturnType, ParameterTypes )
参数
ObjectName 是一个 NameString。
ObjectType 是一个可选的 ObjectTypeKeyword(例如 IntObj、PkgObj 等)。如果未指定,则假定类型为 “UnknownObj”。
ReturnType 是可选的。如果指定的 ObjectType 是 MethodObj,则此参数指定该方法返回的对象类型或多种类型。如果该方法不返回对象,则不指定任何内容或指定 UnknownObj。要指定单一返回类型,只需使用 ObjectTypeKeyword。要指定多个可能的返回类型,请将以逗号分隔的 ObjectTypeKeywords 用花括号括起来。例如:{IntObj, BuffObj}。
ParameterTypes 是可选的。如果指定的 ObjectType 是 MethodObj,则此参数同时指定方法参数的数量和类型。它是一个以逗号分隔的可变长度列表,描述每个方法参数的预期对象类型,并用花括号括起来。对于每个参数,其参数类型由一个 ObjectTypeKeyword 或一个用花括号括起来的、以逗号分隔的 ObjectTypeKeywords 子列表组成。参数总数不能超过七个。说明
External 指令通知 ASL 编译器,该对象在此表外部声明,因此不会因对象未声明而产生错误。ASL 编译器将在命名空间中的指定位置创建该外部对象(如果指定了对象的完整路径),或者在 External 项的当前作用域内创建该对象。
对于外部控制方法,ASL 编译器可以发出一个 External AML 操作码,其中包含方法名称和所需参数的数量。AML 反汇编器可使用这些信息将 AML 正确反汇编为正确的 ASL 代码。
External 在次级 SSDT 中尤其有用,因为所需的作用域和对象是在主 DSDT 中声明的。
示例
本示例展示了在 SSDT 中结合 Scope 使用 External:
DefinitionBlock ("ssdt.aml", "SSDT", 2, "X", "Y", 0x00000001)
{
External (\_SB.PCI0, DeviceObj)
Scope (\_SB.PCI0)
{
}
}