Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil->IAR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Allregia
1) В Кейле есть такая штука, как "Target", имея несколько таргетов, можно иметь разные опции проекта (Alt-F7).
Пользуюсь часто этим, например чтобы компилировать проект в вариантах для отладки и "боевой" (с другого начального адреса, под бутлоадер).

2) в Кейле опции проекта есть глобальные, а также можно сделать индивидуальные, дял каждого .с файла в проекте.
Напрмер, иметь глобальную отптимизацию по размеру а на определенных файлах - по скорости.
Или настраивать на исползование разных областей памяти, к примеру - для F407 я в глобальных настройках ставил RAM = CCM (как самую быструю - чтобы в ней был стек и многие переменные), а в тех фалах, где есть работа с DMA или нужны большие массивы - ставил остальные 128К RAM.

Теперь вопрос - как все это делается в IAR'е? Что-то пока не нашел.

Спасибо.

Доп.: на первый вопрос вроде нашел, Project->Edit Configuration. Не так удоюбно как в Кейле, но задачу в общем-то решает.
По второму вопрсоу - пока глухо. Т.е. персональные опции на файлы есть, но если оптимизатор там еще можно изменить, то память - не нашел.
aaarrr
Цитата(Allregia @ Apr 1 2017, 18:45) *
По второму вопрсоу - пока глухо. Т.е. персональные опции на файлы есть, но если оптимизатор там еще можно изменить, то память - не нашел.

Не надо искать, как делается в IAR'е, сделайте правильно: полистайте документацию на компилятор и линкер и добавьте нужные #pragma в программе и сегменты в скрипте линкера.
aiwa
Цитата(Allregia @ Apr 1 2017, 17:45) *
Доп.: на первый вопрос вроде нашел, Project->Edit Configuration. Не так удоюбно как в Кейле, но задачу в общем-то решает.

нет, это не то.
В Workspace -> контекстное меню -> Options.
Если курсор находится на проекте, то можно менять глобальные опции для всего проекта. В частности в "General Options" можно выбрать конкретный процессор или устройство.
Если курсор находится на папке или файле - то локальные настройки для файла или всей папки.

Alex11
Цитата
нет, это не то.

Это как раз то. Если нужно сделать несколько вариантов компиляции с разными опциями, то через Edit Configuration делаете несколько вариантов, а затем в каждом через Options настраиваете режимы компиляции.
Что касается второго вопроса, то, как уже сказали выше, настраивать нужно прагмами и опциями линкера по программным секциям, а не по файлам. А стек - он вообще к файлу не относится.
jcxz
Цитата(Allregia @ Apr 1 2017, 17:45) *
Теперь вопрос - как все это делается в IAR'е? Что-то пока не нашел.

п.1 - через Edit\Configurations создать все нужные варианты компиляции с их опциями.
п.2 - для каждого варианта компиляции задать свой файл конфигурации линкёра: "$PROJ_DIR$\sdram.icf". А в этом файле прописать правила назначения регионов памяти конкретным секциям программы.
И в IAR можно задавать расположение секций для каждого файла исходника не только целиком для всего файла, но и для каждой конкретной переменной очень удобно через суффикс:
__no_init volatile u32 sysTimer @ ".raw"; //неинициализируемую переменную положить в секцию .raw и для этой секции в .icf прописать - в какой регион памяти её компоновать.
Allregia
Цитата(jcxz @ Apr 2 2017, 09:03) *
п.1 - через Edit\Configurations создать все нужные варианты компиляции с их опциями.
п.2 - для каждого варианта компиляции задать свой файл конфигурации линкёра: "$PROJ_DIR$\sdram.icf". А в этом файле прописать правила назначения регионов памяти конкретным секциям программы.
И в IAR можно задавать расположение секций для каждого файла исходника не только целиком для всего файла, но и для каждой конкретной переменной очень удобно через суффикс:
__no_init volatile u32 sysTimer @ ".raw"; //неинициализируемую переменную положить в секцию .raw и для этой секции в .icf прописать - в какой регион памяти её компоновать.


Спасибо, с отдельными переменными это понятно, а как "целиком на файл" или "целиком на группу"?
jcxz
Цитата(Allregia @ Apr 2 2017, 18:40) *
Спасибо, с отдельными переменными это понятно, а как "целиком на файл" или "целиком на группу"?

