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

 
 
18 страниц V  « < 8 9 10 11 12 > »   
Reply to this topicStart new topic
> Хочу попробовать ARM, подскажите, что для этого нужно?, Какой проц выбрать, отлад. платку и какой софт?
Alex_inventor
сообщение Jan 29 2007, 03:24
Сообщение #136


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744



2zltigo
O нет ни в коем случае не подумайте, что я не доволен вашей критикой. Я обеими руками за критику! smile.gif Только КОНСТРУКТИВНУЮ критику. Ведь как в поговорке сказано: “В споре выигрывает не тот, кто прав, а оппонент, потому что узнал для себя что-то новое”. Хотелось бы выслушать пару аргументаций, ну например по коду, где лучше сделать, а где переделать. В UART не хвотает функции getchar(), я её позже напишу и выложу.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 29 2007, 03:42
Сообщение #137


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Alex_inventor @ Jan 29 2007, 01:50) *
Цитата
Э.... погорячились и сильно....

Ну prinf, разве что не написал?

А Вы ее (полагаю речь идет о printf() ) писать собираетесь?

Цитата
Показано как инитить

Скорее "как не надо" sad.gif совершенно жуткие записи непоименованных констант sad.gif

Цитата
функции отправки свои, не библиотечные

Ага sad.gif putchar() просто умиляет - имя библиотечной, но прототипу зачем-то не соответствует и никто
(тот-же printf() ) ей уже не воспользуется.

puts() просто образчик того, как не надо писать на C
Код
//Отправка строки (UART0)
void puts(uint8 *str)
{
  int x;
  for(x=0;x<100;x++)     //Защита на отсуствие /0
  {
            if( str[x]==0) x=200;
            putchar(str[x]);
  }
}

Защита "на отсутствие" '/0' в строковой переменной - прикольно.
Лишняя переменная и массив вместо естественной работы с указателем.
Ну и x=200 вместо break - это вообще sad.gif

Книжки, банальные книжки по "C" читать от корки до корки (а не "то, что мене сейчас надо"). Надо
обязательно читать.

Код
#define OUTCH( ch ) do{ while( !(U0LSR & LSR_THRE) );    \
                    U0THR = ch;                \
                    } while( 0 )

int putchar( int ch )
{
    OUTCH( ch );
    return( ch );
}

void puts( uint8 *str )
{
    while( *str != '\0' )
        OUTCH( *str++ );
}




Цитата(sonycman @ Jan 29 2007, 02:07) *
Ну а насчёт SPI c передачей 200 байт - это реально сделать? Через DMA?

А при этом "нарезка" SS на порции по 8-16 бит нужна? Короче нужно конкретно с поведением SPI
при передаче "пачки" надо разбираться.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 29 2007, 03:53
Сообщение #138


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(zltigo @ Jan 29 2007, 04:42) *
А при этом "нарезка" SS на порции по 8-16 бит нужна? Короче нужно конкретно с поведением SPI
при передаче "пачки" надо разбираться.

Там просто идёт заголовок (8 байт), а потом можно потоком.
Передача только в сторону дисплея.
Скорость - 10Мбит.
Думаю, должно работать.
Достаточно подготовить буфер - и DMA его скормит.

Сообщение отредактировал sonycman - Jan 29 2007, 03:57
Go to the top of the page
 
+Quote Post
Alex_inventor
сообщение Jan 29 2007, 04:12
Сообщение #139


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744



2zltigo
Вообще я не спорю, что функции написаны на скорую руку и красотой не блещут, главная цель работоспособность Объясню, какими принципами я руководствовался при написание.
Ну и x=200 вместо break - это вообще
Это не воще, а как вы будите тогда по UART 0 отсылать? Никак ?
Ваша функция:
Цитата
void puts( uint8 *str )
{
while( *str != '\0' )
OUTCH( *str++ );
}

тоже не способна 0 отослать

Цитата
Защита "на отсутствие" '/0' в строковой переменной - прикольно.


Этот приём я использовал в старых проектах, как защиту, потому-то существовала возможность отдать функции строку без /0. Тогда бы putchar всю flash в UART вывел бы (ну или половину). Ненравится? Уберите. 1 секунда.

Цитата
Скорее "как не надо" совершенно жуткие записи непоименованных констант


Каму жуткие, а кому и нет. Где надо имена там я имена применяю. Но для инициализации переферии я применяю bin вид. Потому что мне так удобно. В datashetah в каждом регистре каждый бит что-то значит. Легко получается, надо функцию задействовать поставил 1 в bin числе.

