Перейти к содержанию
    

IAR + PicoRV32 выравнивание кода

Коллеги, нужна ваша помощь.

Пишу код под PicoRV32 и столкнулся со следующей проблемой.

Если компилировать проект под ядро RV32IM, то все работает.

Если включить RV32IMC (compressed instruction set), то при выполнении программа падает из-за того, что процессору требуется код выравненный по 4 байтам, а IAR выравнивает по 2 байтам.

Можно ли настроить IAR так чтобы он выравнивал все инструкции по 4 байтам?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ALIGHNROM 2 ?

Изменено пользователем Obam
степенью двойки обшибся

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, Zeal0t said:

есть #pragma pack

но это больше относится к данным

Это только к данным.

18 hours ago, Obam said:

ALIGHNROM 2 ?

Линкер ругается:

Error[Li005]: no definition for "ALIGHNROM 2" [referenced from <internal module>]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Виноват:
во-первЫх, ALIGN;
во-вторых, или ALIGNRAM, а ALIGNROM нету как у аэрэма :-(

Секцию с кодом в файле конфигурации линкера (.icf) назначить с требуемым выравниванием (with alignment).
А команды-то сами 2х-байтные? Эт тогда между командами дырки (по 2 байта) будут?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Команды 2 или 4 байта в зависимости от типа команды.

Можно пример *.icf для линкера?

Мне нужно чтобы линкер выравнивал весь код. И startup и остальную программу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Документ DRISCV-2, т.е. IAR С/С++ Development Guide, стр. 80, а вторая часть со стр. 373 - must read.
(черти иаровские для всех архитектур одно и то же делают ;-) )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прочитал, но так и не понял, как прописать выравнивание для startup кода :(

Для RAM понятно.

Там выравнивание задается при объявлении области памяти через define.

А как это сделать для startup? Мы же его не через define задаем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В настройках линкера заказать создание .map-файла, откуда узнать, куда, в какую секцию попадает стартап (если не можете принудительно приказать ликеру куда размещать стартап), а после задать выравнивание этой секции. Вот как-то так...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...