#pragma default_function_attributes = @ ".textInternal"
Откройте доку в IAR-е по ключевым словам, о прагмах - там всё есть.
SSerge
Из ещё не упомянутых средств есть опция компилятора --section

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

Единственный вариант без редактирования готовых .icf это:
__no_init <объявление переменной> @".ccram";
потому что секция .ccram уже определена, и нет забот по инициализации.


PS. С файлами stm32f407*.icf от версии 7.80.2 достаточно @".ccram" или #pragma location=".ccram",
стек теперь тоже размещается в ccram и переменные в ccram инициализируются как положено.


Allregia
Цитата(jcxz @ Apr 2 2017, 19:13) *
#pragma default_function_attributes = @ ".textInternal"
Откройте доку в IAR-е по ключевым словам, о прагмах - там всё есть.


Вопрос был:
Цитата
а как "целиком на файл" или "целиком на группу"?


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

Например - то какая-нибудь сторонняя библиотечка, типа FatFs. Я должен ее всю перелопатить, выискивая все переменные/буферы, которые могут работать по DMA, чтобы всунуть в них прагму?
Все-таки, в Кейле это сделано намного лучше.
zltigo
Цитата(Allregia @ Apr 3 2017, 00:58) *
Вопрос был:
Все-таки, в Кейле это сделано намного лучше.

Наивно полагаете, что кейл, от того, что Вы где-то поставили галочку, святым духом перелопатит готовую библиотеку и раскидает переменные по "правильным" областям памяти sm.gif sm.gif sm.gif
jcxz
Цитата(Allregia @ Apr 2 2017, 23:58) *
Каким образом эта прагма поможет? Особенено "на группу"? Вся-же идея в "группе", это что не надо прописывать ничгео в каждом входящем в нее файле.

Это на файл.

Цитата(Allregia @ Apr 2 2017, 23:58) *
Например - то какая-нибудь сторонняя библиотечка, типа FatFs. Я должен ее всю перелопатить, выискивая все переменные/буферы, которые могут работать по DMA, чтобы всунуть в них прагму?

1.В FatFS нет переменных/буферов работающих по DMA.
2.Изучите для чего предназначены *.h-файлы в си - многие проблемы решатся. В том числе - объявления чего-либо для группы или для всех файлов исходников.

Цитата(Allregia @ Apr 2 2017, 23:58) *
Все-таки, в Кейле это сделано намного лучше.

У Вас почти в каждом сообщении претензии к IAR-у - то не так, это не так (в основном от незнания конечно).
Но если так мил Keil, кто-ж так заставляет IAR-ом пользоваться???? Под дулом автомата что-ли в IAR-е сидите?

Цитата(Allregia @ Apr 2 2017, 23:58) *
Каким образом эта прагма поможет? Особенено "на группу"? Вся-же идея в "группе", это что не надо прописывать ничгео в каждом входящем в нее файле.

Для неумеющих читать даташит на компилятор:
Приведённый ниже фрагмент .icf-файла размещает все секции .text из указанных выходных объектных файлов компилятора файлов в регионе SDRAM_regionA.
А также секции .rodata и .fnt из всех выходных файлов проекта, для которых явно не указано место размещения.
Код
place in SDRAM_regionA {
  section .fnt,
  section .rodata,
  section .text object rds.o,
  section .text object menu.o,
  section .text object ir_term.o,
  section .text object fonttest.o
};

Полный .icf для STM32F429 для отладки кода в SDRAM: Нажмите для просмотра прикрепленного файла
Т.е. - в IAR-е можно не только в исходнике переопределить секции по умолчанию для кода/данных, но и для секций по-умолчанию уже скомпилённых объектных файлов/библиотек указать произвольный регион размещения.
Даже не перелопачивая ничего.
А может ли всё это Keil? cool.gif
zltigo
Цитата(jcxz @ Apr 3 2017, 13:12) *
У Вас почти в каждом сообщении претензии к IAR-у - то не так, это не так (в основном от незнания конечно).

