《UEFI内核导读》之ACPI编程入门 第5章:对象(Object)



固件C字营·版权所有

敬请关注微信公众号:“固件C字营”

===================================================================== 

第5章:对象(Object)

        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字营”

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值