工具/软件:TI C/C++编译器
您好!
我们正在尝试在 被零除时生成未定义指令异常。
以下是为此执行的步骤。
volatile uint16 GucNullcheck = 10;
Volatile uint16 LucZeroDivisor = 0;
1>设置 SCTLR 19位 DZ
var (uint32、OS_VAR_cleared) LddCurrentTick=0;
asm volatile ("MRC P15、0、%Q0、C1、C0、 0":"=r"(LddCurrentTick);/* cntct */
LddCurrentTick = LddCurrentTick| 0x80000;
asm volatile ("mcr p15、0、%0、c1、c0、 0":"r"(LddCurrentTick);
2>GucNullcheck = GucNullcheck/LucZerDivisor;
根据 doc、它说它在 SDIV 和 UDIV 指令上生成异常、但它不应在第二条指令执行后生成
以下是供参考的汇编代码
161 GucNullcheck = GucNullcheck/LucZerDivisor;
403057d0:F645432C movw R3、#0x5c2c
403057d4:F2C40330 movt R3、#0x4030
403057d8:881B ldrh R3、[R3]
403057da:B29A uxth R2、R3
403057dc:887B ldrh R3、[r7、#2]
403057de:B29B uxth R3、R3
403057e0:FBB2F3F3 Udiv R3、R2、R3
403057e4:B29A uxth R2、R3
403057e6:F645432C movw R3、#0x5c2c
403057ea:F2C40330 movt R3、#0x4030
403057ee:801A strh R2、[R3]
请建议生成未定义异常的错过场景。
谢谢、
Harshalkumar Shinde