Да, увы, обычная жертва IDE от производителей компиляторов sad.gif. Хоть кейл, хоть иар делают всякие извращения и уродства, дабы вот так, отсутвием какой нибудь "галочки" подсаживать на свои компилятры. Хотя, реально компиляторы все еще остаются, и будут оставаться, набором прекрасно управляемых и БЕЗ ВСЯКИХ "фирменных" надстроек и оболочек инструментальных средств. Я бы с ума сошел, если-бы трахался с доброй дюжиной компиляторов с которыми приходися работать, если бы мне в голову пришла дурная мысль попользоваться их "фирменными" оболочками.
BackEnd
Цитата(zltigo @ Apr 3 2017, 10:24) *
Да, увы, обычная жертва IDE от производителей компиляторов sad.gif. Хоть кейл, хоть иар делают всякие извращения и уродства, дабы вот так, отсутвием какой нибудь "галочки" подсаживать на свои компилятры. Хотя, реально компиляторы все еще остаются, и будут оставаться, набором прекрасно управляемых и БЕЗ ВСЯКИХ "фирменных" надстроек и оболочек инструментальных средств. Я бы с ума сошел, если-бы трахался с доброй дюжиной компиляторов с которыми приходися работать, если бы мне в голову пришла дурная мысль попользоваться их "фирменными" оболочками.

А вообще какими-нибудь IDE пользуетесь или без гуёв больше нравится работать?
zltigo
Цитата(BackEnd @ Apr 3 2017, 14:26) *
А вообще какими-нибудь IDE пользуетесь или без гуёв больше нравится работать?

Пользуюсь обязательно. Никаких извращений типа "я тут в встроенным в фар редактором пользуюсь". Только IDE должна быть и есть совершенно универсальная и подогнанная под себя любимого, а не "любезно" в качестве тоянского коня подсовывемая каждым из производителей компиляторов или контроллеров.
BackEnd
Цитата(zltigo @ Apr 3 2017, 11:30) *
Пользуюсь обязательно. Никаких извращений типа "я тут в встроенным в фар редактором пользуюсь". Только IDE должна быть и есть совершенно универсальная и подогнанная под себя любимого, а не "любезно" в качестве тоянского коня подсовывемая каждым из производителей компиляторов или контроллеров.

На каком универсальном для себя варианте остановились, если не секрет?
zltigo
Цитата(BackEnd @ Apr 3 2017, 14:34) *
На каком универсальном для себя варианте остановились, если не секрет?

Не секрет, но порекомендовать другим не могу, поскольку он де факто уже лет 15, как мертв. Это Multi-Edit. Я на нем с 90 года, когда еще был досовский. Все это время он переписывался и дописывался самостоятельно. Сейчас он в состоянии мама родная не узнает. Поскольку он у меня уже является продолжением кончиков пальцев, то довести до такого состояния что-то из свежего, типа, например, SlicEdit уже очень трудоемко, не говоря уже о монстрах типа Eclipse. Пытался начинать неоднократно, но не хватало времени sad.gif. На самом деле нет у новых ничего такого, чего нет или нельзя было дописать для этого покойничка. Уж больно отличные идеи и офигенный потенциал был в свое время в него заложен.
jcxz
Цитата(zltigo @ Apr 3 2017, 13:47) *
Не секрет, но порекомендовать другим не могу, поскольку он де факто уже лет 15, как мертв. Это Multi-Edit. Я на нем с 90 года, когда еще был досовский.

Да, помню - что-то такое было.
Моя "IDE" очень похожа, но своя - Dos Navigator. По той же самой причине - с закрытыми глазами (почти) могу редактировать. Тоже никого не агитирую sm.gif
zltigo
Цитата(jcxz @ Apr 3 2017, 16:42) *
Моя "IDE" очень похожа, но своя - Dos Navigator.

В отличие от "dos" и прочих "навигаторов" c фарами, Multi-Edit это действительно IDE, без всяких кавычек. Причем пионерски-прогрессивно для того времени построенная - движок+конфигурационные файлы типа баз данных+собственно среда в исходниках(на самодельном языке, котрый сначала был похож на паскаль, потом внешне на си оставшись больше паскалем)+скрипты до кучи.
toweroff
DOS Multi-Edit - это да... в свое время просто бомба была
zltigo
Цитата(toweroff @ Apr 3 2017, 18:46) *
DOS Multi-Edit - это да... в свое время просто бомба была

