Allregia 9 8 февраля, 2023 Опубликовано 8 февраля, 2023 (изменено) · Жалоба Тут вопрос от колеги, так что, "мопед не мой", сам я ответа не знаю. Quote Делается софт для заказчика. Вернее - почти все заказчик делает сам, наш только кусок с обработкой и расчетами, в котором несколько функций, две из которых вызываются из прерывания, и несколько из основного суперлупа в мейне. Заказчик требует определенное распределение памяти (смысла и причин не говорит), типа чтобы все переменные что в нашем куске, были в конретной области, прописанной в скаттере. Они ее для нас выделили. Ну это мы сделали, пока вся программа в виде исходников. Но(!) - впоследствии весь наш кусок дожен быть скомпилирован отдельно в виде либы, и вместе с .h передан заказчику. Исходники либы по договору. мы не передаем. Собственно сам вопрос, поскольку с либами вообще мало работал, и тут еще не приступал - а с либами это вообще будет работать? Как я понимаю куда чего засунуть, это уже работа линкера а не компилятора. В либе сохраняется вся информация о распределении для линкера? Компилятор ИАР. Изменено 8 февраля, 2023 пользователем haker_fox Тему переместил. Т.к. вопрос скорее по среде разработки, чем по самой архитектуре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 8 февраля, 2023 Опубликовано 8 февраля, 2023 · Жалоба В "либе" сохраняется информация о секциях, в которые помещаются переменные. А уж - в какую область памяти направить какую секцию, то забота компоновщика. Коллеге достаточно расположить все переменные своей "либы" в одной определённой секции. PS: Хотя и прибить гвоздями все переменные к абсолютным адресам в объектниках IAR тоже позволяет. Но делать так - некрасиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 8 февраля, 2023 Опубликовано 8 февраля, 2023 · Жалоба Как я понял из его рассказа, у него есть проект, с исходниками заказчика, к которму он добавляет свои исзходники. После отладки в таком "окрытом виде", он удалает все чужое и компилирует как либу. Затем берез чужую часть и пдключает своб полученную либу. Получается, то если него все работает и память распределяется праивльно "в открытом виде", то и потом с либой все будет ОК? Спасибо. P.S. Не знаю, почему тему перенесли в тему про IAR - тут как бы "общий вопрос" програмирования а не "среды разработкти", непосредственно никак не касающийся самого IAR-а. Ничего бы не изменилось, если бы это был Кейл или какая-нибудь гнусность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 8 февраля, 2023 Опубликовано 8 февраля, 2023 · Жалоба 17 минут назад, Allregia сказал: Получается, то если него все работает и память распределяется праивльно "в открытом виде", то и потом с либой все будет ОК? Да вообще не факт. Может название секций перепутают и все все равно будет работать. Проверять надо не "в открытом виде", а так, как это будет делать заказчик - вашу скомпилированную либу впихнуть в их код, собрать, проверить. Проверить работу и map-файл, разумеется. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 8 февраля, 2023 Опубликовано 8 февраля, 2023 · Жалоба 1 hour ago, Arlleex said: Проверять надо не "в открытом виде", а так, как это будет делать заказчик - вашу скомпилированную либу впихнуть в их код, собрать Разумеется он так и собирается делать, Просто сначала отладка "в окрытом виде". 1 hour ago, Arlleex said: Может название секций перепутают и все все равно будет работать. Не, там заказчики дотошные - скаттер ихний, и они в мар-файл тоже смотреть умеют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 8 февраля, 2023 Опубликовано 8 февраля, 2023 · Жалоба скаттер ихний В ИАРе нету скаттеров ;-) в ИАРе - .icf: они даже не "однофамильцы" (-; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 9 февраля, 2023 Опубликовано 9 февраля, 2023 · Жалоба Ну я не IAR-щик, поэтому по привычке называю "скаттер", задачи-то теже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 9 февраля, 2023 Опубликовано 9 февраля, 2023 · Жалоба Ну, судя по вопросу, нужно указать компилятору, в каких секциях что размещать -- он и сгенерит соответствующий код и управляющую информацию. Затем можно, например, все объектники собрать компоновщиком в один объектник (кейловский компоновщик такое умеет -- если память не изменяет, partial linking это обзывается), который скармливать при сборке полного приложения у заказчика. Как секции указывать, зависит от компилятора, так как стандарт это не регламентирует. В ARM Clang кейловском можно, в GCC можно (насколько помню), в мелкомягком компиляторе можно -- так что и в ИАРовском наверняка сие поддерживается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 31 10 февраля, 2023 Опубликовано 10 февраля, 2023 · Жалоба Я не заметил, какой компилятор используется, посему скажу за GCC. Первое. Нужно сказать компилятору, в какую секцию кода помещать тот или иной объект, например: Второе. Нужно в файле линкёра указать, какая секция какой памяти принадлежит и где она находится: Если линкёру не описать секцию, то он положит объект туда, куда кладёт по-умолчанию. Поэтому вам в своём коде нужно разместить объекты по именованным вами секциям и передать эту информацию заказчику. У GCC есть опции компилятора, которые указывают компилятору в какие секции класть код и данные из исходных файлов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 10 февраля, 2023 Опубликовано 10 февраля, 2023 (изменено) · Жалоба On 2/8/2023 at 5:18 PM, Allregia said: Собственно сам вопрос, поскольку с либами вообще мало работал, и тут еще не приступал - а с либами это вообще будет работать? Как я понимаю куда чего засунуть, это уже работа линкера а не компилятора. В либе сохраняется вся информация о распределении для линкера? Компилятор ИАР. Я с либами тоже дел не имел, но, так думаю, если в исходнике есть прямые команды, чего куда положить, значит, они обязательны для дальнейшего использования. В доке IAR'а есть глава "Controlling data and function placement in memory", там всё подробно расписано. Данные можно расположить по конкретным адресам, областям, либо использовать свои, пользовательские сегменты. То же самое относится и к функциям. ==== #pragma location=0xFF2002 __no_init const int beta; /* OK */ const int gamma @ 0xFF2004 = 3; /* OK */ __no_init int alpha @ "MY_NOINIT"; /* OK */ #pragma location="MY_CONSTANTS" const int beta = 42; /* OK */ const int gamma @ "MY_CONSTANTS" = 17;/* OK */ int theta @ "MY_ZEROS"; /* OK */ int phi @ "MY_INITED" = 4711; /* OK */ void f(void) @ "MY_FUNCTIONS"; void g(void) @ "MY_FUNCTIONS" { } #pragma location="MY_FUNCTIONS" void h(void); Да, забыл добавить - это дока для AVR, но, я думаю, для ARM всё будет очень похожее. Изменено 10 февраля, 2023 пользователем vvppvv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 10 февраля, 2023 Опубликовано 10 февраля, 2023 · Жалоба 7 hours ago, tonyk_av said: Я не заметил, какой компилятор используется, ИАР. 7 hours ago, tonyk_av said: Первое. Нужно сказать компилятору, в какую секцию кода помещать тот или иной объект, Второе. Нужно в файле линкёра указать, какая секция какой памяти принадлежит и где она находится: Если линкёру не описать секцию, то он положит объект туда, куда кладёт по-умолчанию. Вопрос-же был не в этом, все распределено, указано, и положено куда следует. Вопрос был - сохраниться ли все это когда часть проекта будет скомпилирована как либа, и в виде либы (без исходников) подключена к остальному. Уже отеветили что да, сохранится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться