首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_iar_program_start在IAR中用于ARM的程序入口标签是什么?

_iar_program_start在IAR中用于ARM的程序入口标签是什么?
EN

Stack Overflow用户
提问于 2014-12-22 08:29:49
回答 1查看 5.9K关注 0票数 2

我正在用IDE (v6.50)在ARM皮层M3处理器上开发一个固件。我想知道用于程序条目的标签是否有用。我来解释。

在ARM平台上,当芯片复位时,PC会装载向量表的一个条目(在我的例子中是第二个条目)。因此,程序将从这个进位,在权力时间和每一个下一次重置。因此,开始地址取决于在这个条目中声明了什么。但是在IAR选项中,可以将标签定义为程序条目。默认情况下,程序条目是__iar_program_start。这是有可能的覆盖它。

但是如果PC在重置时加载了向量表的第二个条目,那么IAR入口点是用来做什么的?

我想知道这个问题,因为我试图在我现有的固件中集成CMSIS层,入口点不再是__iar_program_start,而是Reset_Handler。在IAR选项中,我首先尝试用"Reset_Handler“覆盖默认的入口点Reset_Handler,但是我有一个ielftool错误("ielftool错误:字符串'__vector_table‘没有在string表中找到")。解决方案是让默认的程序入口点在IAR链接器选项中,但是我不明白为什么它不是Reset_Handler标签。

下面是我的示例启动代码的一部分(它正在运行):

代码语言:javascript
复制
        MODULE  ?cstartup

        ;; Forward declaration of sections.
        SECTION CSTACK:DATA:NOROOT(3)
        SECTION PSTACK:DATA:NOROOT(3)

        SECTION .intvec:CODE:NOROOT(2)

        EXTERN  __cmain     
        EXTERN  SystemInit
        EXTERN  vPortSVCHandler                                 ; SVCall_Handler is renamed here
        EXTERN  xPortPendSVHandler                              ; PendsSV_Handler is renamed here
        EXTERN  xPortSysTickHandler                             ; SysTick_Handler is renamed here

        PUBLIC  __vector_table
        PUBLIC  __vector_table_0x1c
        PUBLIC  __Vectors
        PUBLIC  __Vectors_End
        PUBLIC  __Vectors_Size

        DATA

    __vector_table:
        DCD     sfe(CSTACK)                 ; Top of Stack
        DCD     Reset_Handler               ; Reset Handler

        DCD     NMI_Handler                 ; NMI Handler
        DCD     HardFault_Handler           ; Hard Fault Handler
        DCD     MemManage_Handler           ; MPU Fault Handler
        DCD     BusFault_Handler            ; Bus Fault Handler
        DCD     UsageFault_Handler          ; Usage Fault Handler
    __vector_table_0x1c:
            DCD     0                           ; Reserved
            DCD     0                           ; Reserved
            DCD     0                           ; Reserved
            DCD     0                           ; Reserved
            DCD     vPortSVCHandler             ; SVCall Handler
            DCD     DebugMon_Handler            ; Debug Monitor Handler
            DCD     0                           ; Reserved
            DCD     xPortPendSVHandler          ; PendSV Handler
            DCD     xPortSysTickHandler         ; SysTick Handler

        ; External Interrupts
        ...

__Vectors_End

__Vectors       EQU   __vector_table
__Vectors_Size  EQU   __Vectors_End - __Vectors

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;

       THUMB
       PUBWEAK Reset_Handler
       SECTION .text:CODE:REORDER(2)

Reset_Handler
        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =__iar_program_start
        BX      R0

        ... Other handlers....

__iar_program_start:    
        ;Process stack initialization 
        MRS     r0, CONTROL       ; Get PSR
        ORR     r0,r0,#0x00000002 ; Use Process Stack instead of Main Stack
        MSR     CONTROL, r0       ; 
        ISB                       ; flush pipeline
        LDR     sp, =SFE(PSTACK)  ; init Process Stack address

        ;Get back with Main Stack
        MRS     r0, CONTROL
        AND     r0,r0,#0xFFFFFFFD
        MSR     CONTROL, r0
        ISB

        BL  __cmain

        END
EN

回答 1

Stack Overflow用户

发布于 2017-12-21 17:39:56

这是旧的但无论如何我都会回答的。

如果你看看startup_.s,你应该会看到这样的东西

代码语言:javascript
复制
Reset_Handler
    CPSID   I               ; Mask interrupts
    LDR     R0, =0xE000ED08
    LDR     R1, =__vector_table
    STR     R1, [R0]
    LDR     R2, [R1]
    MSR     MSP, R2
    LDR     R0, =SystemInit
    BLX     R0
    CPSIE   I               ; Unmask interrupts
    LDR     R0, =__iar_program_start
    BX      R0

如您所见,Reset_Handler分支到__iar_program_start

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27599051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档