Да, я после такой фигни, как IDE от Борланд был совершенно очарован возможностью абсолютно все сделать по собственному уму. Хотя куча хоткеев у меня с тех пор таки от борландовской IDE sm.gif. Да и поздний Win вариант тоже был совершенно вне конкуренции. Это уже потом, когда Автор от дел отошел, началась буйная стагнация. Но движок до беспроблемно работающего под нынешними 64bit дотянули. За что спасибо. Ну а остальное переписывается, дописывется или вообще с тех самых досовских времен используется sm.gif.
toweroff
zltigo, я тогда (92-..) не борландил, всякие FoxPro да Clipper. Альтернативы просто никакой. И ведь помещалось на дискетку, да и то не полностью. Это вам не нынешние мастодонты sad.gif
а вот линкер от борланды вместо клипперного оно да, использовал. В родном собиралось жуть долго - успевал покурить спокойно, а тут за 15сек
Allregia
Цитата(zltigo @ Apr 3 2017, 11:08) *
Наивно полагаете, что кейл, от того, что Вы где-то поставили галочку, святым духом перелопатит готовую библиотеку и раскидает переменные по "правильным" областям памяти sm.gif sm.gif sm.gif


Я не "наивно полагаю", а точно знаю что он делает именно то, что я его прошу сделать.

Цитата(jcxz @ Apr 3 2017, 11:18) *
У Вас почти в каждом сообщении претензии к IAR-у - то не так, это не так (в основном от незнания конечно).
Но если так мил Keil, кто-ж так заставляет IAR-ом пользоваться???? Под дулом автомата что-ли в IAR-е сидите?


Ну, в общем да sm.gif
Есть несколько проектов, которые надо продолжать, и они были сделаны под ИАРом.
Свое я делаю в 4-мКейле, в нем и среда удобнее и компилятор у Кейла всегла был намного лучше чем в ИАРе.

Цитата
Для неумеющих читать даташит на компилятор:
Приведённый ниже фрагмент .icf-файла размещает все секции .text из указанных выходных объектных файлов компилятора файлов в регионе SDRAM_regionA.
А также секции .rodata и .fnt из всех выходных файлов проекта, для которых явно не указано место размещения.
Код
place in SDRAM_regionA {
   section .fnt,
   section .rodata,
   section .text object rds.o,
   section .text object menu.o,
   section .text object ir_term.o,
   section .text object fonttest.o
};

Полный .icf для STM32F429 для отладки кода в SDRAM: Нажмите для просмотра прикрепленного файла
Т.е. - в IAR-е можно не только в исходнике переопределить секции по умолчанию для кода/данных, но и для секций по-умолчанию уже скомпилённых объектных файлов/библиотек указать произвольный регион размещения.
Даже не перелопачивая ничего.
А может ли всё это Keil? cool.gif

Может, если руками скаттер писать.
zltigo
Цитата(Allregia @ Apr 4 2017, 12:01) *
Я не "наивно полагаю", а точно знаю что он делает именно то, что я его прошу сделать.

Поскольку никто за Вас не может рационально распределить переменные в разные области данных, то я и говорю о Вашей наивности. Переброс всех скопом огульно из одной области в другую, чем Вас по наивности так радует галочкой кейл, совершенно неинтересен. Дело надо делать хорошо.


jcxz
Цитата(Allregia @ Apr 4 2017, 11:07) *
Может, если руками скаттер писать.

Только так и следует делать - руками, самому. Описать регионы памяти, имея перед глазами мануал на проц, и раскидать по ним секции данных/кода - дело нескольких минут.
Ну вот видите - возможности примерно одинаковые, как и следовало ожидать, если конечно мануал изучить.
А если хочется именно Keil, то любой проект, думаю, не проблема за максимум несколько часов перегнать в Keil.
zltigo
Цитата(Allregia @ Apr 4 2017, 12:07) *
компилятор у Кейла всегла был намного лучше чем в ИАРе.

Был, в тот момент, когда его ARM покупал, действительно лучше (причем основной выигрыш был за счет стандарных библиотек). Но сразу после этого лидерство Кейла пошло на спад. Так что заблуждаетесь.
P.S.
Тут наш однофорумчанин не поленился недавно потестировать https://geektimes.ru/post/264558/



