реклама на сайте
подробности

 
 
> Вопрос по IAR, Настройки среды программирования
d7d1cd
сообщение Nov 8 2013, 18:19
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Привет всем. Подскажите, возможно ли настроить IAR так, чтобы он сделал компиляцию кода (например какой-то отдельной функции или всего кода) строго в определенный участок флешь памяти (от сих до сих, так сказать)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
d7d1cd
сообщение Nov 9 2013, 04:51
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



При попытке компиляции IAR выдает ошибку Fatal Error[e163]: The command line symbol "_..X_FLASH_END" in -Z(CODE)BOOT=_..X_FLASH_BOOT-_..X_FLASH_END is not defined.

Сообщение отредактировал d7d1cd - Nov 9 2013, 15:38
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 9 2013, 15:56
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(d7d1cd @ Nov 9 2013, 08:51) *
Спасибо за ответ. Что значит 2 точки в коде:
Код
-D_..X_FLASH_BOOT=F000
-Z(CODE)BOOT=_..X_FLASH_BOOT-_..X_FLASH_END

То есть задается только адрес начала размещения?

Нет, здесь задается именно сегмент памяти от сих до сих, где будут размещены ВСЕ функции, которые к данному сегменту приписаны. Т.е. если у вас несколько функций приписаны к сегменту BOOT, то все они в него попадут друг за дружкой. И тогда строго формально нельзя будет предсказать, с какого адреса одна из тех функций начинается, хотя практически линкер укладывает их тела в тот сегмент в порядке упоминания в тексте программы. Поэтому, чтобы разместить функцию строго по определенному адресу, вам придется сделать уникальный сегмент только для нее! Тогда уж она точно окажется в том ряду первой и попадет на начало сегмента.

Точки и подчеркивание, думаю, нечего не означают, просто придают именам уникальность, чтобы те случайно не совпали с именами каких-то объектов в программе.
Т.е.
_..X_FLASH_BOOT
- это одно имя целиком, а директива D (от слова define) лишь приписывает ей значение.
Само же определение сегмента задано во второй строке, после директивы Z.

Вообще-то, я сама глубоко с этим не разбиралась, а просто механически переделала под свое имя (BOOT) определение какого-то другого сегмента в том же самом стиле (это видно в xcl-файле для данного типа МК). Рисковать не хотелось, а надо было сделать по-быстрому.

Думаю, что в данном случае вполне годилось бы самое примитивное определение без всяких дефиниций:
-Z(CODE)BOOT=F000-F100
где задается имя сегмента, а его границы выставлены прямо в числах.

Определения имени границ сегментов нужны в файле конфигурации только затем, чтобы связать все сегменты в одну цепочку. Поэтому там каждое имя повторяется по меньшей мере 2 раза - в качестве конца предыдущего сегмента и начале последующего. Мой случай был в этом отношении примитивным, т.к. загрузочная область была заведомо пуста. В вашем случае дело может вылиться в то, что придется переписывать файл конфигурации под себя. Тогда его надо скопировать его в свой проект из:
\Program Files\IAR Systems\Embedded Workbench 6.5\430\config\lnk430f5529.xcl
(так этот файл называется для MSP430F5529, но у вас может быть другой МК)
переключить проект на него вместо умолчания, а потом внести в него исправления. Редактировать исходный файл конфигурации нельзя, можно только копию!

Проблема тут в том, что вся память уже поделена на сегменты! А потому свой сегмент придется буквально вклинивать между существующими, раздвинув в каком-то месте границы. Тут ситуация, как на политической карте мира - вам не создать нового государства, не потеснив в границах соседей, поскольку вся земля уже поделена.

Однако разбираться в том файле, уж тем более редактировать его, довольно противно. А потому попытайте сначала самый легкий способ - на числах, вдруг сработает?

Цитата(d7d1cd @ Nov 9 2013, 08:51) *
А что будет, если скомпилированный код не умещается от указанного места расположения до конца флешь памяти?

В этом случае линкер ошибку должен выдать. Примерно такую же, когда код слишком велик для памяти данного МК.

Цитата(d7d1cd @ Nov 9 2013, 08:51) *
При попытке компиляции IAR выдает ошибку Fatal Error[e163]: The command line symbol "_..X_FLASH_END" in -Z(CODE)BOOT=_..X_FLASH_BOOT-_..X_FLASH_END is not defined.

