Как импортировать идентификатор из автозагрузки.s (на главную. c) - PullRequest
1 голос
/ 10 апреля 2020

Я хотел бы найти таблицу постоянных значений с данными приложения (информацией об оборудовании), предпочтительно в конце таблицы векторов.

В 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?

Заранее спасибо

1 Ответ

1 голос
/ 10 апреля 2020

Набор инструментов IAR поддерживает #pragma location 1 только для фиксации данных по абсолютным адресам, заданным литеральными числами 2 или именами сегментов 3 .

С моей точки зрения, вы должны определить собственный сегмент в командном файле компоновщика 3 и найти его в соответствии с вашими требованиями.


1 Руководство пользователя компилятора IAR C / C ++ для архитектуры микроконтроллера 8051 (C8051-7) , седьмое издание: март 2017 года, стр. 372.

2 там же. , седьмое издание: март 2017 года, стр. 260.

3 там же. , седьмое издание: Март 2017 года, стр. 262.

4 Справочное руководство по средствам компоновки IAR и библиотекам (XLINK-5001) , апрель 2010 г., стр. 21.

...