Вообщем я никому не навязываю свои труды. Да я повода и не довал? Хотите берите, хотите не берите. Но код работает, по размерам не намного больше вашего, да и для меня понятней. Prinf() писать конечно не буду. И хватит меня в книги тыкать.
Go to the top of the page
 
+Quote Post
Alex_inventor
сообщение Jan 29 2007, 04:47
Сообщение #140


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744



2zltigo
Критика, критикой, но столь негативное поведение НЕУМЕСТНО! angry.gif Я переделал функции, в соответствии с критическими замечаниями. Теперь putchar(), printf() может использовать:
//Отправка char (UART0)
int putchar( int ch )
{
while( !(U0LSR & LSR_THRE));
U0THR = ch;
return( ch );
}

//отправка строки (UART0)
void puts( uint8 *str )
{
while( *str != '\0' )
putchar( *str++ );
}

Если надо кому 0 передувать, пусть сами переделают. А тоя попытался отступить на шаг от религиозных норм, так меня чуть не “сожрали”! maniac.gif
И кто после этого захочет свои проекты выкладывать? sad.gif Ничего, мы сильные! Повторяюсь, форум называется: “Хочу попробовать ARM, подскажите, что для этого нужно?, Какой проц выбрать, отлад. платку и какой софт?” а не “Не лезь со своим свинячим рылом в наш огород”. Печально госпада. sad.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 29 2007, 05:01
Сообщение #141


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



2Alex_inventor
Да ты не расстраивайся так. Просто уровень у тебя (и у меня) далеко не профессиональный, поэтому и критика будет такая.
И никто тут не кричит - мол, не лезь в "огород".
Советы верные - надо развиваться, учиться.
Стоит прислушаться.

Но раз проект работает - это хорошо, значит - цель выполнена.
А умение чётко и красиво писать программу придёт со временем.

Скажи, у тебя в практике были законченные проекты - от принципиальной схемы - макетка - плата - программа - готовое устройство?
Просто интересно?

Сообщение отредактировал sonycman - Jan 29 2007, 05:03
Go to the top of the page
 
+Quote Post
Alex_inventor
сообщение Jan 29 2007, 05:20
Сообщение #142


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744



Вообще я железячник. Радиоэлектроникой увлекаюсь с 9 лет. Закончил политех с красным (отделение радоаппаратостроение). Могу свободно разработать абсолютно любой проект на железе. Программированием занимаюсь около 2 лет. Полных проектов собрал целую тучу…(в смысе с мк, а чисто железок всяких то вообще не перечесть). Ну , на МК, штук 100 будет наверное. Было пару очень серьёзных проектов. А так по мелочи. Восновном пишу для AVR. Самый первый проект на MK был на PIC, на asm писал. Это был электронный звонок, но необычный. Там был маленький зеркальный шар, который при звонке крутился и на который светило три маленьких прожектора которые каждый раз маргали по разному. В звонок я зашил сотню мелодий от SonyEriksona и каждый раз звучала новая мелодия. Правдо с громкостью пересторался, звонило, так что у соседий слышно было.
А вообще я не расстраиваюсь. Я абсолютно уверен в своих программах. Стиль НИЧЕГО не значит, главное, что бы работало.(как там говорится? имидж ничто ЖАЖДА ВСЁ?) Сейчас вот ARM изучаю. А вообще, если надо, могу заткнуть кого хочешь! angry.gif angry.gif angry.gif Просто сейчас цель другая. И я на рожон не лезу. Веду дипломатичные переговоры.

Сообщение отредактировал Alex_inventor - Jan 29 2007, 05:29
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Jan 29 2007, 09:55
Сообщение #143


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата(Alex_inventor @ Jan 28 2007, 14:50) *
Во первых я выше достаточно информативно описал ситуацию. Пример blinky, это пример из uVision, а я обсуждал примеры из книги. Blinky тоже попробовал, та же ошибка. Специально для вас повторю:
Цитата
Build target 'LPC2106'
assembling Startup.s...
Assembler messages:
Error: Error: can't open Files\Keil\ARM\INC\Philips\ for reading
Files\Keil\ARM\INC\Philips\: No error
compiling Blinky.c...
arm-uclibc-gcc: cannot specify -o with -c or -S and multiple compilations
Target not created

Я не сомневаюсь, что подшаманив, всё будет в порядке. Дальнейшее обсуждение данного вопроса считаю БЕСМЫСЛЕННЫМ, ибо я изучаю RealViwe, а все сторонние коды беру в виде алгоритмических идей. Имхо, хоть и медленный, но лучший способ для осваения.

