jcxz 192 13 сентября, 2014 Опубликовано 13 сентября, 2014 · Жалоба Подскажите пожалуйста: можно-ли в IAR переопределить дефолтные секции кода/данных для конкретного файла? Типа #pragma location = ".some_section", но только не для конкретной функции/переменной, а для всего файла. А то что-то в мануале к компилятору не найду.... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 13 сентября, 2014 Опубликовано 13 сентября, 2014 · Жалоба iobjmanip This example renames the section .example in input.o to .example2 and stores the result in output.o: iobjmanip --rename_section .example=.example2 input.o output.o Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 192 13 сентября, 2014 Опубликовано 13 сентября, 2014 · Жалоба iobjmanip хм... И куда это вставить? В .icf? Если компилить из батника то ясно, но в проекте IAR? Надо же между компилёром и линкером. Да - и нужно всё-таки в исходниках, так как переопределять или нет секцию должно управляться в зависимости от значения некоторого #define (#ifdef..). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 14 сентября, 2014 Опубликовано 14 сентября, 2014 · Жалоба Если компилить из батника то ясно, но в проекте IAR? Да - и нужно всё-таки в исходниках, так как переопределять или нет секцию должно управляться в зависимости от значения некоторого #define (#ifdef..). "Дайте воды напиться, а то так кушать хочется, что переночевать негде" :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 192 15 сентября, 2014 Опубликовано 15 сентября, 2014 · Жалоба Ну мне изначально и нужно было чтобы, если некий define определён, то устанавливались нестандартные секции для CODE/DATA, если не определён - дефолтные секции. Сейчас это решено через использование по всему файлу #pragma location = TEXT_SECTION перед каждой функцией (и соответствующей своей строки для переменных). Ну а значение TEXT_SECTION задаётся в зависимости от определения или неопределения некоего define (".text" или ".textN"). Но хотелось бы без этой грязи по всему тексту, а в одном месте - в начале файла. В CCS такая возможность имеется: #pragma SET_CODE_SECTION ("section name") #pragma SET_DATA_SECTION ("section name") Может в IAR тоже есть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 15 сентября, 2014 Опубликовано 15 сентября, 2014 · Жалоба "грязь" можно украсить, сунув прагму в макрос. для этого есть вариант _Pragma() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 15 сентября, 2014 Опубликовано 15 сентября, 2014 · Жалоба Переопределить секции можно ключом компилятора: --section OldName=NewName добавив их в Options->C/C++Compiler->Extra Options Чтобы не упражняться с дефайнами, может быть проще будет кроме Debug и Release создать несколько конфигураций с разными настройками (Project->Edit Configurations...). В каждой конфигурации можно задать необходимые настройки, в том числе и определить символы (в разделе Options->C/C++Compiler->Preprocessor), тогда можно будет собирать проект с разными настройками без правки текстов. Кстати, при компиляции можно получить доступ к символам, определённым в .icf, если определять их с помощью директив define [ exported ] symbol name = expr; или export symbol name; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 192 15 сентября, 2014 Опубликовано 15 сентября, 2014 · Жалоба "грязь" можно украсить, сунув прагму в макрос. для этого есть вариант _Pragma() Её станет меньше, но она останется ;) Очень неудобно перед каждой функцией и после каждой переменной писать имя секции. Особенно когда их в файле - десятки. И постоянно забываешь это сделать. Переопределить секции можно ключом компилятора: --section OldName=NewName добавив их в Options->C/C++Compiler->Extra Options Чтобы не упражняться с дефайнами, может быть проще будет кроме Debug и Release создать несколько конфигураций с разными настройками (Project->Edit Configurations...). В каждой конфигурации можно задать необходимые настройки, в том числе и определить символы (в разделе Options->C/C++Compiler->Preprocessor), тогда можно будет собирать проект с разными настройками без правки текстов. О! Это хороший совет! спасибо! У меня кстати как раз и определено несколько вариантов сборки (FLASH_DEBUG, RAM_DEBUG, FLASH_RELEASE, RAM_RELEASE), и нужный мне дефайн (определяющий в какие секции памяти какие выходные секции компоновать) он и указывается в Extra options. При выборе вариантов с RAM_.., он как раз компоновал readonly-секции в ОЗУ (для скорости отладки). Но про --section OldName=NewName не знал. Значит впишу его туда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 15 сентября, 2014 Опубликовано 15 сентября, 2014 · Жалоба А вот из хелпа, кстати: /* A better way is to use a corresponding mechanism */ #define FLASH _Pragma("location=\"FLASH\"") ... FLASH int i; /* i is placed in the FLASH segment */ Для неинициализированных данных есть pragma dataseg. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 15 сентября, 2014 Опубликовано 15 сентября, 2014 · Жалоба При выборе вариантов с RAM_.., он как раз компоновал readonly-секции в ОЗУ (для скорости отладки).Не проще ли было сделать свой .icf для каждой конфигурации и в нем распихать стандартные секции как душе угодно, не трогая исходники вообще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 192 16 сентября, 2014 Опубликовано 16 сентября, 2014 · Жалоба Не проще ли было сделать свой .icf для каждой конфигурации и в нем распихать стандартные секции как душе угодно, не трогая исходники вообще? У меня и так два .icf. Но как сказать, что секцию ".text" из одного файла компоновать в одну область памяти, а ".text" из другого - в другую? Вы знаете как? В CCS это сделать можно. В IAR не знаю как. Это было-бы идеальным решением - вообще не трогать исходник. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 16 сентября, 2014 Опубликовано 16 сентября, 2014 · Жалоба Но как сказать, что секцию ".text" из одного файла компоновать в одну область памяти, а ".text" из другого - в другую? Вы знаете как? Как-как... В мануале английским по белому написано. where section-selector is: [ section-attribute ][ section-type ][section sectionname ] [object {module | filename } ] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 192 27 сентября, 2014 Опубликовано 27 сентября, 2014 · Жалоба Но как сказать, что секцию ".text" из одного файла компоновать в одну область памяти, а ".text" из другого - в другую? Вы знаете как? Наконец-то дошли руки. Если кому интересно, сделал так (линковка одноимённых секций из разных obj-файлов в разные регионы): place in RAM_regionBB { section .text object str.o, section .text object mail.o, section .text object sntp.o, section .text object dns.o}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться