致命错误
在源代码中触发的软件错误
Zephyr提供了几种方法,通过构建时间检查、有条件编译断言或故意调用恐慌或o操作条件来诱导致命错误条件。
运行时断言
Zephyr提供了一些宏来执行可以有条件地编译的运行时断言。它们的定义可以在包括 include/zephyr/sys/__assert.h
中找到。
通过将__ASSERT_ON
预处理器符号设置为非零值来启用断言。有两种方法:
使用CONFIG_ASSERT
和CONFIG_ASSERT_LEVEL
kconfig选项。
在构建命令行或CMakeLists.txt
中添加-D__ASSERT_ON=<level>
。
如果两者都被使用,则__ASSERT_ON
方法优先于kconfig
选项。
指定断言级别1会导致编译器发出警告,说内核包含调试类型的__ASSERT()
语句;将发出此提醒,因为最终产品中通常没有断言代码。指定断言级别2会抑制这些警告。
默认情况下,在运行Zephyr测试用例时,会启用断言,这由CONFIG_TEST
选项配置。
遇到失败断言时要做什么的策略由assert_post_action()
的实现控制。Zephyr提供了一个带有弱链接的默认实现,如果断言失败的线程在用户模式下运行,则将调用内核操作,否则将调用内核恐慌。
__ASSERT()
__ASSERT()宏可以在内核和应用程序代码中使用来执行可选的运行时