1

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

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

我之所以看到上面的操作码,是因为我今天在网上找到了一个参考页面,该页面在最底部讨论了未定义的指令操作码。

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

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

我只是想验证我对这个异常的处理是否能够正常工作。

4

2 回答 2

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

并运行它。

于 2012-08-07T18:51:27.383 回答
0

您需要根据 int 的地址创建一个函数:

typedef void (*Exception)(void)
static unsigned long illegalOpcode=0x26889912;
Exception e=(Exception)&illegalOpcode;
e();
于 2014-09-05T20:14:58.333 回答