持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
简介
在表定义语言即TDL中,包括很多种的表达方法,如以字符串的方式,缓冲器的方式,标志,整数表达式的方法等等,这一篇文章就是讲一下分析一下怎么才能使用好字符串的方式和缓冲器的方式进行表示。
一、TDL之字符串
字符串必须总是被引号所包围。由编译器生成的实际字符串 可能是空尾的,也可能不是,这取决于ACPI规范中的表格定义。例如,常见的ACPI表头中的OEM ID和OEM表ID(如上图所示)分别固定为六个和八个字符。分别固定为六个和八个字符。它们不一定是空尾的。大多数其他字符串都是可变长度的,并由编译器自动进行空终止处理。如果一个字符串对于固定长度的字符串字段来说太长了,就会发出错误信号。字符串的长度是在每个相关ACPI表的定义中指定。
不允许在一个带引号的字符串中使用转义序列。反斜线的字符''指的是ACPI命名空间的根,即是ACPI命名空间的根。
下面代码是字符串的相关代码示例的方法:
[008] Oem Table ID : "TEMPLATE" // Fixed length
[006] Processor UID String : "\CPU0" // Variable length
二、TDL之缓冲器
当所需的二进制数据大于一个QWord,或者数据不能完全适应标准的整数宽度时,通常会使用缓冲区来处理。例子包括UUID和SLIT表定义的字节数据。
下面代码是缓冲器的相关代码示例的方法:
// SLIT entry
[032] Locality 0 : 0A 10 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 \
24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33
// DMAR entry
[002] PCI Path : 1F 07
三、完结
本章顺利完结,撒花,结束。期待下一篇文章继续分享!