编写设备驱动程序

使用 ASSERT() 捕捉无效假设

断言是活动文档一种极有价值的形式。ASSERT(9F) 的语法如下:

void ASSERT(EXPRESSION)

如果预期为 true 的条件实际为 false,则 ASSERT() 宏会停止执行内核。ASSERT() 为程序员提供了对某段代码所做的假设进行验证的方法。

仅当定义了 DEBUG 编译符号时,才会定义 ASSERT() 宏。如果未定义 DEBUGASSERT() 宏将无效。

以下示例断言将测试特定指针值不是 NULL 的假设:

ASSERT(ptr != NULL);

如果驱动程序已使用 DEBUG 进行编译,并且执行至此时 ptr 的值为 NULL,则在控制台上会列显以下故障消息:

panic: assertion failed: ptr != NULL, file: driver.c, line: 56

注 –

由于 ASSERT(9F) 使用 DEBUG 编译符号,因此任何条件调试代码也应使用 DEBUG