我们正在研究一个玩具操作系统作为一个班级的作业。 我在编写内核恐慌函数时遇到了一些麻烦。包含在内联组件
它应该保存所有寄存器,调用一些类似printf的函数,然后打印保存的寄存器并暂停cpu。现在它定义为宏:
#define panic(...) \
do{ \
asm volatile("SAVE_REGISTERS %1\n\t" : "m="(_panic_context)); \
_panic_printk(&_panic_context, __VA_ARGS__); \
while(0)
_panic_context
是包含一个线程和一些更多的东西的寄存器保存一个全局变量。问题出在SAVE_REGISTERS
。它是一个在汇编头文件中定义的宏,但我不知道如何包含它。文件中简单的#include显然不起作用。我尝试过使用谷歌搜索和编写有趣和绝望的东西(比如汇编语言中的#include :-)),但没有任何帮助。你有什么想法如何解决这个问题?
我们使用GCC编译和为MIPS(在模拟器上运行:-))
编辑: SAVE_REGISTERS
与.macro SAVE_REGISTERS
定义...。它不能在C宏中,因为它在其他汇编模块中使用。 我无法制作一个.S文件,因为恐慌必须是可变的。或者至少我不能想出任何其他方式来做到这一点。
定义'SAVE_REGISTERS'究竟如何? – 2009-10-21 16:16:28