如何改进IAR Embedded Workbench for ARM v7.30中的反汇编视图

时间:2015-06-02 21:13:34

标签: assembly arm iar

我正在为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和调试器手册也没什么用。

我正在咆哮着正确的树?

2 个答案:

答案 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