注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。

本小节实现了一个ASSERT宏,主要用于内核代码中的一些判断和调试。

主要内容

ASSERT宏类似于标准C库中assert()宏,如下:

void assert(int expression);

标准C库的assert()宏的功能为:当expression条件不成立时,assert()在标准错误stderr上显示错误信息,同时中止当前的程序执行
我们在此课时中实现的功能显然不同,因为实现的ASSERT()宏用于操作系统内核,还没有标准错误输出stderr,也没有办法中止程序执行。因此,主要实现区别在于,我们这里的错误信息通过log_printf()输出到串口,同时死机。
另外,在视频中还展示了在GCC编译参数中添加预定义的宏的方法,具体为-D宏名。这个功能,相当于在所有文件中添加了一句#define 宏名 ,然后我们可以在文件中使用类似如下的使用方法:

ifdef 宏名

  1. printf("define TEST!!\n");

else

  1. printf("not define TEST!!\n");

endif

当编译时,由于已经定义了宏名,所以最终生成的代码中,只有 printf(“define TEST!!\n”)语句加入编译。

参考资料