Использование символа MACRO в IAR Embbeded Workbench для MSP430 - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь экспортировать символ макроса за пределы модуля, но компилятор выдает: «Ошибка [34]: не может быть переопределена»

Я разбиваю программу, написанную на ассемблере IARв нескольких модулях, как это было написано как уникальный большой кусок кода.Я сталкиваюсь с несколькими MACRO, которые должны использоваться как быстрая встроенная функция, и я пытаюсь поместить их в связанные модули и импортировать их как символы там, где они нужны.Проблема возникает, когда я только добавляю имя / символ макроса к общедоступным тем модулям, в которых они размещены: даже без импорта компилятор завершает работу с сообщением «Ошибка [34]: не может быть переопределена».Если возможно, я бы предпочел оставить их в соответствующем модуле.Могу ли я достичь этого?Или я неправильно понял?

MODULE      MY_MODULE

PUBLIC      GET_VALUE_XYZ

#include "msp430.h"
#include "defines.s43"

RSEG        CODE

GET_VALUE_XYZ   MACRO   parameter_1
        <...cut...>
        ENDM

    END 

1 Ответ

0 голосов
/ 19 февраля 2019

Макросы не являются функциями в обычном смысле, они предоставляют сокращенные обозначения для общих последовательностей команд (что-то вроде макросов #define в C).Таким образом, на макросы можно ссылаться только в модулях, где определение является видимым.Невозможно экспортировать их в другие модули с помощью ключевого слова PUBLIC.

Можно отделить определения макросов от остальной части кода и поместить их в отдельные файлы, но затем вам необходимо включить этифайлы с использованием директивы #include.

...