Цитата(jcxz @ Apr 4 2017, 12:15) *
А если хочется именно Keil, то любой проект, думаю, не проблема за максимум несколько часов перегнать в Keil.

Если кто-то по глупости не использовал иаровские расширения и хидеры, то еще и быстрее. Если использовал, то тогда может потребоваться достаточно много обезьяньего труда. Хотя по любому это стоит сделать. То есть сделать максимально переносимый исходник, а не под "иар" или "кейл".
Allregia
Цитата(zltigo @ Apr 4 2017, 10:10) *
Поскольку никто за Вас не может рационально распределить переменные в разные области данных, то я и говорю о Вашей наивности.


Так ото Я и решаю.

Цитата
Переброс всех скопом огульно из одной области в другую, чем Вас по наивности так радует галочкой кейл, совершенно неинтересен. Дело надо делать хорошо.


Там не "галочки", точнее - не только "галочки", а прописанные руками начальные адреса и длина.

Цитата
Если кто-то по глупости не использовал иаровские расширения и хидеры, то еще и быстрее. Если использовал, то тогда может потребоваться достаточно много обезьяньего труда.


К сожалению, очень много где использованы. Напрмер почти все функции, которые нужны быстрыми, были описаны в хедерах как:
Код
#pragma inline=forced
void ReleaseCodecReset(void)
{
CODEC_RESET_GPIO->BSRR = CODEC_RESET_PIN;
}


В Кейле это делается под другому.


Ладно, бог с ним, тут вроде все ясно.
Есть еще вопрос, но лучше другую тему сделаю.
zltigo
Цитата(Allregia @ Apr 4 2017, 16:38) *
#pragma inline=forced

Это можно просто выбросить, ибо такая мелчевка глобальными ключами оптимизируется без всяких прагм у любого компилятора, или заменить на универсальное inline.
Любоe из действий делается по всему проекту за 10 секунд, если редактор нормальный.

Цитата(Allregia @ Apr 4 2017, 16:38) *
Там не "галочки", точнее - не только "галочки", а прописанные руками начальные адреса и длина.

Нет, это Вы только КУДА так пропишите, но ЧТО куда - нет. То есть ВСЕ оптом в одно место это масимум такого "удобства". Уже писал - по РАЗНЫМ областям ни какими галочками в проекте относящимися ко всей "библиотеке" НЕ сделать.
Allregia
Цитата(zltigo @ Apr 4 2017, 15:49) *
Это можно просто выбросить, ибо такая мелчевка глобальными ключами оптимизируется без всяких прагм у любого компилятора, или заменить на универсальное inline.
Любоe из действий делается по всему проекту за 10 секунд, если редактор нормальный.


Так в том-то и дело, что у Кейле я всегда и писал:
__INLINE void MyFunc(void){...}

А в этих проектах под ИАР - полно такой прагмы.

P.S. А мне в то время, борлдандовские IDE нравились, начиная от ТурбоПаскаля и потом к БордландСи. Цеплял к ним как тулзы вызов компиляторов для МК и парсинг ошибок. А хелп в них был так просто учебник по Си.
Я вот например, на память всегда плохо помнил (тем более, что в эмбеддед это не так часто используется) - все параметры форматирования для printf/sprintf, там - можно было быстро подсомтреть (сейчас быстрее у гуггла спросить...)
zltigo
Цитата(Allregia @ Apr 4 2017, 18:25) *
Так в том-то и дело, что у Кейле я всегда и писал:
__INLINE void MyFunc(void){...}

При этом __INLINE это какой-то макрос, причем тоже НИ РАЗУ НИ КЕЙЛОВСКИЙ sm.gif sm.gif который может быть чем угодно, от наболее распростаненого inline (GCC, IAR, TICCS, TASKING...), до кейловской придумки __inline до той-же #pragma inline=forced или кейловской-же #pragma inline
Цитата
А в этих проектах под ИАР - полно такой прагмы.

