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

 
 
20 страниц V  « < 7 8 9 10 11 > »   
Reply to this topicStart new topic
> AVR признали !, C переходом в рассуждения о контроллерах
defunct
сообщение Aug 10 2007, 22:21
Сообщение #121


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(oran-be @ Aug 10 2007, 22:31) *
АВР нормально работает, до тех пор, пока размер битового массива не превышает размер, который С компилятор может затолкать за раз при вызове функции - байт 8-12 примерно.

lol.gif
Посмеялся smile.gif "байт 8-12 примерно". Напомнило фразу автора banned курса - "в IAR 1 байт равен двум байтам AVR примерно."

Зачем же ж массив пихать как параметр функции?
Передавайте через указатель будет быстро.

У меня HDLC прием/передача на лету обрабатывается авркой в фоне. Битовых операций там просто "немеряно". И пакеты всяко больше 12-ти байт.

Цитата(Прохожий @ Aug 11 2007, 00:50) *
Кроме этого, я не большой любитель всяческих ОС на столь микроскопических девайсах, которыми являются как AVR, так и PIC. Хотя в Вашем случае применение ОС абсолютно оправданно.

ОС упрощают работу настолько же, насколько упрощает жизнь C в сравнении с ASM'ом. На микроскопических чипах (хотя AVR бывает и отнюдь не микроскопическим, к примеру m2560 - 256k флеша это уже достаточно большой проект исходников на C эдак на 1-2Mb), применение микроскопических ОС - окупается и оправдывается временем разработки.
Go to the top of the page
 
+Quote Post
Прохожий
сообщение Aug 10 2007, 22:47
Сообщение #122


Cундук
*****

Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269



Цитата(defunct @ Aug 11 2007, 02:21) *
ОС упрощают работу настолько же, насколько упрощает жизнь C в сравнении с ASM'ом. На микроскопических чипах (хотя AVR бывает и отнюдь не микроскопическим, к примеру m2560 - 256k флеша это уже достаточно большой проект исходников на C эдак на 1-2Mb), применение микроскопических ОС - окупается и оправдывается временем разработки.

Не надо со мной про ОСы. По отношению к ним я абсолютно необъективен.
Немного bb-offtopic.gif , если позволите.
На днях закончил кусок программы для Винды, связанный с обменом данными через DDE сервер, разработанный одной очень уважаемой конторой. Для того, чтобы все это устойчиво заработало пришлось убить три дня своего времени и перелопатить туеву хучу вторичной (абсолютно бесполезной) информации, к которой я отношу описание функций ОС (в данном случае XP).
И потом, моя методика программирования для МК и так включает в себя такие понятия, как процесс, флаг (мьютекс, семафор), событие. Только выстраивается это все непосредственно под решаемые задачи и железо конкретного МК минуя ОС.
Насчет С могу сказать только одно. Упрощение жизни заметил только тогда, когда решал задачи, связанные с расчетом полиномов термопар, а так - разницы особой нет. Трудности в правильном постороении алгоритма, а не в том на чем он отображен впоследствии.
Впрочем, это мое личное мнение, никому ненавязываемое.
Go to the top of the page
 
+Quote Post
mse
сообщение Aug 11 2007, 07:54
Сообщение #123


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(rx3apf @ Aug 10 2007, 21:43) *
Тем, что не надо перезагружать данные из RAM в рабочие регистры, разве это не очевидно ? Т.е. если у AVR мы уместимся в регистрах - все хорошо и быстро.

Очень хорошо вы себе ответили:
Цитата
Но _такой_ пример - да, высосан из пальца, реально не требовалось.
Я именно об этом ;О) В том смысле, что и не потребуется. А если потребуется, то сто пудов, десяток-другой лишних тактов погоды не сделает и не испортит. Максимум, чего может плохого приключиться, это поделить 64/64. Но до такой жизни ещё дойти надо суметь. ;О)
Цитата
Какое слово непонятно ?

Да мне-то все слова понятны. ;О) В частности, ядро кореллятора(в общем случае) - операццыя МАС. Например такая: 16s*16s=32s+АСС40бит.(s-signed) А в особо весёлых случаях и 16s*24s приходится накручивать, но это уже при фильтераццыи...
Распишете сами или мне помочь? И этта...выводы тоже. ;О) Бо вот в этом случае десяток лишних тактов вырождается в сотни, а то и тыщи на тот-же кореллятор. Или какой фильтер. Или ДПФ какое. И вот мы уже в частоту дискретизаццыи не лезем. ;О)
Ну и про многоразрядную арифметику тоже... мне в жизни не потребовалось складывать-вычитать-делить ничего больше 64р. Да и то, потому, что промежуточный результат такой получался.
Go to the top of the page
 