Не поленюсь повторить в четвертый раз: не устанавливайте программы в каталоги с пробелами. Наверняка установка была в "C:\Program Files\Keil", а потом удивляетесь, что пробел считается разделителем параметров в GCC. Прочитайте внимательно написанное Вами же. Насчет бессмысленности - я не уверен: а вдруг пригодится? Впрочем, умолкаю.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 29 2007, 11:54
Сообщение #144


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alex_inventor @ Jan 29 2007, 00:40) *
Далее включаем оптимизацию, код будет подвергнут жёсткому насилию со стороны компилятора, что наверняка вызовет множественные логические разрушения хаотичного порядка. Вполне возможна неадекватная работа программы, влоть до полного отказа работоспособности.
Это значит что ваша программа была написана с ошибками. И такой отказ может призойти даже если вы добавите одну лишнюю инструкцию в программу на том уровне оптимизации, где все работало. Грамотно написанная программа работает одинаково (не считая скорости) независимо от уровня оптимизации. Посмотрите на вашу ошибку с циклом и volatile - это типичный пример. Это Ваша ошибка, если бы вы написали правильно (с volatile) все бы работало сразу и независимо от оптимизации, а вы бы не тратили напрасно время пытаясь поймать эту ошибку. Естественно, чем больше вы таких шишек набъете тем больше опыта у вас будет, но внимательно читая книжки по С вы имеете возможность
1) избежать таких ошибок вместо спотыкания о них
2) понять истинную причину, вызывающую ошибку. Ведь весьма вероятно вы найдете способ обойти ошибку самостоятельно, но поскольку вы самостоятельно неправильно поняли причину ошибки ваш способ не будет работать с такой же ошибкой в другом месте или перестанет работать в этом при незначительном изменении программы. Опять же ваш пример с циклом - как к гадалке не ходи ваше решение было "не пользовать уровень оптимизации в котором цикл исчезает". Решение позволяет в этот момент обойти ошибку, но оно в корне неверное.

Цитата(Alex_inventor @ Jan 29 2007, 03:12) *
Каму жуткие, а кому и нет. Где надо имена там я имена применяю. Но для инициализации переферии я применяю bin вид. Потому что мне так удобно. В datashetah в каждом регистре каждый бит что-то значит. Легко получается, надо функцию задействовать поставил 1 в bin числе.
Вот еще один пример. Даже если вы наизусть помните расположение битов в регистре и без напряжения переводите в уме в двоичный вид и обратно - глядя в такой исходник очень легко пропустить ошибку "занес бит не туда или не тот". Или же читая такой исходник приходится держать рядом раскрытый даташит, что сильно отвлекает от собственно алгоритма. Сравните с этим:
Код
    UART->LCR = (1 << UART_DLAB);
    UART->DLM = (baud_code >> 8) & 0xFF;
    UART->DLL = (baud_code >> 0) & 0xFF;
    UART->LCR = ((0 << UART_BC) | (0 << UART_PS) | (0 << UART_PE) | ( 0 << UART_SBS) | (3 << UART_WLS));   // 8,n,1-
    UART->FCR = (1 << UART_RTLS) | (1 << UART_TFR) | (1 << UART_RFR) | (1 << UART_FCRFE);   // enable and reset FIFO, 4-bytes int level
    UART->IER = (1 << UART_RDAIE) | (0 << UART_THREIE);
}
В таком коде большинство комментариев становится ненужными.

Цитата(Alex_inventor @ Jan 29 2007, 04:20) *
Я абсолютно уверен в своих программах. Стиль НИЧЕГО не значит, главное, что бы работало.(как там говорится? имидж ничто ЖАЖДА ВСЁ?)
Вот тут вы сильно ошибаетесь, и, надеюсь, осознание этого у вас постепенно придет с опытом, как пришло ко мне. Если у вас есть ясный и понятный стиль - ваша программа легко читается. Как правило результирующий код при этом получается короче чем у сумбурно написанной. Возможно, это потребует больше писанины в исходнике. Но вероятность допустить ошибку станет меньше именно за счет того, что исходник становится читабельней и проще.

Я пришел к такому выводу - красиво написанная программа работает лучше. Поэтому могу потратить несколько дней на поиск красивого варианта небольшой функции вместо того чтобы сляпать ее абы как, с подпорками и расчалками. И такой подход себя оправдывает.

Успехов! Нет предела совершенству.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jan 29 2007, 13:58
Сообщение #145


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(Alex_inventor @ Jan 29 2007, 05:20) *
Я абсолютно уверен в своих программах. Стиль НИЧЕГО не значит, главное, что бы работало.(как там говорится? имидж ничто ЖАЖДА ВСЁ?)

