我正在为ARM v7.30使用IAR嵌入式工作台,并使用Jlink JTAG调试器连接到ARM开发板。我在Assembler中编写,而不是C.虽然项目的IAR调试器中的大部分反汇编视图都是正确的,但其中一些不是:
; ORIGINAL SOURCE CODE
BL setup_starting_address
TSTS R4, #ERR_ADDRESS_SETUP
BNE error_while_reading
send_command
MOV R3, #COMMAND_READ
BL CF_send_command
TSTS R4, #ERR_COMMAND
BNE error_while_reading
wait_for_flag_to_be_set
BL get_status
TSTS R4, #STATUS_BIT3
BEQ wait_for_flag_to_be_set
呈现为:
;DISASSEMBLY VIEW
0x204: 0xf7ff 0xffc4 BL setup_starting_address ; 0x190
EPIDMATXCNT:
0x208: 0xf414 0x2f00 TST.W R4, #524288 ; 0x80000
0x20c: 0xd113 BNE.N error_while_reading ; 0x236
send_command:
0x20e: 0xf04f DC16 61519 ; 'Oð'
EPIIM:
0x210: 0x0320 LSLS R0, R4, #12
0x212: 0xf7ff DC16 63487 ; 'ÿ÷'
EPIRIS:
0x214: 0xff83 0xf414 VMOV.I32 D15,#0xb40000
EPIMIS:
0x218: 0x3f00 SUBS R7, #0
0x21a: 0xd10c BNE.N error_while_reading ; 0x236
EPIEISC:
wait_for_flag_to_be_set:
0x21c: 0xf7ff 0xff4c BL get_status ; 0xb8
0x220: 0xf014 0x0f08 TST.W R4, #8
0x224: 0xd0fa BEQ.N wait_for_flag_to_be_set ; 0x21c
这个例子是典型的问题。在显示的代码中,调试器窗口是正确的,除了中间的这个块:
MOV R3, #COMMAND_READ
BL CF_send_command
TSTS R4, #ERR_COMMAND
它呈现为:
DC16 61519
LSLS R0, R4, #12
DC16 63487
VMOV.I32 D15,#0xb40000
SUBS R7, #0
我想解决这个问题,甚至更好,因为软件包可以跟踪源视图中的单步进度,就像我在C演示中看到的那样。我假设我在IAR EW设置中遗漏了一些东西?如何更改设置以帮助调试器更好地与源代码同步,从而提供更清晰的解释?
我一直在玩的设置如下: 在PROJECT> OPTIONS> ASSEMBLER> OUTPUT'生成调试信息'被勾选。 我一直在寻找它在构建期间创建的文件,看看我是否可以导出有用的额外信息。 在PROJECT> OPTIONS> DEBUGGER> IMAGES中有“下载额外图像”的选项,但有关这些图片的信息似乎很稀疏,并且尝试使用各种文件无效。
搜索IDE和调试器手册也没什么用。
我正在咆哮着正确的树?
答案 0 :(得分:1)
我在IAR 7.20.5.7624中遇到了类似的问题。
解决了选择"在当前处理器模式下反汇编"在反汇编菜单项下。
我认为这取决于CPU的当前模式,如果是ARM或THUMB或THUMB2模式。
BR,
Catosh。
答案 1 :(得分:1)
这是问题的解决方案。谢谢大家的意见,因为它让我能够缩小问题范围,并通过专注的查询回到IAR技术支持,正是他们提出了答案。下面显示了一个简单的设置/程序,其中包含IAR ARM Embedded工作台v7.30中汇编程序的一些基础知识,它们正确地单步执行。之前没有出现的关键是:
SECTION .text:CODE(2)
如果没有它,EW将不会在源代码中单步执行,只有反汇编视图。添加它对它有很大的不同。干杯@Jester和Ross Ridge。RAM_START EQU 0x20000000
RAM_SIZE EQU 0x00020000
RAM_TOP EQU RAM_START+RAM_SIZE
PUBLIC __iar_program_start
SECTION .noinit :DATA(2)
SRAM_data_buffer DS8 16
SECTION .intvec : CODE(2)
DC32 RAM_TOP ; Stack pointer start address top of SRAM
DC32 __iar_program_start ;jump to code start
DC32 NMI_Vector
/*Rest of the vectors in here*/
SECTION .text : CODE (2)
THUMB
__iar_program_start:
/*Start of user code*/
code_end B code_end
DATA
ALIGNROM 2
Constant DC8 1,2,'text'
END