如何从 startup.s 导入标识符(到 main.c)

How to import identifier from startup.s (to main.c)

我想用应用程序数据(设备信息)定位一个 table 常量值,最好在向量 table 的末尾。

startup.s 中,我执行以下操作:

    MODULE  ?cstartup

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

    SECTION .intvec:CODE:NOROOT(2)

    EXTERN  __iar_program_start
    EXTERN  SystemInit        
    PUBLIC  __vector_table

    PUBLIC  _InfoEqData

    DATA
    __vector_table

    DCD     sfe(CSTACK)
    DCD     Reset_Handler             ; Reset Handler

    /* ............... */

    DCD     LCD_IRQHandler                 ; LCD
    DCD     USB_IRQHandler                 ; USB
    __vector_table_end

    _InfoEqData     EQU     __vector_table_end

main.c 中,我执行以下操作:

#pragma location = _InfoEqData
const EqIdentify_t  eqIdentify = { ... }

当我编译代码时显示以下(预期)错误

Error[Pe020]: identifier "_InfoEqData" is undefined ... \tst_vBus_main.cpp 25

如何告诉编译器从 startup.s 中找到该标识符?

提前致谢

IAR 工具链仅支持 #pragma location1 来修复由文字数字 2 或段名称给出的绝对地址处的数据3.

在我看来,你应该在链接器命令文件中定义一个自己的段3,然后根据你的要求定位。


1 IAR C/C++ Compiler User Guide for the 8051Microcontroller Architecture (C8051-7),第七版:2017 年 3 月,第 372 页。

2 ibid.,第七版:2017 年 3 月,第 260 页。

3 ibid.,第七版:2017 年 3 月,第 262 页。

4 IAR Linker and Library Tools Reference Guide (XLINK-5001),2010 年 4 月,第 21 页。