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

 
 
> Начало работы with scmRTOS, Несколько вопросиков
URANst
сообщение Feb 20 2008, 14:56
Сообщение #1


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

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



Хочется научиться работать с этой штукой - scmRTOS & AVR(Atmega8) & IAR 4.30A ! Почитал темы которые есть на форуме, почитал User's Manual v2. Возникло некторое количество вопросов:
1. Какая последовательность создания проекта: мои предположения - создаем в IAR новый проект, тискаем добавить файлы в проект и добавляем OS_Kernel.cpp , OS_Services.cpp , OS_Target_asm.s90 , OS_Target_cpp.cpp , usrlib.cpp. В maim.cpp пишем
Код
#include <scmRTOS.h>

. Затем каким то образом нужно создать самому как я понял scmRTOS_TARGET_CFG.h и scmRTOS_CONFIG.h, но как не ясно или их нужно тупо скопировать из примера автора и если что нада то менять.
2. Почему в примерах автор добавляет
Код
void OS::SystemTimerUserHook() { }
void OS::IdleProcessUserHook() { }


Так нужно делать всегда ?
3. Дальше >> понятно что для AVR передачу управления можно осуществить сгенерировав прерывание например от компоратора как описано в документации, но непонятно как нужно оформить функцию обработки этого прерывания, и чем она будет отличаться от функции обработки других прерываний.

О взаимодействии между потоками пока вроде понятно.

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

Мог написать что - нибудь глупое, потому как в круг моих понятий scmRTOS пока входит очень туманно или вообще не входит.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alux
сообщение Mar 18 2008, 07:50
Сообщение #2


Знающий
****

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



Как узнать точное использование стека процессами? А то я все делаю вслепую: выставил 100 - работает. Добавил ф-цию - зависает... Использую AVR (Mega324P). JTAG исключен из-за отсутствия свободных выводов. В симуляторе тоже проблематично (как получить ответ от перефирии I2C, SPI, ?..). Было бы совсем неплохо, если бы средствами ОС была возможность в отладочном режиме посмотреть размер неиспользуемого стека каждой задачи через терминал. Такую возможность я увидел в ОС нашего соотечественника uOS. Там для этой цели используется ф-ция task_stack_avail().

И второе. По поводу ф-ции Blink в режиме редактирования времени. Я это реализовал с использованием очереди сообщений, как в примере 3- Channel. Создал от базового класса TMsg объект Blink с методом InvertRect(...); Вопрос, собственно, заключается в следующем : Как обеспечить периодический MsgQueue.push(&Blink) ? Конечно, можно для этой цели использовать отдельный таймер, но хотелось бы обойтись системным таймером. Но не хочу использовать SystemTimerUserHook() по понятным причинам. Может воспользоваться OS::GetTickCount(); которая, на сколько я понял, возвращает общее количество тиков с момента запуска ОС ? Тогда при входе в п. меню "Редактирование" сохранить T = OS::GetTickCount(), а в низкоприоритетном процессе LCDProc отсчитывать от значения T 500 тиков (500*2=1сек) и тогда класть сообщение Blink в очередь. Также нужно учитывать переполнение счетчика. Что скажете?
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 18 2008, 09:02
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(alux @ Mar 18 2008, 13:50) *
Как узнать точное использование стека процессами?

Сергей Борщ советовал добавить в конструктор процесса memset, которая заполнит стековую память указанным значением. Стек для эксперимента надо взять с запасом. После этого делается прогон программы и анализируется глубина потребления стека.

Цитата(alux @ Mar 18 2008, 13:50) *
Вопрос, собственно, заключается в следующем : Как обеспечить периодический MsgQueue.push(&Blink) ? Конечно, можно для этой цели использовать отдельный таймер, но хотелось бы обойтись системным таймером. Но не хочу использовать SystemTimerUserHook() по понятным причинам. Может воспользоваться OS::GetTickCount(); которая, на сколько я понял, возвращает общее количество тиков с момента запуска ОС ? Тогда при входе в п. меню "Редактирование" сохранить T = OS::GetTickCount(), а в низкоприоритетном процессе LCDProc отсчитывать от значения T 500 тиков (500*2=1сек) и тогда класть сообщение Blink в очередь. Также нужно учитывать переполнение счетчика. Что скажете?

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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 18 2008, 15:19
Сообщение #4


Знающий
****

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



