19.6.10. Buffer(声明缓冲区对象)
语法 :
Buffer (BufferSize) {Initializer} => Buffer
参数
声明一个可选大小为 BufferSize 的 Buffer,以及一个可选初始值 Initializer。Initializer 必须是 ByteList 或 String。
说明
可选参数 BufferSize 指定缓冲区的大小,而缓冲区的可选初始值通过 Initializer 指定。初始值可以是 ASCII 字符串,也可以是由逗号分隔的字节值列表。字符串会自动以单个零字节进行空终止。
BufferSize 与 Initializer 之间的关系由下面的规则总结。
在典型情况下,BufferSize 与 Initializer 的长度相同:
Name (BUF0, Buffer(4) {0x01,0x02,0x03,0x04}) // Length = 4
如果未指定 BufferSize,则使用 Initializer 的长度作为缓冲区大小:
Name (BUF1, Buffer() {0,1,2,3,4,5}) // Length = 6
Name (BUF2, Buffer() {"abcde"}) // Length = 6
如果 BufferSize 大于 Initializer 的长度,则使用 BufferSize 作为最终缓冲区大小。在运行时,AML 解释器会自动向 Initializer 填充零以匹配 BufferSize:
Name (BUF3, Buffer(1024) {4,5,6,7,8}) // Length = 1024
Name (BUF4, Buffer(1024) {"abcde"}) // Length = 1024
如果 BufferSize 小于 Initializer 的长度,则使用 Initializer 的长度作为缓冲区大小:
Name (BUF5, Buffer(1) {5,4,3,2,1}) // Length = 5
如果未指定 Initializer,则 AML 解释器会创建一个内容全为零的缓冲区,其长度与 BufferSize 匹配:
Name (BUF6, Buffer(32} {}) // Length = 32
如果既未指定 BufferSize 也未指定 Initializer,则会创建一个零长度的缓冲区:
Name (BUF7, Buffer() {}) // Length = 0