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

 
 
> Требуется совет по выбору RTOS, программист я хреновый
Electrovoicer
сообщение Apr 18 2006, 19:16
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 337
Регистрация: 1-02-06
Пользователь №: 13 874



Созревает проект на LPC213x. Сюдя по всему конечным автоматом на таймере обойтись не получится ввиду большого числа событий и источников прерываний. Это на мой профанский взгляд. Да и надо наконец научиться писать с использованием RTOS. В связи с чем просьба к общественности посоветовать ПРОСТУЮ RTOS. И не просто посоветовать, а подсказать где ее взять. В принципе и купить можно, но сначала хотелось бы пощупать. Главное чтобы софт был качественно задокументирован, а то в С++ я как свинья в апельсинах, разбираться с исходниками не буду да и не смогу наверное. Мне бы на пальцах показать, как создать тред и исполнить в нем мой код. Соответственно хотелось бы иметь готовый порт на мой процик. Вытесняющая она должна быть или невытесняющая, еще не понял. Чтобы это понять, желательно Ваши примеры задач, для которых то или иное больше подходит.
Также просьба не отвечать вроде "да на хрена тебе ртос", "атмел sam7 рулит" и "ваще надо на асме писать"

С уважением, я


--------------------
"А я все помню, я был не пьяный!.." (С)Владимир Семенович
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sensor_ua
сообщение Apr 21 2006, 08:20
Сообщение #2


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



У меня железка с неким ногодрыганием, устроенным типа импровизированной шины. Как известно, GPIO сами не имеют в АРМ операций чтение-модификация-запись, дык ещё в железке есть выборки внешних устройств на "шине" через опять же GPIO. Если подвигать GPIO в прерывании, а оно может возникнуть когда двигались GPIO вне прерывания, чегой-то нужно сохранять. Т.е. либо в административном порядке запрещать использовать GPIO в прерывании, либо реализовать атомарность каким-либо способом. АРМ позволяет, например, выполнить SWI, можно просто запрещать прерывания на входе в критическую секцию, при выходе - разрешать, но тогда если при входе если были запрещены прерывания, при выходе они разрешатся... иначе нужно при входе не просто запрещать, а сохранять регистр статуса, затем запрещать прерывания, а при выходе всего-лишь восстанавливать что было. Можно вообще завести обработчик IRQ, в который вваливаться через VICSoftInt, а там творить чего угодно, пока не разрешили вложенные прерыванияwink.gif...

Цитата(Andy Mozzhevilov @ Apr 21 2006, 11:13) *
Цитата(zuy @ Apr 21 2006, 13:35) *

А DASM вроде как прав получается, касательно критической секции.
Если Таненбаума книгу "Современные ОС" посмотреть, так там написано, что
Критическая секция служит для того, чтобы предотвратить одновременный доступ к обшим данным. Одно из требований, это то, что в критической области не могут находиться одновременно 2 процесса.
Но для этого действительно не обязательно запрещать прерывания. Поток находящийся в крит.секции, может вытесниться, но если какой другой поток захочет в нее войти, он должен ожидать пока она освободится.


В общем, спор о терминах.
В принципе можно называть критической секцией любую секцию, где предотвращается одновременный доступ к каким-либо ресурсам из разных процессов. Способ реализации может быть, как методом запрета прерываний, так и с организацией доступа через бинарный семафор (или можно применить модное слово мютекс smile.gif) или какой-нибудь флаг.
Причем иногда доступ запретом прерываний вообще может оказаться не приемлем, потому как ресурс, доступ к которому разделяется, может сам работать через прерывания, например захватили uart, передали строку символов, освободили uart. Понятно, что разделить доступ к такому ресурсу через запрет прерываний нельзя.
Другое дело, когда надо сделать действие, достаточно короткое и быстрое, но требующее также гарантий ограничения доступа к этом ресурсу. Например, работа со связанными списками. Вставка элемента списка в цепочку должна быть сделана в критической секции. Но пользование в этом случае системных сервисов ОС (типа мютексов) - нецелесообразно, потому как накладные расходы возрастут раз в 100 по сравнению с методом разрешения/запрещения прерываний.
И совсем другое дело, когда говорится о критических секциях, используемых в самой ОС, то есть когда сервисы ОС прописываются. Здесь термин "критическая секция" как раз всегда означает запрещение прерываний. А речь как раз о них и была (выше по теме).
У меня терминология (моя локальная) устоялась так, что критической секцией я называю секцию, где запрещены прерывания, и не важно, используется в проекте ОС или нет.


