主题中讨论的其他器件: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 生成的汇编指令相同)