Гхм. Мне бы такую же уверенность при таком же подходе. Искренне надеюсь на то, что от стабильности работы ваших приборов не зависят жизни людей.
Позволю заметить есть прекрасная книжка по поводу стиля программирования на С - Ален Голуб "Веревка достаточной длины чтобы... прострелить себе голову"(по-моему так). Больше сказать нечего.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 29 2007, 14:44
Сообщение #146


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Alex_inventor @ Jan 29 2007, 06:20) *
Вообще я железячник. Радиоэлектроникой увлекаюсь с 9 лет. Закончил политех с красным (отделение радоаппаратостроение). Могу свободно разработать абсолютно любой проект на железе.

Это круто smile.gif
Значит, ты со схемотехникой "на ты"? В случае чего, можно будет обратиться к тебе за советом?

Цитата(Сергей Борщ @ Jan 29 2007, 12:54) *
UART->LCR = (1 << UART_DLAB);
UART->DLM = (baud_code >> 8) & 0xFF;
UART->DLL = (baud_code >> 0) & 0xFF;
UART->LCR = ((0 << UART_BC) | (0 << UART_PS) | (0 << UART_PE) | ( 0 << UART_SBS) | (3 << UART_WLS)); // 8,n,1-
UART->FCR = (1 << UART_RTLS) | (1 << UART_TFR) | (1 << UART_RFR) | (1 << UART_FCRFE); // enable and reset FIFO, 4-bytes int level
UART->IER = (1 << UART_RDAIE) | (0 << UART_THREIE);

Согласен. Такие выражения можно сделать компактнее, если пропустить подобное: 0 << UART_PS, особенно для неиспользуемых фич.

Сообщение отредактировал sonycman - Jan 29 2007, 14:46
Go to the top of the page
 
+Quote Post
Alex_inventor
сообщение Jan 29 2007, 15:28
Сообщение #147


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744



Цитата
Не поленюсь повторить в четвертый раз: не устанавливайте программы в каталоги с пробелами.

Каталог с проектами всегда находился в папке c:/keil
Сам компилятор находится в папке с:\ Cygnus
Цитата
Посмотрите на вашу ошибку с циклом и volatile - это типичный пример.

Volatile я заметил уже после того, как проект был выложен. Не заметил как там его оставил после экспериментов, при поиске пропажи паузы. Ну осталось, и что пауза не работает? Всё работает. Все инструкции процессора правильные и заданное время точно до us. Это не моя инициатива. Выше мне советовали вставить volatile, что бы компилятор не выкидывал паузу. Однако, это никакой роли не сыграл и он всё ровно выкидывал её при оптимизации O-3 time. И что тут неверного? Сказали что переменная может изменятся, и компилятор не должен проводить лишних телодвижений при оптимизации?

Цитата
Это значит что ваша программа была написана с ошибками.

Вы не понимаете сути, поставленного вопроса, или не хотите понимать. Как программа может быть написано неправильно, если я заранее сказал, что задача написана ПРАВИЛЬНО! НЕТ давайте избавимся от терминов правильно, неправильно. А то для одного будет правильно, а для другого неправильно (ну там switch, вместо for для цикла, например). Давайте скажем, что программа – работает (можно добавить ещё - по алгоритму). Т.е независимо от того, как программа выглядит на С, после компиляции программа выдаёт все заложенные в неё характеристики, это и время и размер и алгоритмы. Вопрос состоит в том, каких фокусом можно ожидать от компилятора при оптимизации и как с ними бороться. Ну что неправильного написано в строке for(x=0;x<100;x++)? Знаю, скажете что, по мнению и тому подобное ч нигде ни применяется ну дальше в том же духе. Одного при оптимизациях O-0…O-2 ничего не выкидывается, а при O-3 time уже всё? Там правильно, а здесь уже неправильно? Ошибки бывают двух видов. Синтаксические, и алгоритмические. Первые решаются на этапе компиляции, вторые на этапе отладки. Пройти этот путь и всё. Чего вам не хватает? Причём замете, я ни говорю что надо писать малопонятные запутанные программы. Я пришёл в С из asm, и максимально где можно ставлю коментарии(много времени не займут но потом могут сэкономить так много) и разделяю программу на отдельные логические блоки и файлы, помойму это можно заметить по проекту.
Цитата
И такой отказ может произойти, даже если вы добавите одну лишнюю инструкцию в программу

