敬请关注微信公众号:“固件C字营”
=====================================================================
ACPI/ASL使用Name ( ObjectName, Object )算子在全局ACPI名字空间(Global ACPI namespace)创建一个对象,对象名为ObjectName,该对象名是对“Object”的引用。对象由三部分组,对象(Object)定义为:Object := ObjectType FixedList VariableList,其中FixedList与VariableList是可选项。
ObjectType:用来区别对象类型,一共有0~16种类型,如Buffer,Package。
FixedList:可以被嵌套的由“对象类型”确定列表长度的固定长度的列表如:(a,, b, (q, r, s, t), d),
也可以保留“,”省略列表中的具体内容项,“省略项“会依据对象类型初始化成不同的默认值。
VariableList:可以被嵌套定义的非固定长度的列表,如:{x, y, z, aa, bb, cc }
-
创建对象(变量)
1.创建Package类型的对象
Name (\PTTX, Package () {Package () {0x43, 0x59}, Package) {0x90, 0xFF}})
2.创建整形类型对象
Name (XXXX, 0)
Name (YYYY, 1)
Name (ZZZZ, 2)
3.创建Buffer类型对象
Name (TMP1, Buffer(256) {0x00})
4.创建String类型对象
Name(_HID,"ACPI0C0A")
-
对象(变量)运算
ACPI/ASL(2.0)支持类似于C语言的各种运算算子:+、-、*、/、%、<<、>>、&、|、^、~、++、--、&&、||、~、!、+=、/=、%=等操作符,语义根C语言一致,支持2.0和1.0算子混合编程。
ZZZZ=XXXX+YYYY //加法运算,等价Add(XXXX, YYYY, ZZZZ)
ZZZZ=XXXX*YYYY //乘法运算,等价Subtract(XXXX, YYYY, ZZZZ)
-
对象类型转换。
ACPI/ASL支持两种类型转换方式,分别是“显式类型转换”和“隐式类型转换”,不同的算子类型和操作数类型,转换规则不完全相同。
固件C字营·版权所有
敬请关注微信公众号:“固件C字营”