|
scmRTOS & MSPGCC. Ошибка компиляции примеров |
|
|
|
Jul 26 2011, 19:00
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Под линукс в mspgcc4 (gcc-4.4.5) и 3я и 4я версии ОС при компиляции выдают следующее: Цитата --- assembling ../scmRTOS/MSP430/OS_Target_asm.S... ../scmRTOS/MSP430/OS_Target_asm.S: Assembler messages: ../scmRTOS/MSP430/OS_Target_asm.S:125: Error: unknown opcode `vector_(11' Аналогично ругается mspgcc (20110716) под виндовс. Кстати поясните пожалуйста в чем цимус существования двух версий - mspgcc и mspgcc4. Вторая вроде как заявляет что она хороша тем что базируется на 4й версии GCC, однако обычный mspgcc тоже вроде как на четвертой и даже на 4.5 против 4.4 у mspgcc4?
Сообщение отредактировал aliko - Jul 26 2011, 19:01
|
|
|
|
|
 |
Ответов
|
Jul 27 2011, 11:30
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Jul 27 2011, 14:47)  Ух, что-то они всё поменяли... Я в отпуске, сходу не разобрался  Как теперь объявлять обработчик прерывания в ассемблерном файле? Пока что пользуюсь mspgcc4 под виндовс, только он нормально компилит 3ю версию ОС. С 4й тоже не справляется. Почему-то не работают объявления портов вида portN.out.pinN при их изменении ничего не происходит, приходится пользоваться объявлениями вида PNOUT. Кроме того заметил что в последних mspgcc убрали кучу заголовочных файлов типа iostructures.h, adc.h в которых были удобные структурки для работы с регистрами. Кроме того последний mspgcc ругается на включения файла "io.h" который уже депрекейтед и вместо него предлагает включать msp430.h. Вобщем с компиляторами GCC зоопарк.
|
|
|
|
|
Jul 27 2011, 11:51
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(aliko @ Jul 27 2011, 15:30)  Почему-то не работают объявления портов вида portN.out.pinN при их изменении ничего не происходит Это была примочка divil'а, видимо решили её выкинуть. Кстати, я с ней основательно накололся, не советую использовать. Почему-то иногда игнорирует __attribute__((packed)), с которым объявлены структуры портов, и в случае выравнивания по границе слова начинается дурдом... Я немного доработал макросы Аскольда Волкова (ещё не совсем до конца), получается не хуже, но главное - 100% предсказуемо. CODE #include "_useful_gpio.h" // Макросы Аскольда Волкова
#define SYS_WDT P4,7,H #define PWR_WDT P6,0,H
static __inline__ void WatchDogInit(void) { InitAsOut(PWR_WDT);
InitAsOut(SYS_WDT); }
static __inline__ void ClearWatchDog(void) { toggle_pin(SYS_WDT); }
static __inline__ void ClearPWRWatchDog(void) { toggle_pin(PWR_WDT); }
Цитата(aliko @ Jul 27 2011, 15:30)  Кроме того последний mspgcc ругается на включения файла "io.h" который уже депрекейтед и вместо него предлагает включать msp430.h. Вобщем с компиляторами GCC зоопарк.  Видимо, добавили много новых семейств, и чтобы не запутаться между версиями, решили отсечь всё старьё. Однако, радует, что проект вылез из подполья и продолжает развиваться.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jul 27 2011, 13:02
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(MrYuran @ Jul 27 2011, 15:51)  Я немного доработал макросы Аскольда Волкова (ещё не совсем до конца), получается не хуже, но главное - 100% предсказуемо. А можно поподробнее про эти макросы? что-то типа такого? Код #define P_PWR 4,7,0
#define port_on(TRIPLE) xport_on(TRIPLE) #define xport_on(PORT, PIN, ONSTATE) (ONSTATE ? P##PORT##OUT |= BIT##PIN : P##PORT##OUT &= ~BIT##PIN)
#define port_off(TRIPLE) xport_off(TRIPLE) #define xport_off(PORT, PIN, ONSTATE) (!ONSTATE ? P##PORT##OUT |= BIT##PIN : P##PORT##OUT &= ~BIT##PIN) использовать: Код port_on(P_PWR); port_off(P_PWR);
|
|
|
|
|
Jul 27 2011, 14:30
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(aliko @ Jul 27 2011, 19:02)  А можно поподробнее про эти макросы? Вот они:
macros.h.zip ( 731 байт )
Кол-во скачиваний: 100Или, если уж мы в ветке про scmRTOS, то гляньте на этот вариант.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 1 2011, 11:43
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 1 2011, 08:28)  Приаттачиваю исправленный вариант, попробуйте его у себя. Если заработает, я закоммичу исправления.
scmRTOS_4_MSP.zip ( 38.53 килобайт )
Кол-во скачиваний: 101Попробовать под линукс смогу только дома, на работе стоит винда. Виндовский mingw32-make не дружит почему-то с мейкфалом для 4й версии ОС, поэтому я перенес Ваши исправления в 3ю версию и она нормально откомпилировалась с новой версией mspgcc-20110716. Кстати, не подскажите как заставить виндовский make нормально выполнять clean? Не силен в написании мейкфалов, но он ругается по всей видимости на отсутствие rm а когда заменяю его на del то продолжает ругаться на "Missing separator". Может ему не нравятся слеши "/" вместо виндовских "\"? Только вручную их все менять во всем файле как-то муторно выходит...
|
|
|
|
|
Aug 1 2011, 12:39
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(MrYuran @ Aug 1 2011, 15:49)  Код # Очистка RM = del
clean: - $(RM) $(obj_path)\*.o - $(RM) $(lst_path)\*.lst Оказалось что ошибка missing separator возникает когда строка начинаются с пробела вместо ТАБа, а мой редактор заменял табы пробелами, то вовсе не устраивало GNU-шный make.
|
|
|
|
|
Aug 1 2011, 14:13
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(aliko @ Aug 1 2011, 18:39)  Оказалось что ошибка missing separator возникает когда строка начинаются с пробела вместо ТАБа, а мой редактор заменял табы пробелами, то вовсе не устраивало GNU-шный make. А, ну тогда понятно. А то я всё не мог понять, какая разница между мейкфайлами от 4й и 3й версий  Попробуйте всё же собрать 4ю версию, мне интересно, это у меня что-то криво установилось, или ещё что-то.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 2 2011, 08:47
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 1 2011, 18:13)  Попробуйте всё же собрать 4ю версию, мне интересно, это у меня что-то криво установилось, или ещё что-то. У меня вышла аналогичная ошибка линковщика (libstdc++) в линуксе при использовании mspgcc20110716. Однако mspgcc4 под линукс нормально собрал ваш проект. Также как я уже писал под виндовс в mspgcc20110716 проект собирается тоже отлично (правда тут я пробовал 3ю версию ОС с перенесенными туда вашими исправлениями, так как мейкфайл 4й версии много ругается и отказывается собирать проект под виндовс). Ну а что касается mspgcc4 под виндовс то она прекрасно компилирует 3ю версию ОС из репозитария, но очевидно в скором будущем тоже перестанет так как под линуксом последняя сборка mspgcc4 и mspgcc20110716 ведут себя уже одинаково, разве что последней не хватает libstdc++ при линковке. Кстати, на сайте mspgcc говорится следующее: From the GNU Compiler Collection (gcc) we have ported the C compiler (C++ without libstdc++). Однако в сборке под виндовс все работает хорошо. Также в mspgcc4 под линукс есть эта библиотека в папке lib. Вобщем путаница пока еще та. Я прилагаю исправленную версию ОС 3й версии, может быть имеет смысл перенести исправления из нее в ветку 3й версии. Она собирается как последней версией компилятора mspgcc20110716, так и по всей видимости более устаревшей сборкой mspgcc4(виндовс). Для этого я следующим образом изменил процедуру подключения заголовочных фалов: Код #if __GNUC_MINOR__ < 5 #include <io.h> #include <signal.h> #else #include <legacymsp430.h> #endif Цитата(AHTOXA @ Aug 1 2011, 18:13)  А, ну тогда понятно. А то я всё не мог понять, какая разница между мейкфайлами от 4й и 3й версий  Ошибка была в мейкфайле 3й версии у меня. Мейкфайл 4й версии под виндовс ругается сильно и много и к сожалению даже не пишет какая строка иходного файла вызывет ошибку так что отлаживать его довольно проблематично. Сообщения имеют следющий вид: Цитата Ошибка в синтаксисе команды. Ошибка в синтаксисе команды. Ошибка в синтаксисе команды. Ошибка в синтаксисе команды. --- compiling ./src/main.cpp... ./src/main.cpp:155:1: fatal error: opening dependency file obj/main.d: No such file or directory compilation terminated. make: *** [obj/main.o] Error 1
Сообщение отредактировал aliko - Aug 2 2011, 08:49
|
|
|
|
|
Aug 2 2011, 09:30
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(aliko @ Aug 2 2011, 14:47)  Кстати, на сайте mspgcc говорится следующее: From the GNU Compiler Collection (gcc) we have ported the C compiler (C++ without libstdc++). Однако в сборке под виндовс все работает хорошо. Скорее всего вы ставили mspgcc20110716 поверх какой-то предыдущей, вот там и осталась эта библиотека. У меня её нет. (и в архиве mspgcc-20110716.zip её нет). Победил это добавлением ключа линкера Код LD_FLAGS += -nostdlib Только вот проверить результат сейчас не на чем. Цитата Я прилагаю исправленную версию ОС 3й версии, может быть имеет смысл перенести исправления из нее в ветку 3й версии. Третью версию договорились не трогать до выхода четвёртой. Потом может быть сделаю. А может и не надо станет  Цитата Мейкфайл 4й версии под виндовс ругается сильно и много и к сожалению даже не пишет какая строка иходного файла вызывет ошибку так что отлаживать его довольно проблематично. Поставьте решёточку перед строкой .SILENT - может прояснится. Скорее всего, ругается на mkdir. Попробуйте создать директории bak, obj, lst, exe вручную.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 2 2011, 10:08
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 2 2011, 13:30)  Победил это добавлением ключа линкера Код LD_FLAGS += -nostdlib Перестают работать все стандартные библиотечные функции - memcpy, printf и т.д... Какая-то пирова выходит победа к сожалению  Цитата(AHTOXA @ Aug 2 2011, 13:30)  Поставьте решёточку перед строкой .SILENT - может прояснится. Скорее всего, ругается на mkdir. Попробуйте создать директории bak, obj, lst, exe вручную. Помогло. Действительно проблема была в создании катлогов. Однако теперь 4я версия ОС при использовании mspgcc2011... под виндовс ругается на отсутствие libstdc++ аналогично линуксовской версии этого же компилятора, в то время как mspgcc4 собирает проект под виндовс отлично. В то же время 3я версия ОС собирается без проблем любым компилятором и в любой ОС. ПОхоже все-таки где-то в мейкфайле надо копаться
|
|
|
|
|
Aug 2 2011, 11:06
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(aliko @ Aug 2 2011, 16:08)  В то же время 3я версия ОС собирается без проблем любым компилятором и в любой ОС. ПОхоже все-таки где-то в мейкфайле надо копаться Дык, просто поменяйте мейкфайл!  ЗЫ. Кстати, у меня не собралась и третья версия. Ругается: Цитата ld.exe: unrecognised emulation mode: msp430x149 Supported emulations: msp430
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 2 2011, 11:44
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 2 2011, 15:06)  Дык, просто поменяйте мейкфайл!  помогло  единственное что я добавил в мейкфайл от 3й версии - опцию -fno-threadsafe-statics иначе не собиралось, ну и -save-temps для удобства... Цитата(AHTOXA @ Aug 2 2011, 15:06)  ЗЫ. Кстати, у меня не собралась и третья версия. Ругается: странно, у меня теперь все работает с мейкфайлом от 3 версии
|
|
|
|
|
Aug 3 2011, 07:24
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 09:28)  2. Не работает с ключами компилера/линкера -ffunction-sections -fdata-sections / -gc-sections. Что-то лишнее выбрасывается. Надо разбираться со скриптами линкера, сейчас некогда. А чем чревато отсутствие этих ключей? В мейкфале для 3й версии ОС их вроде и не было и все прекрасно без них пока что работает в моем проекте, который не так уж и мал...
|
|
|
|
|
Aug 3 2011, 07:40
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(MrYuran @ Aug 3 2011, 11:35)  Все функции и данные, которые есть в исходниках, окажутся в бинарнике, независимо от их использования/неиспользования. Да уж, не весело... Что и библиотека стандартных функций целиком полезет в бинарник или хотя бы библиотечные функции будут браться поштучно? UPD попробовал включить эти флаги и все прекрасно откомпилировалось и слинковалось разница правда небольшая: mspgcc4: (GCC4.4): text data bss dec hex filename 18424 6 1972 20402 4fb2 .\exe/epp.elf mspgcc2011... (GCC 4.5): text data bss dec hex filename 16684 6 1978 18668 48ec .\exe/epp.elf mspgcc2011... (GCC4.5) c флагами -ffunction-sections -fdata-sections / -gc-sections: text data bss dec hex filename 16682 6 1968 18656 48e0 .\exe/epp.elf
Сообщение отредактировал aliko - Aug 3 2011, 07:49
|
|
|
|
|
Aug 3 2011, 07:53
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Библиотечные будут поштучно. В принципе ничего страшного, если проект помещается в кристалл. Просто как-то это "неаккуратненько". ЗЫ. Советую переключиться на четвёртую версию, раз уж она тоже заработала. Цитата(aliko @ Aug 3 2011, 13:40)  mspgcc2011... (GCC 4.5): text data bss dec hex filename 16684 6 1978 18668 48ec .\exe/epp.elf
mspgcc2011... (GCC4.5) c флагами -ffunction-sections -fdata-sections / -gc-sections: text data bss dec hex filename 16682 6 1968 18656 48e0 .\exe/epp.elf 2 байта? Это не то  Ключ линкеру надо давать вот так: Код -Wl,--gc-sections
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2011, 07:59
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 11:53)  ЗЫ. Советую переключиться на четвёртую версию, раз уж она тоже заработала. А я уже давно переключился, просто мейкфайл у меня с третьей версии а сам проект на четвертой... Точнее даже меняя ключ мейкфайла я могу скомпилировать проект и на 3й и на 4й версии ОС, чтобы если вдруг что не так пойдет была возможность преверить на др версии Цитата(AHTOXA @ Aug 3 2011, 11:53)  2 байта? Это не то  Ключ линкеру надо давать вот так: Код -Wl,--gc-sections вот как выглядит строка флагов линкера у меня: Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref --gc-sections что-то тут не так? все собирается вроде нормально...
|
|
|
|
|
Aug 3 2011, 08:04
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(aliko @ Aug 3 2011, 13:59)  Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref --gc-sections Вместо пробела - запятая. Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref,--gc-sections
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2011, 08:08
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 12:04)  Вместо пробела - запятая. Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref,--gc-sections Теперь перстало собираться  причем и на mspgcc4 (GCC4.4) Цитата msp430-ld.exe: : No such file: Invalid argument collect2: ld returned 1 exit status make: *** [.\exe/epp.elf] Error 1 и на mspgcc2011.. (GCC4.5): Цитата ld.exe : cannot find : Invalid argument collect2: ld returned 1 exit status make: *** [.\exe/epp.elf] Error 1
Сообщение отредактировал aliko - Aug 3 2011, 08:09
|
|
|
|
|
Aug 3 2011, 08:34
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Cобираться-то оно должно. Другое дело, что не работает  Напишите тогда Код -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref -Wl,--gc-sections Или возьмите уже мейкфайл от 4й версии, просто поправьте линкер g++ на gcc, как я писал выше. Нашёл в чём дело. В линкерном скрипте почему-то убраны KEEP от секций initX. После исправления в файле MSPGCC\20110716\msp430\lib\ldscripts\msp430.x строчек Код KEEP(*(.init)) *(.init0) /* Start here after reset. */ *(.init1) /* User definable. */ *(.init2) /* Initialize stack. */ *(.init3) /* Initialize hardware, user definable. */ *(.init4) /* Copy data to .data, clear bss. */ *(.init5) /* User definable. */ *(.init6) /* C++ constructors. */ *(.init7) /* User definable. */ *(.init8) /* User definable. */ *(.init9) /* Call main(). */ на Код KEEP(*(.init)) KEEP(*(.init0)) /* Start here after reset. */ KEEP(*(.init1)) /* User definable. */ KEEP(*(.init2)) /* Initialize stack. */ KEEP(*(.init3)) /* Initialize hardware, user definable. */ KEEP(*(.init4)) /* Copy data to .data, clear bss. */ KEEP(*(.init5)) /* User definable. */ KEEP(*(.init6)) /* C++ constructors. */ KEEP(*(.init7)) /* User definable. */ KEEP(*(.init8)) /* User definable. */ KEEP(*(.init9)) /* Call main(). */ стало вроде всё нормально. (Проверить не смог, железку уже отдал  Ну ладно, вроде разобрались  На днях закоммичу изменения. ЗЫ. Вспомнил! Возьмите map-файл в кавычки: Код ldflags := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref,--gc-sections
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2011, 08:43
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 12:34)  Нашёл в чём дело. В линкерном скрипте почему-то убраны KEEP от секций initX. После исправления в файле MSPGCC\20110716\msp430\lib\ldscripts\msp430.x строчек Исправил ВСЕ строчки initX согласно вашей рекомендации, однако это ни на байт не уменьшило размер программы... Может надо было править только до main как в вашем примере?
|
|
|
|
|
Aug 3 2011, 09:10
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 12:53)  Вы с ключами-то разобрались? Если да, то попробуйте убрать KEEP() и откомпилируйте. Увидите сильное уменьшение размера программы (даже чересчур). ключи мои вот: Код ldflags := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref -W1,--gc-sections еще пробовал вот так Код ldflags := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref -W1,--gc-sections -Wl Не совсем понял какие именно KEEP() убрать, убрал все что стоят перед каждым initX. На размер кода это влияния не оказало  UPD Все получилось. у меня было --cref -W1 вместо --cref -Wl (L маленькая) %)
Сообщение отредактировал aliko - Aug 3 2011, 09:13
|
|
|
|
Сообщений в этой теме
aliko scmRTOS & MSPGCC. Ошибка компиляции примеров Jul 26 2011, 19:00 MrYuran Цитата(AHTOXA @ Jul 27 2011, 14:47) Наско... Jul 27 2011, 11:02    MrYuran Цитата(aliko @ Jul 27 2011, 17:02) А можн... Jul 27 2011, 13:14                 MrYuran Цитата(AHTOXA @ Aug 3 2011, 09:28) 2. Не ... Aug 3 2011, 06:19                            AHTOXA Аминь
ЗЫ. Раз уж вы начали писать в рассылку mspg... Aug 3 2011, 09:14                         Сергей Борщ QUOTE (AHTOXA @ Aug 3 2011, 11:34) Нашёл ... Aug 8 2011, 08:44                          AHTOXA Цитата(Сергей Борщ @ Aug 8 2011, 14:44) А... Aug 8 2011, 09:52 aliko А каков смысл редактирования KEEP поясните пожалуй... Aug 3 2011, 09:15 AHTOXA Без KEEP выкидывается не только неиспользуемый код... Aug 3 2011, 09:17  aliko Цитата(AHTOXA @ Aug 3 2011, 13:17) Без KE... Aug 3 2011, 10:09   AHTOXA Цитата(aliko @ Aug 3 2011, 16:09) Похоже ... Aug 3 2011, 11:26    aliko Цитата(AHTOXA @ Aug 3 2011, 15:26) Единст... Aug 3 2011, 11:29     AHTOXA Закоммитил исправления в pre-4. Aug 5 2011, 04:57      aliko Цитата(AHTOXA @ Aug 5 2011, 08:57) Закомм... Aug 5 2011, 08:27 aliko Проблемы с GCC кажется продолжаются.
При компиляци... Aug 29 2011, 10:56 aliko Похоже я понял в чем проблема. Злобный компилятор ... Aug 30 2011, 08:35 aliko Причина ошибки во флаге -fdata-sections который н... Aug 30 2011, 12:16 Сергей Борщ QUOTE (aliko @ Aug 30 2011, 15:16) лучше ... Aug 30 2011, 13:04
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|