Извиняюсь за дерзость, но это, мягко говоря, неправдо! Ну, добавил я лишнюю инструкцию? Что произойдёт, добавится лишняя строка на асме? И при этом компилятор решил, что это сигнал для него, и настало время х и перелопатит всю программу? Максимум перелопатит маленький алгоритм, куда входит инструкция. Но это решается про стек отдельная беседа (как правило, он берётся с большим запасом). Я не ставил вопрос, как грамотно писать программы, в конечном счете, судья не вы и не я, а контроллер. Он последняя инстанция и если его будет ”удовлетворять” то что мы ему даём, и выдаст требуемые характеристики то задача решена. Ну и на последок, аргументы типа ”правильно написанная будет работать лучше, чем так называемая неправильная”. Это уже проблемы отладчика. Как он сделает свою работу, так и будет работать. Если есть есть N ситуаций в которых нужно получить M поведений, то надо не ленится а протестировать во всех N ситуациях. Я НЕ ЗАЩИЩАЮ МОИ ТВОРЕНИЯ!!! Я ХОЧУ СКАЗАТЬ ЧТО НЕ СТАВТИ ВАШИ ТВОРЕНИЯ ВЫШЕ ВСЕХ ОСТАЛЬНЫХ ТОЛЬКО ПОТОМУ ЧТО ОНИ ВАШИ! Выкладывайте ваши решения и не поливайте помоями другие, допускается указание на более лучшее решения по вашему мнению. А что лучше решит каждый для себя САМ!!!
Цитата
Я пришел к такому выводу - красиво написанная программа работает лучше.

Это чисто субъективное мнение. Для какждого красота своя. Мне лично больше нравится, и следовательно быстрее работаю, с bin. А ваши (x<<1) ненравятся. Кто же кроме меня покажет и другой стиль если я один такой, а вы все "правильно" пишете в одном стиле. Пусть люди выберают. Если data sheet вас отвлекает, ну тогда я незнаю...(прось ба не вставлять- не знаешь не говори, имелось в виду другое)
Цитата
Поэтому могу потратить несколько дней на поиск красивого варианта небольшой функции вместо того чтобы сляпать ее абы как,

Признаюсь честно, сам страдаю иногда таким подходом. Причём в некоторых случаях красота ставится выше, чем производительность и время на написание. Уверяю вас оптимальное решение и красивое решение РАЗНЫЕ ВЕЩИ!
Цитата
ваших приборов не зависят жизни людей.

Сниму ваше напряжение, нет не зависит. Живите спокойно, пока.
Блин bb-offtopic.gif какойто получается. Искренне надеялся избежать этого. Как правило такие форумы, где идёт взаимное выдёргивание контекста, оправдывания и так далие бысторо тухнут sad.gif

Сообщение отредактировал Alex_inventor - Jan 29 2007, 15:54
Go to the top of the page
 
+Quote Post
Dr.Craft
сообщение Jan 29 2007, 15:57
Сообщение #148





Группа: Участник
Сообщений: 10
Регистрация: 27-05-06
Из: Новосибирск
Пользователь №: 17 495



Цитата
Позволю заметить есть прекрасная книжка по поводу стиля программирования на С - Ален Голуб "Веревка достаточной длины чтобы... прострелить себе голову"(по-моему так).


Точнее "... чтобы выстрелить себе в ногу" - читать всем "адназначна", вещь стОящая
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Jan 29 2007, 16:07
Сообщение #149


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата(Alex_inventor @ Jan 29 2007, 14:28) *
Цитата
Не поленюсь повторить в четвертый раз: не устанавливайте программы в каталоги с пробелами.

Каталог с проектами всегда находился в папке c:/keil
Сам компилятор находится в папке с:\ Cygnus

А это Вами приведенная ошибка? Не видно, чтоб от корня Кейл рос...
Цитата
Error: Error: can't open Files\Keil\ARM\INC\Philips\ for reading

Такие как Вы, не разобравшись в предмете, портят потом впечатления другим, которые бы потом проскочили эти грабли незаметно.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 29 2007, 16:10
Сообщение #150


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Andy Great @ Jan 29 2007, 17:07) *
Error: Error: can't open Files\Keil\ARM\INC\Philips\ for reading

Блин, а у меня по-умолчанию в Program Files Микровижн стоит.
Правда, проблем пока не было - проекты собираются.
Компилятор RealView.
Значит, это только GCC не любит пробелы?
Go to the top of the page
 
+Quote Post

18 страниц V  « < 8 9 10 11 12 > » 
Reply to this topicStart new topic
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:20
Рейтинг@Mail.ru


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