Дефиниции границ сегментов могут довольно сильно отличаться по именам у разных МК. Советую вам найти xcl-файл именно для своего типа МК и сделать определение, подобное тому, как там определены сегменты кода.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Nov 9 2013, 17:31
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(Xenia @ Nov 9 2013, 19:56) *
А потому попытайте сначала самый легкий способ - на числах, вдруг сработает?

Определил сегмент так:
Код
-Z(CODE)BOOT=F002-F0FF

И все получилось! Компилятор расположил код функции с адреса 0xF002. Спасибо.

По расположению кода теперь разобрался. Есть другой вопрос. В функции я использую переменные. Как указать компилятору при определении переменной, что эта переменная должна быть физически расположена по адресу 0x0200, например? Или как указать, что массив данных должен начинаться с адреса 0x0421?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 9 2013, 20:19
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(d7d1cd @ Nov 9 2013, 21:31) *
По расположению кода теперь разобрался. Есть другой вопрос. В функции я использую переменные. Как указать компилятору при определении переменной, что эта переменная должна быть физически расположена по адресу 0x0200, например? Или как указать, что массив данных должен начинаться с адреса 0x0421?


Точно так же! Только на этот раз "pragma location" прописывается не перед функцией, а перед определением переменной или массива. Только просите память не из сегмента CODE, а из сегмента DATA. У нас на форуме на такой вопрос уже отвечали:
http://electronix.ru/forum/index.php?s=&am...t&p=1020355
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- d7d1cd   Вопрос по IAR   Nov 8 2013, 18:19
- - Xenia   Цитата(d7d1cd @ Nov 8 2013, 22:19) Подска...   Nov 8 2013, 18:35
- - d7d1cd   Попытался указать переменной конкретный адрес. Нич...   Nov 10 2013, 10:30
|- - Xenia   Цитата(d7d1cd @ Nov 10 2013, 14:30) В код...   Nov 10 2013, 12:25
|- - d7d1cd   Сделал объявление переменной глобально, то есть вн...   Nov 10 2013, 13:42
|- - Xenia   Цитата(d7d1cd @ Nov 10 2013, 17:42) Все х...   Nov 10 2013, 13:53
- - d7d1cd   Хорошо. А возможно ли какой-то локальной переменно...   Nov 10 2013, 14:04
|- - SSerge   Цитата(d7d1cd @ Nov 10 2013, 21:04) Возмо...   Nov 10 2013, 14:45
||- - d7d1cd   Цитата(SSerge @ Nov 10 2013, 18:45) Остав...   Nov 10 2013, 14:57
||- - rezident   Цитата(d7d1cd @ Nov 10 2013, 19:57) Если ...   Nov 11 2013, 20:28
|- - Xenia   Цитата(d7d1cd @ Nov 10 2013, 18:04) Хорош...   Nov 10 2013, 14:53
- - d7d1cd   Уважаемый rezident, объяснения как всегда на высот...   Nov 12 2013, 05:02
|- - Xenia   Цитата(d7d1cd @ Nov 12 2013, 09:02) Хочет...   Nov 12 2013, 09:33
|- - d7d1cd   Цитата(Xenia @ Nov 12 2013, 13:33) ...нап...   Nov 12 2013, 10:01
|- - MrYuran   Цитата(d7d1cd @ Nov 12 2013, 14:01) Как п...   Nov 13 2013, 06:34
- - d7d1cd   Создал я проект, добавил в него файл. В этом файле...   Nov 13 2013, 09:09
- - MrYuran   Прямо так и вызывать, предварительно объявив прото...   Nov 13 2013, 09:26
- - d7d1cd   Попробовал следовать Вашему совету. Файл с функцие...   Nov 13 2013, 10:19
|- - MrYuran   Цитата(d7d1cd @ Nov 13 2013, 14:19) Скажи...   Nov 13 2013, 10:53
- - d7d1cd   Ошибка Bad instruction. Возникает в строке ассембл...   Nov 13 2013, 11:02
- - d7d1cd   Сделал я проект. Прикладываю его сюда. В этом прое...   Nov 14 2013, 07:48
|- - rezident   Цитата(d7d1cd @ Nov 14 2013, 12:48) Сдела...   Nov 14 2013, 15:20
- - d7d1cd   Спасибо всем за помощь! Наконец то я победил к...   Nov 14 2013, 17:28
- - d7d1cd   И снова здравствуйте. Теперь я умею в одном проект...   Nov 17 2013, 09:56
|- - Xenia   Цитата(d7d1cd @ Nov 17 2013, 13:56) Подск...   Nov 17 2013, 10:47
|- - d7d1cd   Цитата(Xenia @ Nov 17 2013, 14:47) У IAR ...   Nov 17 2013, 11:08
|- - Xenia   Цитата(d7d1cd @ Nov 17 2013, 15:08) Пока ...   Nov 17 2013, 12:01
|- - d7d1cd   Цитата(Xenia @ Nov 17 2013, 16:01) ...вы ...   Nov 17 2013, 12:49
|- - Xenia   Цитата(d7d1cd @ Nov 17 2013, 16:49) Как ж...   Nov 17 2013, 13:13
- - d7d1cd   И снова здравствуйте. Подскажите, пожалуйста, как ...   Nov 22 2013, 07:29
|- - Xenia   Цитата(d7d1cd @ Nov 22 2013, 11:29) Подск...   Nov 22 2013, 11:23
- - d7d1cd   Спасибо, Xenia. Я пока не пробовал в компиляторе, ...   Nov 22 2013, 16:36
- - d7d1cd   Все получилось. Спасибо. Есть еще вопрос по распол...   Nov 23 2013, 16:53
|- - Xenia   Цитата(d7d1cd @ Nov 23 2013, 20:53) Спаси...   Nov 23 2013, 18:01
- - d7d1cd   Я пытался свою задачу выполнить следующим образом....   Nov 24 2013, 07:04
|- - Xenia   Цитата(d7d1cd @ Nov 24 2013, 11:04) Все з...   Nov 24 2013, 17:58
- - d7d1cd   А чем, собственно, отличаются конфигурации Debug и...   Nov 25 2013, 15:21
|- - Xenia   Цитата(d7d1cd @ Nov 25 2013, 19:21) А чем...   Nov 25 2013, 21:12
- - d7d1cd   Привет всем. Снова вопрос по среде программировани...   Dec 28 2013, 15:06
- - d7d1cd   Разобрался в своем вопросе. Необходимо перед объяв...   Jan 1 2014, 13:25
- - d7d1cd   Решил один вопрос, появился другой. Задам тут, мож...   Jan 4 2014, 09:09
|- - rezident   Цитата(d7d1cd @ Jan 4 2014, 14:09) А нель...   Jan 4 2014, 15:31
- - d7d1cd   Спасибо за помощь!   Jan 4 2014, 17:15
- - d7d1cd   Уже устал биться с линкером. Помогите... У меня в ...   Jan 6 2014, 13:29
|- - rezident   Цитата(d7d1cd @ Jan 6 2014, 18:29) Я попр...   Jan 6 2014, 13:52
|- - d7d1cd   Цитата(rezident @ Jan 6 2014, 17:52) Прил...   Jan 6 2014, 14:59
- - SM   Сделайте еще одну секцию с кодом, с другим именем,...   Jan 6 2014, 15:30
|- - d7d1cd   Цитата(SM @ Jan 6 2014, 19:30) Сделайте е...   Jan 6 2014, 15:46
|- - SM   Цитата(d7d1cd @ Jan 6 2014, 19:46) Я пони...   Jan 6 2014, 16:57
|- - d7d1cd   Цитата(SM @ Jan 6 2014, 20:57) Вообще, об...   Jan 6 2014, 17:16
|- - SM   Цитата(d7d1cd @ Jan 6 2014, 21:16) Тогда ...   Jan 6 2014, 19:17
- - d7d1cd   Итак, у меня снова возник вопрос по системе програ...   Feb 27 2014, 15:30
|- - rezident   Цитата(d7d1cd @ Feb 27 2014, 20:30) А воз...   Feb 27 2014, 15:38
|- - d7d1cd   Цитата(rezident @ Feb 27 2014, 19:38) Сде...   Feb 27 2014, 16:09
|- - _Артём_   Цитата(d7d1cd @ Feb 27 2014, 20:09) [code...   Feb 27 2014, 16:54
|- - d7d1cd   Цитата(_Артём_ @ Feb 27 2014, 20:54) Може...   Feb 27 2014, 16:56
|- - _Артём_   Цитата(d7d1cd @ Feb 27 2014, 20:56) ASEG ...   Feb 27 2014, 17:23
- - d7d1cd   Вроде разобрался как использовать директиву ASEG: ...   Feb 28 2014, 13:39
- - d7d1cd   При создании проекта на ассемблере я вижу, что ест...   Mar 11 2014, 13:20


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 03:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01803 секунд с 7
ELECTRONIX ©2004-2016