主题中讨论的其他器件:HALCOGEN
工具与软件:
您好!
我将 TMS570LC43 Launchpad 与内置的 XDS110调试器和(使用 CCS 调试.elf)配合使用。 我在早期的初始化代码中无法使用调试器。 它不是由 halcogen 生成的、但它非常相似。
例如、以下是开头部分:
ldr pc, =z_arm_reset /* offset 0 */
ldr pc, =z_arm_undef_instruction /* undef instruction offset 4 */
ldr pc, =z_arm_svc /* svc offset 8 */
ldr pc, =z_arm_prefetch_abort /* prefetch abort offset 0xc */
ldr pc, =z_arm_data_abort /* data abort offset 0x10 */
...
...
...
z_arm_reset:
mov r0, #0
mov r1, #0
mov r2, #0
mov r3, #0
mov r4, #0
mov r5, #0
mov r6, #0
mov r7, #0
mov r8, #0
mov r9, #0
mov r10, #0
mov r11, #0
mov r12, #0
mov r13, #0
mov r14, #0
mrs r0, cpsr
msr spsr_cxsf, r0
/* FIQ mode registers */
cps #MODE_FIQ
mov r8, #0 /* r8_fiq */
mov r9, #0 /* r9_fiq */
mov r10, #0 /* r10_fiq */
mov r11, #0 /* r11_fiq */
mov r12, #0 /* r12_fiq */
mov r13, #0 /* r13_fiq */
mov r14, #0 /* r14_fiq */
mrs r0, cpsr
msr spsr_cxsf, r0 /* spsr_fiq */
/* IRQ mode registers */
cps #MODE_IRQ
mov r13, #0 /* r13_irq */
mov r14, #0 /* r14_irq */
mrs r0, cpsr
msr spsr_cxsf, r0 /* spsr_irq */
/* ABT mode registers */
cps #MODE_ABT
mov r13, #0 /* r13_abt */
mov r14, #0 /* r14_abt */
mrs r0, cpsr
msr spsr_cxsf, r0 /* spsr_abt */
...
...
在上面的代码中、我将单步执行汇编、一切看起来都正常、直到我到达"cps #mode_abt"、此时我似乎跳转到了异常向量、偏移量= 0x04、因此看起来像是未定义指令异常、尽管它不是未定义的指令。
如果在此时查看 DFSR 和 IFSR、会看到以下情况:
IFSR = 0x00000000 IFAR = 0x00000000 DFSR = 0x00000001 DFAR = 0x18F09FE5 It seems like DFSR was already set to 1 even before reaching this address. Also, the value in DFAR seems to be the memory contents of the first few dwords in the code, the vector table: 0000 18f09fe5 18f09fe5 18f09fe5 18f09fe5 ................ 0010 18f09fe5 00f020e3 14f09fe5 14f09fe5 ...... ......... 0020 00000148 00000098 000002e8 000000dc ...H............ 0030 0000010c 00001429 0000007d .......)...}
在调试模式下使用 CSP 指令没有任何限制。 我在尝试单步执行此代码时是否遗漏了一些内容、是否无法在早期初始化期间使用调试器?
(这个同样的问题有更多的变体、但这也许更容易讨论、因为它基本上与 halcogen 生成的汇编指令相同)