+Quote Post
1S49
сообщение Aug 11 2007, 09:01
Сообщение #124


Местный
***

Группа: Участник
Сообщений: 262
Регистрация: 3-04-07
Из: СПб
Пользователь №: 26 742



quote name='ozzy' date='Aug 10 2007, 23:52' post='281981']
ZZZzzzz... 07.gif 07.gif 07.gif
Я тут поотсутсвовал немножко...
Как говорил кот Леопольд beer.gif

У каждого камня есть свои сильные и слабые стороны и не стоит из за этого ругаться.

Предлагаю модератору закрыть тему как совершенно бесполезную
[/quote]

М-да, только AVR-щик может открыть тему: “XXX – признали!”. Никак не могу понять, откуда у них развился такой комплекс собственной неполноценности?
Go to the top of the page
 
+Quote Post
kamedi_clab
сообщение Aug 11 2007, 09:07
Сообщение #125


Местный
***

Группа: Новичок
Сообщений: 239
Регистрация: 5-10-06
Пользователь №: 21 004



Цитата(oran-be @ Aug 9 2007, 00:10) *
По производительности PIC18 имеет АВР по полной, несмотря на в 2 раза меньшее значение MIPS.


А что не в 4 ? вроде так на самом деле есть.

Цитата(oran-be @ Aug 9 2007, 00:10) *
Загрузка-выгрузка все сводит на нет.


Поясните если не трудно.
Go to the top of the page
 
+Quote Post
Petka
сообщение Aug 11 2007, 09:24
Сообщение #126


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Забавно, но мне показалось, что многие из PICщиков отметившихся в этой теме пишут в основном на АСМе. Интересно, есть ли среди PICшиков те, кто реально использует для программирования Си? Было бы интересно обсудить преимущества и недостатки AVR/PIC именно с ними.

Итак, уважаемые, кто программирует PIC в основном на Си, откликнитесь!
Go to the top of the page
 
+Quote Post
Denisvak
сообщение Aug 11 2007, 10:34
Сообщение #127


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038



smile.gif читал читал... вроде люди взрослые а об таком спорите!!!
Такое очучение что большинство ораторов тут собирает просто домашние поделки...ну тогда можно спорить сколько угодно - каждый кулик свое болото хвалит smile.gif

Как мне кажется камешек для проекта надо выбирать не только из прынцыпа что я вот его знаю на все 100% вот и заложу его в разработку - о таком большинстве я и говорю. Но согласитесь...выбор зависит от самого проекта...в одном не нужна максимальная производительность в пользу высокой надежности, в другом важна цена..., какой-то проект нужно сделать очень быстро и Вы конечно возьмете то что вам больше знакомо, другому заказчику важна надежность и качество и тип камешка он Вам диктует сам считая его лучшим....

а так ИМХО об г.... разговор
зря тему в лес угнали...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 11 2007, 22:49
Сообщение #128


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



2SasaVitebsk. Маленький вопросик по этому фрагменту
Цитата(SasaVitebsk @ Aug 10 2007, 21:12) *
PS: Попробуйте реализовать на PIC16
Код
      clr    nstrel     ; обрабатывать сначала
headc:
      . . . . . . . .
      inc    nstrel     ; следующая стрелка
      cpi    nstrel,6;   Конец массива?
      brne   headc      ; если нет, то повторить

Почему бы цикл не организовать так
Код
      ldi    nstrel,6   ; обрабатывать сначала
headc:
      . . . . . . . .
      dec    nstrel     ; следующая стрелка
      brne   headc      ; повторить, если не все стрелки

Всё-ж-таки экономия одного оператора.

Что касается реализации вашего фрагмента на пик18, странно, но у меня получилось то же самое количество машинных циклов, как и у вас, вот такие фактики в мире галактики...На мой взгляд, Пик начнёт проигрывать АВРу при арифметических операциях, там где придётся использовать его единственный аккумулятор WREG.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
gormih
сообщение Aug 12 2007, 07:52
Сообщение #129


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Denisvak @ Aug 11 2007, 14:34) *
зря тему в лес угнали...