Я уже писал - в любом вменяемом редакторе поддерживающем регулярные выражения при поиске и замене заменить на ту же __INLINE десяток секунд не более.
Allregia
Ладно, с этим уже все ясно, помогите лучше с бутлоадером, в соседней теме.
Там реально проблема.
zltigo
Цитата(Allregia @ Apr 4 2017, 19:12) *
Ладно, с этим уже все ясно, помогите лучше с бутлоадером, в соседней теме.
Там реально проблема.

Там не проблема. Там продолжение стонов за кейл, что в каком то волшебном кейловском файле что то само собой делалось. Что не интересно. Но лучше поймите, что контролер святым духом не сможет узнать где теперь находится таблица векторов. И есть ли она у Вас вообще. Познакомьтесь для начала с Vector Table Offset Register.
Allregia
Цитата(zltigo @ Apr 4 2017, 19:32) *
Там не проблема. Там продолжение стонов за кейл, что в каком то волшебном кейловском файле что то само собой делалось. Что не интересно. Но лучше поймите, что контролер святым духом не сможет узнать где теперь находится таблица векторов. И есть ли она у Вас вообще. Познакомьтесь для начала с Vector Table Offset Register.


Я в курсе что такое таблица векторов, видимо Вам нечего сказать по существу проблемы.
zltigo
Цитата(Allregia @ Apr 5 2017, 00:21) *
Я в курсе что такое таблица векторов

Очевидно, что только слова такие слышали, ибо в Вашем "загрузчике" даже попытка ее переместить отсутствует начисто. После демонстрации таких познаний дальше обсуждать нечего.

Allregia
А зачем ее перемещать, если в system_st32f?xx.c аппликации оно настраивается заново SCB->VTOR=... ?

У меня больше десятка проектов на F1/F4, где оно прекрасно работает. Кстати, и в примерах я тоже не видел никаких "перемещений", в том числе и аппноте от ST для F7, так что загрузчик тут вооще не причем.

Ваши знания отлично продемонстрированы, как и желание помочь.
Может лучше было просто сказать "я не знаю"? Или "я не работал с F7"?
jcxz
Цитата(Allregia @ Apr 4 2017, 17:25) *
Так в том-то и дело, что у Кейле я всегда и писал:
__INLINE void MyFunc(void){...}
А в этих проектах под ИАР - полно такой прагмы.

Так всё-таки - претензии к IAR-у или стилю написания исходников? Путаете мух с котлетами.
Как тут уже сказали: "#pragma inline=forced" можно просто выкинуть, ибо она имеет смысл только для отладки.
Allregia
Уже выкинул.
zltigo
Цитата(Allregia @ Apr 5 2017, 01:54) *
А зачем ее перемещать, если в system_st32f?xx.c

В приведеных Вами исходниках есть только то, что есть. Что ЕЩЕ и КАК делаеся или НЕ делается за их пределами ведомо только Вам.
Allregia
Ну во 1-х, оно одинаково себя ведет если и перемещать в бутлоадере, потому я и спросил о каких-то тонкостях именно в F7.
Во 2-х - если Вы не знаете как устроена система на STM32, и какой у нее стандартный старап (system_stm32f7xx.c + startup_stm32f767xx.s), то лучше промолчать, пусть более грамотные ответят.
zltigo
Цитата(Allregia @ Apr 5 2017, 10:26) *
Во 2-х - если Вы не знаете как устроена система на STM32, и какой у нее стандартный старап (system_stm32f7xx.c + startup_stm32f767xx.s), то лучше промолчать, пусть более грамотные ответят.

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

jcxz
Цитата(Allregia @ Apr 5 2017, 09:26) *
Во 2-х - если Вы не знаете как устроена система на STM32, и какой у нее стандартный старап (system_stm32f7xx.c + startup_stm32f767xx.s), то лучше промолчать, пусть более грамотные ответят.

Странно.... А у меня стартап одинаковый для всех моих проектов на LPC17xx, LPC43xx, Tiva TM4C129xxx, Infineon XMC4700, STM32F4xx, STM32F1xx - всём, что на CM3/CM4.
И что-то подозреваю, что и на CM7 он не будет отличаться.
ЧЯДНТ? rolleyes.gif
Allregia
Уважаемые, может кто-нибудь ответить что-нибудь по существу? И желательно - в соседней теме, где и задан вопрос, поскольку к ЭТОЙ теме он отношения не имеет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.