Цитата(sensor_ua @ Apr 21 2006, 13:44) *
Пока пороюсь поищу что такое #+0xC0, а то "чукча не читатель";)))
Может подскажете, где? А то ARM7TDMI Data Sheet (ARM DDI 0029E) не помогает...


#0xC0 маска для запрета IRQ и FIQ прерываний
Маска 0x80 для регистра CPSR - это запрет IRQ , а 0x40 - для запрета FIQ.

Простите, не указал точно - мне непонятно только "#+"


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 21 2006, 16:17
Сообщение #3


Гуру
******

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



Цитата(sensor_ua @ Apr 21 2006, 11:20) *
У меня железка с неким ногодрыганием, устроенным типа импровизированной шины. Как известно, GPIO сами не имеют в АРМ операций чтение-модификация-запись, дык ещё в железке есть выборки внешних устройств на "шине" через опять же GPIO. Если подвигать GPIO в прерывании, а оно может возникнуть когда двигались GPIO вне прерывания, чегой-то нужно сохранять. Т.е. либо в административном порядке запрещать использовать GPIO в прерывании, либо реализовать атомарность каким-либо способом. АРМ позволяет, например, выполнить SWI, можно просто запрещать прерывания на входе в критическую секцию, при выходе - разрешать, но тогда если при входе если были запрещены прерывания, при выходе они разрешатся... иначе нужно при входе не просто запрещать, а сохранять регистр статуса, затем запрещать прерывания, а при выходе всего-лишь восстанавливать что было. Можно вообще завести обработчик IRQ, в который вваливаться через VICSoftInt, а там творить чего угодно, пока не разрешили вложенные прерыванияwink.gif...