Цитата(dxp @ Mar 18 2008, 13:02) *
После этого делается прогон программы и анализируется глубина потребления стека.
Уж извините за назойливость. А каким образом проанализировать глубину потребления стека? Вернее, как просмотреть содержимое стека?
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 19 2008, 04:32
Сообщение #5


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(alux @ Mar 18 2008, 21:19) *
Уж извините за назойливость. А каким образом проанализировать глубину потребления стека? Вернее, как просмотреть содержимое стека?

В данном случае руками либо написав функцию, которая будет анализировать область памяти, занятую под стек - адреса-то все известны.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 19 2008, 07:26
Сообщение #6


Знающий
****

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



Цитата(dxp @ Mar 19 2008, 08:32) *
В данном случае руками либо написав функцию, которая будет анализировать область памяти, занятую под стек - адреса-то все известны.

Что значит "руками" ? Или приведите, пожалуйста, пример функции.
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 19 2008, 09:42
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(alux @ Mar 19 2008, 13:26) *
Что значит "руками" ?

Руками - значит, остановить эмулятором прогон программы и посмотреть до куда стек заполнился.

Цитата(alux @ Mar 19 2008, 13:26) *
Или приведите, пожалуйста, пример функции.

Предлагаете написать мне для вас функцию? smile.gif Там все это совсем не сложно - адрес объекта известен, размер его полей до стека тоже известен, отсюда можно вычислить адрес, где начинается стек. Размер стека тоже известен. По сути надо просто от начала стека пройти до первого значения, которое отличается от значения по умолчанию (того, которым заполнен стек сначала). Это и будет размер свободного пространства в стеке. Далее, можно это опять же эмулятором смотреть, а можно вываливать хоть на терминал или куда удобно.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
alux
сообщение Jun 28 2008, 08:38
Сообщение #8


Знающий
****

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



Цитата(dxp @ Mar 19 2008, 12:42) *
Там все это совсем не сложно - адрес объекта известен, размер его полей до стека тоже известен, отсюда можно вычислить адрес, где начинается стек. Размер стека тоже известен. По сути надо просто от начала стека пройти до первого значения, которое отличается от значения по умолчанию (того, которым заполнен стек сначала). Это и будет размер свободного пространства в стеке. Далее, можно это опять же эмулятором смотреть, а можно вываливать хоть на терминал или куда удобно.

Хочу вернуться к актуальному для меня сегодня вопросу определения размеров потребления стека процессами. scmRTOS порт IAR, AVR. Можно хотя бы пару строк кода примера привести? Допустим, создан объект
Код
TKeyScan  KeyScan;          // Процесс обработки клавиатуры
с параметрами
Код
typedef OS::process<OS::pr0, 250, 32> TKeyScan;   // Proc1;

Задача: вычислить реальные CSTACK, RSTACK , использованные этим процессом в runtime.

Ну, а вывести эти значения на ЖКИ в виде числа - это не проблема.

И второй вопрос. Размер CSTACK, RSTACK в опциях компилятора имеет отношение только к функциям, которые вызываются до запуска OS::Run() ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 28 2008, 12:29
Сообщение #9


Гуру
******

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



Цитата(alux @ Jun 28 2008, 11:38) *
Можно хотя бы пару строк кода примера привести?