Это бесполезно smile.gif

Бывает так - люди не хотят ничего слышать о реальности. Им подавай удовлетворение их амбиций - пускай спорят smile.gif


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
oran-be
сообщение Aug 12 2007, 12:41
Сообщение #130


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Цитата(SasaVitebsk @ Aug 10 2007, 19:39) *
Так кто же из нас фанат?

Похоже, имеет место программирование, но совсем не на АВР smile.gif.
Чем же фанатик отличается от свободомыслящего Хомо Сапиенс? Так как мы в ветке АВР, то можно абстрактно представить, что группа программистов написала жутко универсальную программу для анализа и обработки неких входных данных, имеющих широкий спектр протоколов, поступающих, скажем по USART. В железо заложили, скажем АТМегу2560 и заполнили 220к из 256 возможных. Обработчик построили в виде множества функций, рассчитанных каждая на свой тип протокола, вызываемых при помощи таблицы переходов. Индекс в таблице переходов вычисляет анализатор, который при помощи наложения масок обрабатывает часть входных данных. Так вот, чтобы получить "фанатично настроенный" процессор, необходимо перезаписать таблицу переходов, заполнив ее указателем на одну-единственную функцию, либо в анализаторе свести все маски к одной. Естественно, при таком раскладе львиная доля входных данных будет восприниматься совершенно неадекватно. И большая часть заложенного кода окажется бесполезной.
Это все к тому, что определенная часть поклонников АВР почему то при анализе входных данных использует одну и ту же маску: "AVR - the best", а в таблице переходов активным остается один вектор, обрабатывающий сигнал "На нас напали". Очевидно в итоге всего этого неадекватного восприятия начинают приводится куски кода, якобы представляющие верх элеганости, хотя на самом деле это тривиальная до зубной боли задача "переслать два байта", на С она бы заняла ни много ни мало, а целую строчку в тесте, а компилятор выдал бы код не хуже. (Может это есть тонкий прикол на тему "как два байта переслать"?)
Пытаясь достучатся до адекватного восприятия, повторюсь - "АВР признали" - это удивительно не потому, что ядро АВР плохое, а потому, что у фирмы Атмел маркетинг бежит впереди качества, в результате чего годика так этак 2-3, до появления Мега8, они выпускали МК, несовместимые с устойчивой продолжительной работой. И не признавали этого ну никак. И глюки железячные у АВР такие, каких нигде нет. И внедрение маркетинга в техдокументацию вызывает дополнительную путаницу.
Цитата(bodja74 @ Aug 9 2007, 11:19)
2 С периферией для начала нужно научиться работать а потом хаять ,TWI выдаст ошибку в регистре статуса если что не так ,я уже не говорю про ситуации с NACK ,и правильно делает что затыкаеться,нечего инфу тупо гнать.

Совет умный про анализ результата. Но анализировать можно сколько угодно. но если модуль аппаратно зависает, то результат анализа можно засунуть в одно место. Много помогает анализ кода ошибки синего экрана смерти в Виндоуз? NACK - нормальный сигнал на шине, он не должен приводить к зависанию модуля.

Сообщение отредактировал oran-be - Aug 12 2007, 12:43
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 12 2007, 13:35
Сообщение #131


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(oran-be @ Aug 12 2007, 16:41) *
NACK - нормальный сигнал на шине, он не должен приводить к зависанию модуля.

Удивительное дело,я всегда считал,что у AVR очень удачный модуль TWI.
Вас уже не первый раз призывают перейти от слов к делу.
Приведите,плиз,ваш код работы с квадратной шиной,где NASK вешает модуль,желательно на С.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
µµC
сообщение Aug 12 2007, 13:45
Сообщение #132


Участник
*

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710



Голосовалка, типа что круче сегодня?

PIC24 (+dsPIC33) однозначно и чисто конкретно рулят по всем значимым характеристикам включая цену. Это для сегмента занимаемого мегами32 - 128.
И в самом деле, разве есть еще чудаки, закладывающие в новый проект m128, или, скажем, 5V питание? Правильно, нету, перевелись уже - повымирали от избытка холестерина в мозге.

m48 - m8 однозначно рулят в своем сегменте.

