ARM7 TDMI未定义指令异常手动生成

时间:2012-08-07 18:33:54

标签: exception exception-handling arm opcode

我正在尝试测试在ARM7 TDMI处理器上运行的一些异常处理代码。我想手动创建一个指令操作码,它将生成“未定义指令”异常。到目前为止,我已经这样做了:

void createUndefinedException()
{    
    static const int instr = 0x26889912; // bad opcode
    ((void(*)(void))instr)();
}

我到达了上面的操作码是因为我今天在网上发现了reference page,其中讨论了最底层的未定义指令操作码。

上面的代码生成了预取中止异常,而不是未定义的指令异常。

任何人都知道如何轻松创建这个?

我只想验证我对此异常的处理是否正常。

2 个答案:

答案 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();