Задача: вычислить реальные CSTACK, RSTACK , использованные этим процессом в runtime.
Примерно так: добавляем в конструктор процесса заполнение стека каким-то числом и добавляем функции сканирования стека:
Код
        template<TPriority pr, word stack_size>
        class process : public TBaseProcess
        {
        public:
            INLINE process() : TBaseProcess(&Stack[stack_size/sizeof(TStackItem)]
                                      , pr
                                      , (void (*)())Exec)
            {
                TStackItem *pDst = Stack;
                word Size = StackPointer - Stack;
                while(Size)
                {
                    *pDst++ = 0xAB;
                    --Size;
                }
            }
            static int StackFree()
            {
                word Free = 0;
                for(;;)   // stack always has non-0xAB items.
                {
                    if( Stack[Free] != 0xAB )
                        return Free;
                    ++Free;
                }
            }
            static int StackUsed() { return stack_size - StackFree(); }
            ................
Для двухстекового варианта переделайте сами. Для простоты функции возвращают результат в количестве элементов стека (а не байтах, но для AVR они совпадают). Не проверял, но думаю идея понятна. Посмотрите также еще один вариант реализации.
Цитата(alux @ Jun 28 2008, 11:38) *
И второй вопрос. Размер CSTACK, RSTACK в опциях компилятора имеет отношение только к функциям, которые вызываются до запуска OS::Run() ?
Да. Эти же стеки используются для прерываний, если вы выбрали #define scmRTOS_ISRW_TYPE TISRW_SS


--------------------
На любой вопрос даю любой ответ
"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
alux
сообщение Apr 14 2009, 03:03
Сообщение #10


Знающий
****

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



Как определить размеры потребления RSTACK процессами? Вариант Сергея Борща (сообщение #77) определения CSTACK работает, если функции-члены StackFree() и StackUsed() определить НЕ static, т.к. в них используется нестатические переменные Stack, RStack.

Пробовал вставить в конструктор процесса:
Код
        template<TPriority pr, word stack_size, word rstack_size>
        class process : public TBaseProcess
        {
        public:
            INLINE process() : TBaseProcess( &Stack[stack_size/sizeof(TStackItem)]
                                    , &RStack[rstack_size/sizeof(TStackItem)]
                                    , pr
                                    , (void (*)())Exec)
            {
             // Заполнить RSTACK процесса значением 0xAB
             TStackItem *pDst = RStack;
             word Size = GetReturnSP() - RStack;
             while(Size)
             {
                 *pDst++ = 0xAB;
                 --Size;
             }
             }  

            OS_PROCESS int RStackFree()
            {
                word Free = 0;
                for(;;)   // stack always has non-0xAB items.
                {
                    if( RStack[Free] != 0xAB )
                        return Free;
                    ++Free;
                }
            }
                      OS_PROCESS static void Exec();
        private:
            TStackItem Stack [stack_size/sizeof(TStackItem)];
            TStackItem RStack[rstack_size/sizeof(TStackItem)];
        };

Безрезультатно. После этого программа даже не запускается sad.gif
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 14 2009, 06:04
Сообщение #11


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(alux @ Apr 14 2009, 10:03) *
Как определить размеры потребления RSTACK процессами? Вариант Сергея Борща (сообщение #77) определения CSTACK работает, если функции-члены StackFree() и StackUsed() определить НЕ static, т.к. в них используется нестатические переменные Stack, RStack.

Пробовал вставить в конструктор процесса:

Можно посоветовать внимательно посмотреть на количество циклов при заполнении памяти - правильное ли количество ячеек заполняется (т.е. правильно ли вычислен Size). Иначе (если больше), то там Memory Overwrite со всеми вытекающими.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
alux
сообщение Apr 14 2009, 11:09
Сообщение #12


Знающий
****

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



Цитата(dxp @ Apr 14 2009, 09:04) *
Иначе (если больше), то там Memory Overwrite со всеми вытекающими.

Не работает, даже если уменьшить Size :
Size = GetReturnSP() - RStack - 2;

Странно, ведь при вычислении реального CSTACK эти функции работают...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- URANst   Начало работы with scmRTOS   Feb 20 2008, 14:56
- - dxp   Цитата(URANst @ Feb 20 2008, 20:56) . Зат...   Feb 21 2008, 04:11
- - URANst   Вот взял из примера , это обработчик прерывания, к...   Feb 21 2008, 06:50
- - URANst   С предыдущим вроде разобрался, все оказалось проще...   Feb 21 2008, 11:55
- - IgorKossak   ENABLE_NESTED_INTERRUPTS(); - разрешить вложенные ...   Feb 21 2008, 12:14
- - URANst   Так получается что 1 прерывание сис таймера - это ...   Feb 21 2008, 12:36
|- - spf   Цитата(URANst @ Feb 21 2008, 17:36) Так п...   Feb 21 2008, 14:14
- - alux   Тоже решил попробовать эту ОС. Долго не мог решитс...   Mar 2 2008, 17:02
|- - dxp   Цитата(alux @ Mar 2 2008, 23:02) Выдает п...   Mar 3 2008, 04:55
- - alux   Так что же мне делать в этом конкретном случае кро...   Mar 3 2008, 06:53
|- - IgorKossak   Цитата(alux @ Mar 3 2008, 08:53) Может не...   Mar 3 2008, 11:53
|- - alux   Цитата(IgorKossak @ Mar 3 2008, 15:53) Су...   Mar 4 2008, 15:43
|- - IgorKossak   Цитата(alux @ Mar 4 2008, 17:43) В overvi...   Mar 4 2008, 20:09
- - alux   При включении моих исходников проекта на Си в прое...   Mar 4 2008, 14:13
|- - Сергей Борщ   Цитата(alux @ Mar 4 2008, 16:13) Мой прое...   Mar 4 2008, 16:02
|- - dxp   Цитата(Сергей Борщ @ Mar 4 2008, 22:02) Г...   Mar 5 2008, 04:55
|- - alux   Цитата(dxp @ Mar 5 2008, 08:55) Регистра ...   Mar 5 2008, 07:36
|- - Сергей Борщ   Цитата(alux @ Mar 5 2008, 09:36) Вот толь...   Mar 5 2008, 10:49
||- - Сергей С.   Цитата(Сергей Борщ @ Mar 5 2008, 14:49) Н...   Mar 6 2008, 06:53
||- - Сергей Борщ   Цитата(Сергей С. @ Mar 6 2008, 08:53) Как...   Mar 6 2008, 13:26
||- - Сергей С.   Цитата(Сергей Борщ @ Mar 6 2008, 17:26) Е...   Mar 6 2008, 20:14
|- - dxp   Цитата(alux @ Mar 5 2008, 13:36) Почему н...   Mar 5 2008, 11:14
|- - Stas633   И снова "уровень оптимизации".. / см....   Jul 30 2008, 18:42
- - alux   Имеет ли значение уровень оптимизации компилятора ...   Mar 4 2008, 16:09
- - alux   Мне не понятно, почему для генерации программного ...   Mar 9 2008, 21:15
|- - Сергей Борщ   Цитата(alux @ Mar 9 2008, 23:15) Мне не п...   Mar 10 2008, 01:42
|- - alux   Цитата(Сергей Борщ @ Mar 10 2008, 05:42) ...   Mar 10 2008, 04:40
|- - ReAl   Цитата(alux @ Mar 10 2008, 06:40) Почему?...   Mar 10 2008, 09:08
|- - alux   Спасибо за разъяснение. Маленькое уточнение: sbi P...   Mar 10 2008, 09:56
|- - ReAl   Цитата(alux @ Mar 10 2008, 11:56) Маленьк...   Mar 10 2008, 15:36
|- - alux   Цитата(ReAl @ Mar 10 2008, 19:36) Глянул ...   Mar 10 2008, 16:00
|- - Сергей Борщ   Цитата(alux @ Mar 10 2008, 18:00) Но это ...   Mar 10 2008, 16:52
- - alux   Возникло пару вопросов. Допустим, есть три процесс...   Mar 11 2008, 12:37
|- - dxp   Цитата(alux @ Mar 11 2008, 18:37) И второ...   Mar 11 2008, 14:03
|- - Сергей Борщ   Цитата(alux @ Mar 11 2008, 14:37) 3) Посл...   Mar 11 2008, 16:48
|- - alux   Цитата(Сергей Борщ @ Mar 11 2008, 20:48) ...   Mar 11 2008, 20:31
|- - Сергей Борщ   Цитата(alux @ Mar 11 2008, 22:31) Так изн...   Mar 11 2008, 22:31
|- - alux   Цитата(Сергей Борщ @ Mar 12 2008, 02:31) ...   Mar 12 2008, 06:48
|- - Сергей Борщ   Цитата(alux @ Mar 12 2008, 08:48) Как бы ...   Mar 12 2008, 08:06
|- - dxp   Цитата(alux @ Mar 12 2008, 12:48) Согласе...   Mar 12 2008, 09:06
- - alux   Реализация меню - это отдельная тема для разговора...   Mar 12 2008, 10:45
|- - Сергей Борщ   Цитата(alux @ Mar 12 2008, 12:45) PS. Нич...   Mar 12 2008, 12:30
|- - alux   Спасибо, Сергей. Сам бы до этого не додумался. ...   Mar 12 2008, 13:24
|- - Сергей Борщ   Цитата(alux @ Mar 12 2008, 15:24) В конст...   Mar 12 2008, 16:26
- - alux   Сделал так как Сергей сказал. За исключением того,...   Mar 12 2008, 16:57
- - alux   Проблема с повтором решена. Спасибо Сергею Борщу. ...   Mar 14 2008, 08:55
|- - alux   Цитата(dxp @ Mar 18 2008, 13:02) Сергей Б...   Mar 18 2008, 09:38
||- - dxp   Цитата(alux @ Mar 18 2008, 15:38) Что так...   Mar 18 2008, 13:13
|- - alux   Цитата(Сергей Борщ @ Jun 28 2008, 15:29) ...   Jun 28 2008, 18:11
|- - dxp   Цитата(alux @ Apr 14 2009, 18:09) Не рабо...   Apr 15 2009, 06:41
- - alux   Обнаружил такую проблему. Если два процесса ждут о...   Mar 19 2008, 13:15
|- - dxp   Цитата(alux @ Mar 19 2008, 19:15) Обнаруж...   Mar 20 2008, 07:17
|- - alux   Цитата(dxp @ Mar 20 2008, 11:17) Возможно...   Mar 21 2008, 09:07
|- - dxp   Цитата(alux @ Mar 21 2008, 15:07) Заменил...   Mar 21 2008, 09:27
- - alux   Попробовал создать отдельный ef2 для TProc2 и Код...   Mar 21 2008, 10:39
|- - dxp   Цитата(alux @ Mar 21 2008, 16:39) Попробо...   Mar 21 2008, 13:58
- - alux   Отладчиком (JTAG) не пользуюсь по причине отсутств...   Mar 21 2008, 14:46
|- - dxp   Цитата(alux @ Mar 21 2008, 20:46) Отладчи...   Mar 22 2008, 07:38
- - alux   Вроде нашел еще один свой прокол : Скорость поступ...   Mar 22 2008, 11:28
- - alux   Прошу прощения за невнимательность. Проблема с обн...   Mar 23 2008, 15:25
|- - IgorKossak   Цитата(alux @ Mar 23 2008, 17:25) ... в р...   Mar 25 2008, 09:50
- - sevstels   Хочу поинтересоваться, это только у меня не запуск...   Mar 25 2008, 09:11
- - sevstels   Тестировал на примерах scmRTOS v3 AVR. Изменил тол...   Mar 25 2008, 10:43
- - IgorKossak   sevstels, приложите к сообщению файл проекта (.ewp...   Mar 25 2008, 11:49
- - sevstels   Пока пытаюсь найти причину сам. Вот нашёл вот тут:...   Mar 26 2008, 05:27
|- - IgorKossak   Цитата(sevstels @ Mar 26 2008, 07:27) DEN...   Mar 26 2008, 06:23
- - Ykidia   Здравствуйте! Есть небольшой проектик под scmR...   Mar 26 2008, 10:33
|- - spf   Цитата(Ykidia @ Mar 26 2008, 15:33) Что н...   Mar 26 2008, 10:42
- - Ykidia   Хорошо-хорошо, уже создал. Зачем кричать-то?   Mar 26 2008, 11:38
- - sevstels   Игорь, в общем, ничего к сожалению не получается. ...   Mar 27 2008, 03:48
|- - IgorKossak   Цитата(sevstels @ Mar 27 2008, 05:48) Иго...   Mar 27 2008, 06:45
|- - sevstels   Цитата(IgorKossak @ Mar 27 2008, 15:45) Е...   Apr 1 2008, 04:55
- - Stas633   Прошу прощения за предыдущий пост! (стыдно, н...   Jul 30 2008, 20:30
- - Copypaster   При отладке демо-приложения в IAREW v 4.11b для MS...   Jul 28 2009, 11:16
|- - IgorKossak   Цитата(Copypaster @ Jul 28 2009, 14:16) П...   Jul 28 2009, 12:36
- - Embedder74   Начал разбираться с scmRTOS.3.10. Ответьте, плз. н...   Mar 24 2010, 10:09
|- - AHTOXA   Цитата(Embedder74 @ Mar 24 2010, 15:09) Н...   Mar 24 2010, 12:51
|- - dxp   Цитата(Embedder74 @ Mar 24 2010, 16:09) Н...   Mar 24 2010, 15:04
|- - Embedder74   Цитата(dxp @ Mar 24 2010, 18:04) Как это ...   Mar 25 2010, 06:50
- - Embedder74   Пользуясь случаем, хочу спросить у DXP. Когда прим...   Mar 25 2010, 09:03
|- - dxp   Цитата(Embedder74 @ Mar 25 2010, 15:03) П...   Mar 26 2010, 07:21
- - jorikdima   Ну и я что ли спрошу. Почему в проекте, написанном...   Mar 26 2010, 08:46
- - dxp   Цитата(jorikdima @ Mar 26 2010, 14:46) По...   Mar 26 2010, 12:54
- - jorikdima   Цитата(dxp @ Mar 26 2010, 15:54) Потому, ...   Mar 26 2010, 13:24
- - Сергей Борщ   Цитата(jorikdima @ Mar 26 2010, 15:24) По...   Mar 26 2010, 13:40
- - dxp   Цитата(jorikdima @ Mar 26 2010, 19:24) Со...   Mar 26 2010, 14:48
- - jorikdima   Цитата(dxp @ Mar 26 2010, 17:48) Кстати, ...   Mar 27 2010, 06:51
- - dxp   Цитата(jorikdima @ Mar 27 2010, 12:51) Пр...   Mar 27 2010, 13:31
- - jorikdima   Цитата(dxp @ Mar 27 2010, 16:31) А что, у...   Mar 28 2010, 10:45
3 страниц V   1 2 3 >


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

 


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


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