Кстати, PIC18F24J10 это аналог m16 по флешу, рам, да и по цене тоже.
Go to the top of the page
 
+Quote Post
oran-be
сообщение Aug 12 2007, 16:22
Сообщение #133


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Цитата(WHALE @ Aug 12 2007, 16:35) *
Удивительное дело,я всегда считал,что у AVR очень удачный модуль TWI.
Вас уже не первый раз призывают перейти от слов к делу.
Приведите,плиз,ваш код работы с квадратной шиной,где NASK вешает модуль,желательно на С.

Код
BYTE volatile byTWIctrl;
BYTE volatile byTWIstate;

      // State byte. Default set to TWI_NO_STATE.
static BYTE* pTWItrans;         // указатель на текущий байт
static BYTE ctTWI;             // счетчик приема-передачи
static BYTE byDisp;            // смещение в подчиненном устройстве
static BYTE bySlaveAddr;

..............................................................
  функции всякие разные
..................................................................
// сам поток собственно

SIGNAL(SIG_2WIRE_SERIAL){
    switch (TWSR){
    //------------------------------------------------------------------------
        case TWI_START:             // START has been transmitted
        case TWI_REP_START:         // Repeated START has been transmitted
                    TWDR = bySlaveAddr;
            if(byTWIctrl & TWS_READ_NOW)  TWDR |= 1;
                     TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                            (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to send byte
                               (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           //
                               (0<<TWWC);
                break;
    //------------------------------------------------------------------------
        case TWI_MTX_ADR_ACK:       // SLA+W has been tramsmitted and ACK received
                TWDR = byDisp;
                TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                        (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to send byte
                           (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           //
                           (0<<TWWC);
            break;
    //----------------------------------------------------------------------
        case TWI_MTX_DATA_ACK:      // Data byte has been tramsmitted and ACK received
            if(byTWIctrl & TWS_READ_OP){ // проверка на операцию записи
                       byTWIctrl |= TWS_READ_NOW;
                    TWCR = (1<<TWEN)|                             // TWI Interface enabled.
                            (1<<TWIE)|(1<<TWINT)|                  // Enable TWI Interupt and clear the flag.
                            (0<<TWEA)|(1<<TWSTA)|(0<<TWSTO)|       // Initiate a START condition.
                            (0<<TWWC);
                break;
            }
              if (ctTWI){        // передача данных
                    ctTWI--;
                    TWDR = *pTWItrans;
                pTWItrans++;
                TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                        (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to send byte
                           (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           //
                           (0<<TWWC);                                 //
              }else{                    // Send STOP after last byte
                    byTWIctrl = 0;                 // Set status bits to completed successfully.
                    TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                               (0<<TWIE)|(1<<TWINT)|                      // Disable TWI Interrupt and clear the flag
                               (0<<TWEA)|(0<<TWSTA)|(1<<TWSTO)|           // Initiate a STOP condition.
                               (0<<TWWC);                                 //
              }
              break;
    //-----------------------------------------------------------------------------
        case TWI_MRX_DATA_ACK:      // Data byte has been received and ACK tramsmitted
                  *pTWItrans = TWDR;
                pTWItrans++;
        case TWI_MRX_ADR_ACK:       // SLA+R has been tramsmitted and ACK received
                ctTWI--;
              if (ctTWI){                  // Detect the last byte to NACK it.
                    TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                               (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to read next byte
                               (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Send ACK after reception
                               (0<<TWWC);                                 //
              }else{                    // Send NACK after next reception
                    TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                               (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag to read next byte
                               (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // Send NACK after reception
                               (0<<TWWC);                                 //
              }
              break;
        case TWI_MRX_DATA_NACK:     // Data byte has been received and NACK tramsmitted
                  *pTWItrans = TWDR;
                  byTWIctrl = 0;                 // Set status bits to completed successfully.
                  TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                         (0<<TWIE)|(1<<TWINT)|                      // Disable TWI Interrupt and clear the flag
                         (0<<TWEA)|(0<<TWSTA)|(1<<TWSTO)|           // Initiate a STOP condition.
                         (0<<TWWC);                                 //
              break;
        case TWI_ARB_LOST:          // Arbitration lost
                byTWIctrl = 0;
                  TWCR = (1<<TWEN)|                                 // TWI Interface enabled
                          (1<<TWIE)|(1<<TWINT)|                      // Enable TWI Interupt and clear the flag
                          (0<<TWEA)|(1<<TWSTA)|(0<<TWSTO)|           // Initiate a (RE)START condition.
                          (0<<TWWC);                                 //
                  break;
//        case TWI_MTX_ADR_NACK:      // SLA+W has been tramsmitted and NACK received
//        case TWI_MRX_ADR_NACK:      // SLA+R has been tramsmitted and NACK received
//        case TWI_MTX_DATA_NACK:     // Data byte has been tramsmitted and NACK received
        //    case TWI_NO_STATE              // No relevant state information available; TWINT = “0”
//        case TWI_BUS_ERROR:         // Bus error due to an illegal START or STOP condition
        default:
                      byTWIstate = TWSR;                                     // Store TWSR and automatically sets clears noErrors bit.
                    byTWIctrl = 0;                                    // Reset TWI Interface
                      TWCR = (1<<TWEN)|                                 // Enable TWI-interface and release TWI pins
                             (0<<TWIE)|(0<<TWINT)|                      // Disable Interupt
                             (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // No Signal requests
                             (0<<TWWC);                                 //
    }
}

Модуль TWI не виснет, если на шине все в порядке. Но если некий слейв вдруг начинает притормаживать, в особенности если это тоже проц, с еще сырым кодом, то есть чему удивиться. У нас Меги8 работали год с PCF8563, пока батарея как то раз не разрядилась. Прога подвисла вся.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Aug 12 2007, 17:26
Сообщение #134


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(oran-be @ Aug 12 2007, 20:22) *
Код
//        case TWI_BUS_ERROR:         // Bus error due to an illegal START or STOP condition
        default:
                      byTWIstate = TWSR;                                     // Store TWSR and automatically sets clears noErrors bit.
                    byTWIctrl = 0;                                    // Reset TWI Interface
                      TWCR = (1<<TWEN)|                                 // Enable TWI-interface and release TWI pins
                             (0<<TWIE)|(0<<TWINT)|                      // Disable Interupt
                             (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // No Signal requests
                             (0<<TWWC);                                 //
    }
}

Модуль TWI не виснет, если на шине все в порядке. Но если некий слейв вдруг начинает притормаживать, в особенности если это тоже проц, с еще сырым кодом, то есть чему удивиться. У нас Меги8 работали год с PCF8563, пока батарея как то раз не разрядилась. Прога подвисла вся.

Открою Вам небольшой секрет на TWI_BUS_ERROR необходимо
отвечать выставлением TWSTO в TWCR в 1 , это сбрасывает ошибку шины.
Подробнее не смотрел, это просто сразу бросилось в глаза.

Так что, куририте даташиты внимательней, а потом обвиняйте производителя в глючности.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Aug 12 2007, 17:52
Сообщение #135


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(oran-be @ Aug 12 2007, 19:22) *
Модуль TWI не виснет, если на шине все в порядке. Но если некий слейв вдруг начинает притормаживать, в особенности если это тоже проц, с еще сырым кодом, то есть чему удивиться. У нас Меги8 работали год с PCF8563, пока батарея как то раз не разрядилась. Прога подвисла вся.

Вы знаете ,я примерно такой код в бутлоадере применил,(ну шил внешнюю память через бут),
правда без прерывания smile.gif тоесть у меня был напряг с размером проги бута smile.gif
А вообще такие вещи пишутся немного солиднее ,он у вас и повиснет ,но до этого регистр статуса вам даст ТРИЖДЫ знать ,что уходим в ступор smile.gif ,а выйти ,уж кто как любит ,или по собаке или лампочками моргаем или молча перезапускаемся.
Если слейв притормаживает ,тем более если слейв таже мега ,он аппаратно дает знать об этом мастеру по шине.

Вообще проблем по TWI я не замечал,а вот проблем из за освоения TWI и пониманием его работы - это было много раз ,не зря я выше писал "сначала нужно искать ераты своей программе smile.gif"

Ну отошли совсем от темы.
Чем приводить "скоростные" коды ,кто кого скоростнее smile.gif просто достаточно посмотреть таблицу ,какие команды за сколько тактов выполняются ,и сравнить ,если таких команд нет ,выяснить сколько займот команд выполнение такой же операции ,и сразу все станет ясно ,где впереди где сзади smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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