Ошибка компоновщика: «неверный адрес <value>для символа нулевой страницы <name>»! - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь заставить COSMIC компилятор распределить структуру по определенному адресу в памяти (0x5420). Я добавил следующие строки в мой код C (где CAN_TypeDef - это typedef struct):

#pragma section [mycan]
CAN_TypeDef CAN;
#pragma section []

В IDE (STVD) я создал новый раздел с именем Can, внутри которого я создал новый раздел с именем .mycan.

Creating a new segment and section

Когда я создаю код в STVD, появляется ошибка компоновщика, говорящая:

#error clnk Debug\can.lkf:1 bad address (0x5420) for zero page symbol _CAN

На изображении выше видно, что Can и Zero Page - это два разных сегмента. Что может быть причиной этой ошибки и как я могу ее решить?

1 Ответ

0 голосов
/ 10 мая 2018

Я не знаю STM8, но я думаю, что нашел его. В документации STVD я читаю:

Глобальные переменные

Когда категория установлена ​​на Общие, вы можете использовать список глобальных переменных, чтобы указать расположение по умолчанию глобальные переменные:

  • На нулевой странице: это опция по умолчанию.
  • В данных: указывает на размещение глобальных переменных в первых 64 КБ память.

Таким образом, компилятор принимает все глобальные данные, находящиеся на нулевой странице, а адреса имеют ширину восемь бит . Только компоновщик видит, что раздел .mycan не находится на нулевой странице, и вы получаете сообщение об ошибке. Я бы попробовал @near CAN_TypeDef CAN; или просто extern CAN_TypeDef CAN @5420; без создания собственного раздела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...