Я не понял :-( Вообще ничего из вышеизложенного не понял.
Если речь идет о том, что Вы имеете некоторую процедуру,которая для обеспечения ее непрерывности
обрамлена critical и по этой причине ее нельзя вызывать из обработчика прерывания, то
0. Нужно делать вещи максимально близкие к естественным.
1. Делается процедура без запретов.
2. Для работы в прерывании вызывается прямо или через прямую макроподстановку
3. Для прочего использования через макрос-обертку с __disable/enable.
Если обработчики прерываний в отдельном файле, то макроимена могут быть вообще одинаковыми.
В результате начисто отпадают все ненужные навороты как в виде 'счетчиков', так и ввиде 'сохранений', заодно не надо вникать в реализацию critical в каждой конкретной операционке.

Все выглядит (живой пример) примерно так:
Код
//-----------------------------------------------------------
// Read/Write SLIC Registers with CLOSED interrupts
void wr_sreg_int( BYTE channel, BYTE reg,  BYTE value );
......
//-----------------------------------------------------------
// Read/Write SLIC Registers
#define wr_sreg( x, y, z )             \
{    __disable_interrupt();          \
    wr_sreg_int( x, y, z );            \
    __enable_interrupt();  }

......


Если всенеприменнейше хотите critical, то можете добавить свой critical для обработчиков прерываний,
единственной функцией которого будет наращивание/уменьшение 'счетчика'.

Цитата(sensor_ua @ Apr 21 2006, 19:08) *
2 zltigo

У меня насчёт правильности запрещения/разрешения прерываний вопрос к Вам остался.
Представьте себе, что пишет подпрограмму с критической секцией не Вы, а коллега. Вы эту подпрограмму интегрируете в свой проект.
Ответьте, пожалуйста, на каком основании Ваш коллега имеет право разрешать прерывания (при выходе из критической секции), если он не узнаЁт при запрещении (при входе в критическую секцию), были ли они (прерывания) разрешены?

Так они и не будут разрешены если Вы вызвали его из критической секции и соответственно
счетчик на входе в подпрограмму колеги уже не будет 0. Ежели коллега, или Вы пожелает в _прикладной_ программе воспользоваться прямым запретом/разрешением вместо critical , то, как здесь уже было замечено, надо наказывать, ибо против лома нет приема.

Сообщение отредактировал zltigo - Apr 21 2006, 16:26


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Apr 21 2006, 16:23
Сообщение #4


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата(zltigo @ Apr 21 2006, 19:17) *
Цитата(sensor_ua @ Apr 21 2006, 11:20) *

У меня железка с неким ногодрыганием, устроенным типа импровизированной шины. Как известно, GPIO сами не имеют в АРМ операций чтение-модификация-запись, дык ещё в железке есть выборки внешних устройств на "шине" через опять же GPIO. Если подвигать GPIO в прерывании, а оно может возникнуть когда двигались GPIO вне прерывания, чегой-то нужно сохранять. Т.е. либо в административном порядке запрещать использовать GPIO в прерывании, либо реализовать атомарность каким-либо способом. АРМ позволяет, например, выполнить SWI, можно просто запрещать прерывания на входе в критическую секцию, при выходе - разрешать, но тогда если при входе если были запрещены прерывания, при выходе они разрешатся... иначе нужно при входе не просто запрещать, а сохранять регистр статуса, затем запрещать прерывания, а при выходе всего-лишь восстанавливать что было. Можно вообще завести обработчик IRQ, в который вваливаться через VICSoftInt, а там творить чего угодно, пока не разрешили вложенные прерыванияwink.gif...

Я не понял :-( Вообще ничего из вышеизложенного не понял.
Если речь идет о том, что Вы имеете некоторую процедуру,которая для обеспечения ее непрерывности
обрамлена critical и по этой причине ее нельзя вызывать из обработчика прерывания, то
0. Нужно делать вещи максимально близкие к естественным.
1. Делается процедура без запретов.
2. Для работы в прерывании вызывается прямо или через прямую макроподстановку
3. Для прочего использования через макрос-обертку с __disable/enable.
Если обработчики прерываний в отдельном файле, то макроимена могут быть вообще одинаковыми.
В результате начисто отпадают все ненужные навороты как в виде 'счетчиков', так и ввиде 'сохранений', заодно не надо вникать в реализацию critical в каждой конкретной операционке.

Все выглядит (живой пример) примерно так:
Код
//-----------------------------------------------------------
// Read/Write SLIC Registers with CLOSED interrupts
void wr_sreg_int( BYTE channel, BYTE reg,  BYTE value );
......
//-----------------------------------------------------------
// Read/Write SLIC Registers
#define wr_sreg( x, y, z )             \
{    __disable_interrupt();          \
    wr_sreg_int( x, y, z );            \
    __enable_interrupt();  }

......




Цитата(sensor_ua @ Apr 21 2006, 19:08) *
2 zltigo

У меня насчёт правильности запрещения/разрешения прерываний вопрос к Вам остался.
Представьте себе, что пишет подпрограмму с критической секцией не Вы, а коллега. Вы эту подпрограмму интегрируете в свой проект.
Ответьте, пожалуйста, на каком основании Ваш коллега имеет право разрешать прерывания (при выходе из критической секции), если он не узнаЁт при запрещении (при входе в критическую секцию), были ли они (прерывания) разрешены?

Так они и не будут разрешены если Вы вызвали его из критической секции и соответственно
счетчик на входе в подпрограмму колеги уже не будет 0. Ежели коллега, или Вы пожелает в _прикладной_ программе воспользоваться прямым запретом/разрешением вместо critical , то, как здесь уже было замечено, надо наказывать, ибо против лома нет приема.

Я о варианте, когда в основной программе прерывания в какой-то прекрасный момент выключены не в критической секции. Как быть с разрешением в подпрограмме коллеги?


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 21 2006, 16:32
Сообщение #5


Гуру
******

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



Цитата(sensor_ua @ Apr 21 2006, 19:23) *
Я о варианте, когда в основной программе прерывания в какой-то прекрасный момент выключены не в критической секции. Как быть с разрешением в подпрограмме коллеги?

Мне казалось, что я ответил. У меня, тогда больше нет слов для обьяснения :-(.
Попробуйте перечитать написанное в моем предыдущем посте.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Electrovoicer   Требуется совет по выбору RTOS   Apr 18 2006, 19:16
- - vet   uCOS-II - распространённая, простая и нетребовател...   Apr 18 2006, 20:18
- - beer_warrior   ЦитатаНа сайте можно взять готовые шаблоны проекто...   Apr 18 2006, 20:58
- - Evgeny_CD   Еще можно посоветовать Tasking Library из CrossWor...   Apr 18 2006, 21:37
|- - dch   eCos тоже хвалят ...Я не приминул пригласить его ...   Apr 18 2006, 22:29
|- - alogvinov   Цитата(dch @ Apr 19 2006, 02:29) eCos тож...   Apr 19 2006, 04:47
- - DASM   а embOS от UCOS вообще отличается ? Уж больно похо...   Apr 19 2006, 05:11
|- - alogvinov   Цитата(DASM @ Apr 19 2006, 09:11) а embOS...   Apr 19 2006, 09:31
|- - Andy Mozzhevilov   Цитата(alogvinov @ Apr 19 2006, 15:31) Ци...   Apr 19 2006, 12:18
|- - alogvinov   Цитата(Andy Mozzhevilov @ Apr 19 2006, 16...   Apr 20 2006, 05:26
|- - Andy Mozzhevilov   Цитата(alogvinov @ Apr 20 2006, 11:26) По...   Apr 20 2006, 05:34
|- - DASM   Цитата(alogvinov @ Apr 20 2006, 09:26) Ци...   Apr 20 2006, 06:24
|- - dxp   Цитата(alogvinov @ Apr 20 2006, 12:26) По...   Apr 20 2006, 06:30
|- - alogvinov   Цитата(dxp @ Apr 20 2006, 10:30) Цитата(a...   Apr 20 2006, 10:15
- - Electrovoicer   Всем спасибо, буду щупать uCOS-II. на местном фтп ...   Apr 19 2006, 05:48
- - Electrovoicer   а CrossWorks не надо, и все иже с ним. Я с этим со...   Apr 19 2006, 06:01
- - volkanaft   http://www.caxapa.ru/echo/arm.html?id=53619...   Apr 19 2006, 09:22
- - DASM   мужики, вы правда зря Nucleus игнорируете.. неплох...   Apr 19 2006, 09:54
|- - alogvinov   Цитата(DASM @ Apr 19 2006, 13:54) мужики,...   Apr 20 2006, 04:30
- - sensor_ua   А я решил в попытке решения подобной задачи (LPC21...   Apr 19 2006, 10:14
|- - zltigo   Цитата(sensor_ua @ Apr 19 2006, 13:14) А ...   Apr 19 2006, 18:27
|- - sensor_ua   Цитата(zltigo @ Apr 19 2006, 21:27) Цитат...   Apr 20 2006, 09:36
|- - zltigo   Цитата(sensor_ua @ Apr 20 2006, 12:36) В ...   Apr 20 2006, 16:44
|- - dxp   Цитата(zltigo @ Apr 20 2006, 23:44) Тепер...   Apr 21 2006, 05:42
|- - zltigo   Цитата(dxp @ Apr 21 2006, 08:42) А зачем ...   Apr 21 2006, 06:20
|- - dxp   Цитата(zltigo @ Apr 21 2006, 13:20) -Безб...   Apr 21 2006, 06:54
|- - zltigo   Цитата(dxp @ Apr 21 2006, 09:54) Ну да, т...   Apr 21 2006, 07:25
|- - dxp   Цитата(zltigo @ Apr 21 2006, 14:25) Ну а ...   Apr 21 2006, 09:23
|- - zltigo   В какую-то параною скатывается разговор. Почему _...   Apr 21 2006, 15:45
- - Electrovoicer   так... а в uCOS-II какое количество задач поддержи...   Apr 19 2006, 10:18
- - vet   64 задачи. Да, должны быть разными; впрочем, лично...   Apr 19 2006, 10:54
- - jasper   Цитата64 задачи. Начиная с версии 2.80 255!...   Apr 19 2006, 11:54
|- - Andy Mozzhevilov   Цитата(jasper @ Apr 19 2006, 17:54) Цитат...   Apr 19 2006, 12:06
- - Electrovoicer   кстати а программу для мониторинга висящих задач/з...   Apr 19 2006, 12:53
|- - Evgeny_CD   Цитата(Electrovoicer @ Apr 19 2006, 16:53...   Apr 19 2006, 20:02
|- - Andy Mozzhevilov   Цитата(Evgeny_CD @ Apr 20 2006, 02:02) Ци...   Apr 20 2006, 02:52
- - DASM   FTP лежит, но думаю вот это оно http://www.segger....   Apr 20 2006, 03:20
- - Electrovoicer   спасибо! и все же что такое C-SPY?   Apr 20 2006, 04:52
- - jasper   Цитатаи все же что такое C-SPY? Так называется деб...   Apr 20 2006, 05:13
- - Evgeny_CD   Если я ничего не путаю, в uCOS 2.81 появилась реал...   Apr 20 2006, 09:10
- - DASM   нифигаааа не понял......   Apr 20 2006, 09:43
- - sensor_ua   В TNKernel и uCOS-II сохраняется регистр статуса и...   Apr 20 2006, 09:51
- - sensor_ua   Специально скачал последнюю FreeRTOS 4.0.1, а то р...   Apr 20 2006, 17:50
- - zltigo   Цитата(sensor_ua @ Apr 20 2006, 20:50) са...   Apr 20 2006, 18:54
|- - sensor_ua   Цитата(zltigo @ Apr 20 2006, 21:54) Цитат...   Apr 20 2006, 19:04
- - zltigo   Цитата(sensor_ua @ Apr 20 2006, 22:04) Ну...   Apr 20 2006, 19:28
|- - sensor_ua   Цитата(zltigo @ Apr 20 2006, 22:28) Цитат...   Apr 20 2006, 20:12
- - zltigo   Цитата(sensor_ua @ Apr 20 2006, 23:12) На...   Apr 20 2006, 20:51
|- - sensor_ua   Цитата(zltigo @ Apr 20 2006, 23:51) Цитат...   Apr 21 2006, 07:44
- - DASM   объясните неразумному, почему EnterCriticalSection...   Apr 21 2006, 05:46
|- - Andy Mozzhevilov   Цитата(DASM @ Apr 21 2006, 11:46) объясни...   Apr 21 2006, 05:58
- - DASM   а мне всегда казалось, что назначение критических ...   Apr 21 2006, 06:01
|- - Andy Mozzhevilov   Цитата(DASM @ Apr 21 2006, 12:01) а мне в...   Apr 21 2006, 06:26
- - vet   назначение критических секций - не допустить однов...   Apr 21 2006, 06:35
- - DASM   Andy , ты перепутал семафор с мьютексом. К тому же...   Apr 21 2006, 06:43
|- - zltigo   Цитата(DASM @ Apr 21 2006, 09:43) Дж.Рихт...   Apr 21 2006, 06:48
|- - Andy Mozzhevilov   Цитата(DASM @ Apr 21 2006, 12:43) Andy , ...   Apr 21 2006, 06:50
- - DASM   Извините за ошибки распознования текста finereader...   Apr 21 2006, 06:51
- - DASM   ДАЕШЬ 64-битную WIndows в embedded !!!   Apr 21 2006, 06:58
- - Electrovoicer   мда... я примерно одно слово понял из всего написа...   Apr 21 2006, 07:29
- - DASM   не всякий автомобилист знает, как устроена автомат...   Apr 21 2006, 07:31
- - zuy   А DASM вроде как прав получается, касательно крити...   Apr 21 2006, 07:35
|- - Andy Mozzhevilov   Цитата(zuy @ Apr 21 2006, 13:35) А DASM в...   Apr 21 2006, 08:13
- - DASM   ну так еще бы Рихтер был не прав..   Apr 21 2006, 07:37
- - vet   http://en.wikipedia.org/wiki/Critical_section   Apr 21 2006, 07:42
|- - DASM   Цитата(vet @ Apr 21 2006, 11:42) http://e...   Apr 21 2006, 07:45
|- - dxp   Цитата(DASM @ Apr 21 2006, 14:45) Цитата(...   Apr 21 2006, 09:40
- - vet   Продолжаю цитирование. A solution to the critical ...   Apr 21 2006, 07:57
- - DASM   Продолжу несогласие, Критическая секция защишает Р...   Apr 21 2006, 07:58
- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 10:44) Во...   Apr 21 2006, 08:02
- - vet   DASM Ресурс можно защищать и мьютексами, они для э...   Apr 21 2006, 08:04
- - DASM   тогда предлагаю прямо и говорить "я называю к...   Apr 21 2006, 08:13
|- - Andy Mozzhevilov   Цитата(sensor_ua @ Apr 21 2006, 14:20) Пр...   Apr 21 2006, 08:42
|- - sensor_ua   Цитата(zltigo @ Apr 21 2006, 19:32) Цитат...   Apr 21 2006, 17:05
|- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 20:05) Я ...   Apr 21 2006, 19:06
|- - sensor_ua   Цитата(zltigo @ Apr 21 2006, 22:06) Цитат...   Apr 21 2006, 19:45
|- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 22:45) Жа...   Apr 21 2006, 20:19
- - sensor_ua   ЦитатаНу, это значит "не минус" smile.gi...   Apr 21 2006, 08:46
- - zuy   to: Andy Mozzhevilov Действительно реализация кри...   Apr 21 2006, 08:49
- - DASM   правильно, конкуренции нет, но КУСОК КОДА то испол...   Apr 21 2006, 08:56
- - zuy   Ааааа, все, понял к чему пример. Как раз к прерыва...   Apr 21 2006, 09:01
- - DASM   1) У всех этих экземпляров естественно один и тотж...   Apr 21 2006, 09:47
- - yuri_t   Дело все в том,что понятие критическая секция ( мо...   Apr 21 2006, 09:53
- - yuri_t   И еще: IMHO, пользователь любой ОS от Windows/Li...   Apr 21 2006, 12:22
|- - Evgeny_CD   Цитата(yuri_t @ Apr 21 2006, 16:22) IMHO,...   Apr 21 2006, 12:47
- - DASM   одобрям-с =)   Apr 21 2006, 12:27
- - sensor_ua   2 yuri_t о TNKernel в текущем релизе int tn_cpu_...   Apr 21 2006, 15:13
- - sensor_ua   2 zltigo У меня насчёт правильности запрещения/ра...   Apr 21 2006, 16:08
- - DASM   Читаю, нервно хихикаю :-) Надеюсь автор поста полу...   Apr 21 2006, 16:23
- - yuri_t   To sensor_ua ------------------- Учитывая Ваш и...   Apr 21 2006, 16:36
|- - sensor_ua   Цитата(yuri_t @ Apr 21 2006, 19:36) To se...   Apr 21 2006, 17:15
- - yuri_t   To sensor_ua ------------------- Ситуация, когда...   Apr 21 2006, 17:33
|- - sensor_ua   Цитата(yuri_t @ Apr 21 2006, 20:33) To se...   Apr 21 2006, 18:07
- - yuri_t   Когда я писал "Например Visual C/C++ 6 (Micro...   Apr 21 2006, 18:24
- - DASM   по-моему глюк с областью видимостью наблюдался у V...   Apr 21 2006, 18:28
- - yuri_t   To DASM ------------ Вы правы.   Apr 21 2006, 18:53
2 страниц V   1 2 >


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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