我正在尝试测试在ARM7 TDMI处理器上运行的一些异常处理代码。我想手动创建一个指令操作码,它将生成“未定义指令”异常。到目前为止,我已经这样做了:
void createUndefinedException()
{
static const int instr = 0x26889912; // bad opcode
((void(*)(void))instr)();
}
我到达了上面的操作码是因为我今天在网上发现了reference page,其中讨论了最底层的未定义指令操作码。
上面的代码生成了预取中止异常,而不是未定义的指令异常。
任何人都知道如何轻松创建这个?
我只想验证我对此异常的处理是否正常。
答案 0 :(得分:1)
创建一个asm文件
.globl test_function
test_function:
.word 0x26889912
bx lr
汇编
arm-none-linux-gnueabi-as fun.s -o fun.o
从您的C代码中调用它
extern void test_function ( void );
...
test_function();
然后将其添加到您要链接的对象列表
arm-none-linux-gnueabi-gcc myprogram.c fun.o -o myprogram
并运行它。
答案 1 :(得分:0)
您需要使用int:
的地址创建一个函数typedef void (*Exception)(void)
static unsigned long illegalOpcode=0x26889912;
Exception e=(Exception)&illegalOpcode;
e();