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

 
 
> К знатокам, Локальные переменные.
SasaVitebsk
сообщение Sep 6 2007, 00:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Пишу достаточно простую прогу. Пытаюсь оптимизировать.

Столкнулся с одной бедой. Попробую описать.

Построено на прерываниях. Между прерываниями разные промежутки. Есть короткие, есть длинные. Как назло именно короткое прерывание сильно загружено. Дабы разгрузить его я пытаюсь часть вычислений вынести в предыдущее не загруженное прерывание. Уже полностью перешёл на указатели, но всё равно шляпа получается.

Проблема в том, что я не могу ввести локальные переменные на два прерывания. Таким образом я ввожу статик. Но тогда во втором прерывании компилятор пытается сохранить значения. А мне это не надо ни капельки. Чтобы этого избежать я ввёл локальные переменные и во втором прерывании выполнил присваивание локальным статик. Код получился значительно компактнее, но всё равно выполняется никому не нужное присваивание. А это 6 указателей!

Теперь сам вопрос.
Могу ли я указать компилятору что можно разрушать переменные в данном прерывании. То есть что не надо их хранить. Или как это сделать. Надо типа переобъявить статические переменные локальными. Не знаю как выразится. Надеюсь поняли.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Sep 24 2007, 07:05
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Лично я в данном моменте (обмен по RSу, например) предпочитаю использовать костыль собственного изобретения примерно такого плана:
Код
#include "setjmp.h"

#define    CONTEXT_SWT_vect SPM_RDY_vect

#pragma vector=CONTEXT_SWT_vect
__interrupt void CNTX_SWT(void);

#define IN_CSWT ACSR_ACIS1

jmp_buf main_task;
jmp_buf rs_task;
char rs_rstack[8];
char rs_cstack[64];

char rxbuf[16];

#pragma vector=USART0_RXC_vect
__interrupt __raw void rs_rx(void)
{
  UCSR0B_RXCIE0=0;
  if (!IN_CSWT)
  {
    IN_CSWT=1;
    __enable_interrupt();
    ((void(*)(void))CNTX_SWT)();
    __disable_interrupt();
    IN_CSWT=0;
  }
}

#pragma vector=USART0_UDRE_vect
__interrupt __raw void rs_tx(void)
{
  UCSR0B_UDRIE0=0;  //Запретили прерывания
  if (!IN_CSWT)
  {
    IN_CSWT=1;
    __enable_interrupt();
    ((void(*)(void))CNTX_SWT)();
    __disable_interrupt();
    IN_CSWT=0;
  }
}

#pragma vector=USART0_TXC_vect
__interrupt __raw void rs_txc(void)
{
  //UCSR0A=1<<TXC0; //Сбросили флаг
  if (!IN_CSWT)
  {
    IN_CSWT=1;
    __enable_interrupt();
    ((void(*)(void))CNTX_SWT)();
    __disable_interrupt();
    IN_CSWT=0;
  }
}

#pragma vector=TIMER1_OVF_vect
__interrupt __raw void rs_timeout(void)
{
  UCSR0B_RXCIE0=0; //Запретили прерывания от приемника
  if (!IN_CSWT)
  {
    IN_CSWT=1;
    __enable_interrupt();
    ((void(*)(void))CNTX_SWT)();
    __disable_interrupt();
    IN_CSWT=0;
  }
}

#pragma vector=CONTEXT_SWT_vect
__interrupt void CNTX_SWT(void)
{
  if (!setjmp(main_task)) //Запомнили контекст осн. задачи
  {
    longjmp(rs_task,1); //Перешли в контекст RS_TRX
  }
}

void wait_int()
{
  if (!setjmp(rs_task)) //Запомнили контекст RS_TASK
  {
    longjmp(main_task,1); //Перешли в контекст осн. задачи
  }
}

char rxbuf[16];

//txsize - количество байт без контрольной суммы
__x char DO_RS(char *out, char txsize, char n_rs, char CRC8RX)
{
  char CRC8;
  char c;
  char rxerr=0;
  UCSR0A=1<<TXC0; //Сбросили флаг от предыдущего прерывания
  CRC8=CRC8tab[c=(*out++)]; //ПУ всегда начинает с нуля
  __disable_interrupt();
  UDR0=c;
  while(PINE_Bit1); //Ждем начала стартового бита
  if (n_rs) EnaTX2; else EnaTX0; //Разрешаем передатчик
  __enable_interrupt();
  while(--txsize)
  {
    CRC8=CRC8tab[CRC8^(UDR0=(*out++))];
    UCSR0B_UDRIE0=1; //Разрешили прерывания от UDRIE
    wait_int(); //Ждем освобождения буфера
  }
  UDR0=CRC8;
  UCSR0B_TXCIE0=1; //Разрешили прерывание от TXC
  wait_int(); //Байт контрольной суммы - последний байт
  UCSR0B_TXCIE0=0; //Запретили прерывания от TXC
  DisTX2; //Выключили каналы передачи
  DisTX0;
  if (n_rs) EnaRX2; else EnaRX0; //Разрешили приемник (пока только на драйвере)
  TCNT1=Time1000;
  TIFR=1<<(TOV1);
  TIMSK_TOIE1=1; //Разрешили прерывание от таймера
  wait_int(); //Ждем 1 мс пока переходные процессы
  UCSR0B_RXEN0=1; //Разрешили приемник
  //txsize здесь равен 0
  CRC8RX=CRC8tab[CRC8RX]; //Нач. значение
  out=rxbuf;
  TCNT1=Time2200; //Время ожидания первого байта
  for(;;)
  {
    UCSR0B_RXCIE0=1; //Разрешили прерывания от приемника
    wait_int();
    if (!UCSR0A_RXC0)
    {
      //Выход по таймауту
      if (CRC8RX) txsize=0; //Не срослась контрольная сумма
      break; //Выходим из цикла
    }
    //Приняли байт
    if (UCSR0A_FE0||UCSR0A_DOR0)
    {
      rxerr=1; //Ошибки
    }
    c=UDR0;
    if (txsize<sizeof(rxbuf))
    {
      CRC8RX=CRC8tab[CRC8RX^(*out=c)]; // Читаем принятый байт в буфер приема и перерасчет CRC
      txsize++;
      out++;
    }
    else
    {
      rxerr=1; //Слишком много байт
      break;
    }
    TCNT1=Time1600;
  }
  UCSR0B_RXEN0=0; //Запретили приемник
  TIMSK_TOIE1=0; //Запретили таймер
  DisRX0;
  DisRX2;
  if (rxerr) txsize=0;
  return(txsize); //Количество принятых байт, если 0 - нет ответа
}


__task __noreturn RS_TRX(void)
{
  struct
  {
    char PPKP;
    char Cmd;
  };
  char abon=0;
  char c;
  char CurRS=0;
  for(;;)
  {
    c=DO_RS(&PPKP,1,CurRS,abon);
    switch(c)
    {
    case 4:
      //Есть событие
      //Записываем событие в стек
      Event2FIFO(abon,rxbuf[1],rxbuf[2],0);
    case 2:
      //Нет события
      //.......
      break;
    default:
      //Ошибка
      //.............
      break;
    }
    if (!(abon=(abon+1)&0x7F))
    {
      CurRS^=1;
    }
  }
}
    
void InitRS(void)
{
  __disable_interrupt();
  DDRE=0xFE;
  PORTE=0xFF;
  UBRR0L=25;
  UCSR0B_TXEN0=1; //Разрешили передатчик
  TCCR1B=2;
  ((unsigned int *)rs_task)[10]=((unsigned int)rs_rstack)+7; //SP
  ((unsigned int *)rs_task)[8]=((unsigned int)rs_cstack)+64; //Y
  ((unsigned int *)rs_task)[9]=(unsigned int)RS_TRX; //Адрес перехода
  if (!setjmp(main_task)) longjmp(rs_task,1); //Переходим в RS_TRX
  __enable_interrupt();
}


Зато все просто - переменные вообще локальные, код простой до боли, не надо организовывать кучу обработчиков, передавать руками данные между ними (все в локальных переменных, там все автоматически получается), время работы с запрещенными прерываниями - минимально. Конечно, это занимает немного больше ручками вылизаного кода, но зато насколько все проще.
Я понимаю, что мне сейчас скажут - "А почему бы ОСь не использовать". На это отвечу - ну вот это и есть своя собственная ось без кода на асме smile.gif

Вот этот код (как заготовка) кочует из проекта в проект, с минимальными изменениями. Очень удобно.

Теперь хотелось бы услышать от адептов C++, что мне даст применение плюсов в данном месте? Чем мне облегчит жизнь? Положить все переменные в класс? А смысл?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 24 2007, 08:35
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Rst7 @ Sep 24 2007, 11:05) *
Теперь хотелось бы услышать от адептов C++, что мне даст применение плюсов в данном месте? Чем мне облегчит жизнь? Положить все переменные в класс? А смысл?


Лично у меня подход примерно следующий: есть класс, назовем его TCanal. У него есть методы типа getByte и onByteRecieve, которые вызываются из прерываний УАРТа. Этот класс реализует логику посылки запроса и получения ответа (или не получения - по таймауту ожидания). Логика обработки принятых байт лежит в производном классе (она своя для каждого протокола), где подключается соответствующий обработчик.

Преимущества: есть совершенно не меняющийся файл canal.h / canal.cpp, общий для всех проектов. Есть также куча не меняющихся файлов canalXXX.h / canalXXX.cpp, которые реализуют логику получения пакета для конкретного протокола.

Далее для конкретного проекта просто создаются объекты нужных классов, пишутся обработчики прерываний (равно 1 строка в каждом) и ВСЕ! Никакой ручной подгонки кода! Любое количество уартов!

То же самое вполне можно писать на чистом C. Примерно так:

Код
typedef struct _TCanalData
{
       ..........
} TCanalData;

byte canal_getByteForSend(TCanalData *pData);
void canal_onByteRecieved(TCanalData *pData, byte dt);


Преимущества C++ при таком подходе - код выглядит красивее.
Кстати, куча функций в WinAPI (чистый C) написаны примерно в таком духе - первым аргументом идет указатель на специфическую структуру данных, а затем - собственно аргументы ф-ции.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 24 2007, 08:51
Сообщение #4


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(Непомнящий Евгений @ Sep 24 2007, 11:35) *
Лично у меня подход примерно следующий: есть класс, назовем его TCanal. У него есть методы типа getByte и onByteRecieve, которые вызываются из прерываний УАРТа. Этот класс реализует логику посылки запроса и получения ответа (или не получения - по таймауту ожидания). Логика обработки принятых байт лежит в производном классе (она своя для каждого протокола), где подключается соответствующий обработчик.


Не понятен мне смысл навешивать классы на код (аналогичный код на приеме)
Код
while(--txsize)
{
   CRC8=CRC8tab[CRC8^(UDR0=(*out++))];
   UCSR0B_UDRIE0=1; //Разрешили прерывания от UDRIE
   wait_int(); //Ждем освобождения буфера
}


Ради чего?

Цитата
Преимущества C++ при таком подходе - код выглядит красивее.


Т.е. делать обработчики, передавать параметры, указатели и т.д - не важно, это делается через классы или структуры. Непонятна мне такая красота. Куда уж красивее? Цикл и все. В соответствии с идеологией цпп я должен тут обязятельно навесить кучу методов. Но зачем??? Неужели будет красивее и понятнее?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 24 2007, 09:51
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Вдогонку
Цитата(Rst7 @ Sep 24 2007, 12:51) *
В соответствии с идеологией цпп я должен тут обязятельно навесить кучу методов. Но зачем??? Неужели будет красивее и понятнее?


1. В соответствии с идеологией не цпп, а ООП. Это совершенно разные понятия smile.gif
2. Нужен баланс - каждый класс должен иметь конкретную, вполне определенную функциональность. Если эта функциональность мизерна - можно удалить класс, перенеся его функциональность в тем места, где он использовался. Если класс имеет очень большую функциональность - хорошо бы его разбить на несколько более мелких. Цель - сделать программу понятнее, ее куски - независимыми от других (по возможности) и повторно используемыми.
Это вполне работает и в чистом С - иметь миллион мелких функций плохо, равно как и иметь несколько гигантских...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   К знатокам   Sep 6 2007, 00:58
- - dxp   Все равно как-то туманно. Вы бы псевдокод привели,...   Sep 6 2007, 04:33
- - alexander55   Цитата(SasaVitebsk @ Sep 6 2007, 04:58) П...   Sep 6 2007, 04:53
- - Сергей Борщ   Да, действительно мутновато. Если я правильно поня...   Sep 6 2007, 05:02
- - MALLOY2   Можно еще все нужные переменные загнать в 1 структ...   Sep 6 2007, 05:49
- - Dog Pawlowa   Цитата(SasaVitebsk @ Sep 6 2007, 03:58) П...   Sep 6 2007, 07:51
|- - alexander55   Цитата(Dog Pawlowa @ Sep 6 2007, 11:51) Я...   Sep 6 2007, 09:20
- - SasaVitebsk   Лучше всех понял проблему Сергей Борщ. Я так и сде...   Sep 6 2007, 11:27
|- - scifi   Цитата(SasaVitebsk @ Sep 6 2007, 15:27) В...   Sep 6 2007, 13:05
||- - SasaVitebsk   Цитата(scifi @ Sep 6 2007, 16:05) Быстрее...   Sep 6 2007, 19:45
|- - Rst7   Цитата(SasaVitebsk @ Sep 6 2007, 14:27) К...   Sep 8 2007, 10:49
|- - SasaVitebsk   Всем спасибо. Буду осмысливать и пробовать - экспе...   Sep 9 2007, 14:54
|- - Rst7   Цитата(SasaVitebsk @ Sep 9 2007, 17:54) В...   Sep 10 2007, 06:10
- - vmp   Похоже, здесь основная проблема - это ограничения ...   Sep 7 2007, 13:42
|- - dxp   Цитата(vmp @ Sep 7 2007, 20:42) Похоже, з...   Sep 8 2007, 10:12
|- - Сергей Борщ   Цитата(dxp @ Sep 8 2007, 13:12) Там (в EW...   Sep 8 2007, 11:39
- - mdmitry   Возможно, поможет сократить время выполнения генер...   Sep 8 2007, 22:28
- - SasaVitebsk   Тут проскочила чья-то фраза, что компилятор лучше ...   Sep 18 2007, 09:21
|- - alexander55   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 09:49
|- - vmp   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 10:45
||- - rezident   Цитата(vmp @ Sep 18 2007, 16:45) Для отде...   Sep 18 2007, 13:08
||- - vmp   Цитата(rezident @ Sep 18 2007, 17:08) Изв...   Sep 18 2007, 13:35
||- - Dog Pawlowa   Цитата(vmp @ Sep 18 2007, 16:35) Особенно...   Sep 18 2007, 16:30
||- - singlskv   Цитата(Dog Pawlowa @ Sep 18 2007, 20:30) ...   Sep 18 2007, 17:13
||- - IgorKossak   Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ...   Sep 18 2007, 18:07
|||- - Rst7   Цитата(IgorKossak @ Sep 18 2007, 21:07) Е...   Sep 19 2007, 05:23
|||- - alexander55   Цитата(Rst7 @ Sep 19 2007, 09:23) А вот C...   Sep 19 2007, 05:57
|||- - dxp   Цитата(Rst7 @ Sep 19 2007, 12:23) А вот C...   Sep 19 2007, 12:18
|||- - Rst7   Цитата(dxp @ Sep 19 2007, 15:18) Отнюдь. ...   Sep 19 2007, 12:34
|||- - alexander55   Цитата(Rst7 @ Sep 19 2007, 16:34) ключево...   Sep 19 2007, 12:54
|||- - dxp   Цитата(Rst7 @ Sep 19 2007, 19:34) Хуже бу...   Sep 19 2007, 13:21
|||- - SasaVitebsk   Цитата(dxp @ Sep 19 2007, 16:21) C++ - эт...   Sep 21 2007, 18:26
|||- - singlskv   Цитата(SasaVitebsk @ Sep 21 2007, 22:26) ...   Sep 21 2007, 18:54
||- - SasaVitebsk   Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ...   Sep 18 2007, 23:46
|- - singlskv   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 18:41
|- - zltigo   Цитата(singlskv @ Sep 18 2007, 21:41) Соб...   Sep 18 2007, 19:34
||- - singlskv   Цитата(zltigo @ Sep 18 2007, 23:34) Загну...   Sep 18 2007, 19:47
||- - zltigo   Цитата(singlskv @ Sep 18 2007, 22:47) лет...   Sep 18 2007, 19:57
||- - singlskv   Цитата(zltigo @ Sep 18 2007, 23:57) Дела ...   Sep 18 2007, 20:16
|- - dxp   Цитата(singlskv @ Sep 19 2007, 01:41) А в...   Sep 19 2007, 04:18
|- - singlskv   Цитата(dxp @ Sep 19 2007, 08:18) С++ на ...   Sep 19 2007, 19:59
|- - zltigo   Цитата(singlskv @ Sep 19 2007, 22:59) Оче...   Sep 19 2007, 21:03
||- - singlskv   Цитата(zltigo @ Sep 20 2007, 01:03) Оба э...   Sep 19 2007, 21:27
||- - alexander55   Цитата(singlskv @ Sep 20 2007, 01:27) Пов...   Sep 20 2007, 04:58
||- - Непомнящий Евгений   Цитата(alexander55 @ Sep 20 2007, 08:58) ...   Sep 20 2007, 11:42
||- - singlskv   Цитата(Непомнящий Евгений @ Sep 20 2007, 15...   Sep 20 2007, 16:13
||- - dxp   Цитата(singlskv @ Sep 20 2007, 23:13) При...   Sep 21 2007, 03:49
||- - Непомнящий Евгений   Цитата(singlskv @ Sep 20 2007, 20:13) А н...   Sep 21 2007, 04:36
||- - dxp   Цитата(Непомнящий Евгений @ Sep 21 2007, 11...   Sep 21 2007, 05:50
||- - Непомнящий Евгений   Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т...   Sep 21 2007, 06:49
|||- - dxp   Цитата(Непомнящий Евгений @ Sep 21 2007, 13...   Sep 21 2007, 07:14
|||- - Maddy   Цитата(dxp @ Sep 21 2007, 11:14) Ну, не з...   Sep 21 2007, 08:46
|||- - dxp   Цитата(Maddy @ Sep 21 2007, 15:46) Не фле...   Sep 21 2007, 09:12
|||- - Maddy   2 dxp - Thanks   Sep 21 2007, 09:31
||- - alexander55   Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т...   Sep 21 2007, 06:51
||- - singlskv   Цитата(dxp @ Sep 21 2007, 09:50) Под джит...   Sep 21 2007, 20:44
||- - dxp   Цитата(singlskv @ Sep 22 2007, 03:44) джи...   Sep 22 2007, 16:52
||- - singlskv   Цитата(dxp @ Sep 22 2007, 20:52) , давайт...   Sep 22 2007, 17:49
||- - zltigo   Цитата(singlskv @ Sep 22 2007, 20:49) Кон...   Sep 22 2007, 18:11
|||- - singlskv   Цитата(zltigo @ Sep 22 2007, 22:11) Это в...   Sep 22 2007, 19:21
|||- - zltigo   Цитата(singlskv @ Sep 22 2007, 22:00) Вот...   Sep 22 2007, 19:33
||||- - singlskv   Цитата(zltigo @ Sep 22 2007, 23:33) Если ...   Sep 22 2007, 20:09
||||- - zltigo   Цитата(singlskv @ Sep 22 2007, 23:09) Вы ...   Sep 22 2007, 20:39
||||- - singlskv   Цитата(zltigo @ Sep 23 2007, 00:39) - 16b...   Sep 22 2007, 21:13
||||- - zltigo   Цитата(singlskv @ Sep 23 2007, 00:13) Да,...   Sep 22 2007, 21:36
||||- - singlskv   Да, далеко мы уже удалились... от темы, единствен...   Sep 22 2007, 21:47
||||- - zltigo   Цитата(singlskv @ Sep 23 2007, 00:47) Т.к...   Sep 22 2007, 22:22
|||- - dxp   Цитата(singlskv @ Sep 23 2007, 02:21) Это...   Sep 23 2007, 08:59
|||- - singlskv   Цитата(dxp @ Sep 23 2007, 12:59) А если п...   Sep 23 2007, 14:35
|||- - dxp   Цитата(singlskv @ Sep 23 2007, 21:35) Хор...   Sep 23 2007, 16:10
||||- - singlskv   Цитата(dxp @ Sep 23 2007, 20:10) То, что ...   Sep 23 2007, 17:20
||||- - dxp   Цитата(singlskv @ Sep 24 2007, 00:20) Ну ...   Sep 24 2007, 03:38
|||- - zltigo   Цитата(singlskv @ Sep 23 2007, 17:35) zlt...   Sep 23 2007, 19:21
|||- - singlskv   Цитата(zltigo @ Sep 23 2007, 23:21) Такие...   Sep 23 2007, 21:00
|||- - zltigo   Цитата(singlskv @ Sep 24 2007, 00:00) Zlt...   Sep 23 2007, 21:52
|||- - singlskv   Цитата(zltigo @ Sep 24 2007, 01:52) Дело ...   Sep 23 2007, 22:50
||- - dxp   Цитата(singlskv @ Sep 23 2007, 00:49) Дав...   Sep 22 2007, 18:56
|- - dxp   Цитата(singlskv @ Sep 20 2007, 02:59) Вы ...   Sep 20 2007, 03:19
- - SasaVitebsk   Большое спасибо за развёрнутый совет. Похоже надо ...   Sep 22 2007, 17:17
|- - dxp   Цитата(SasaVitebsk @ Sep 23 2007, 00:17) ...   Sep 23 2007, 13:52
- - SasaVitebsk   Попробую я вмешаться. Я тоже делал много изделий с...   Sep 23 2007, 21:36
|- - alexander55   Цитата(Rst7 @ Sep 24 2007, 12:51) Неужели...   Sep 24 2007, 09:28
|- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 12...   Sep 24 2007, 10:14
- - Непомнящий Евгений   Мой класс TCanal посылает запрос, ждет получения о...   Sep 24 2007, 09:25
|- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 12...   Sep 24 2007, 09:39
|- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 13:39) Или тут...   Sep 24 2007, 10:38
- - Rst7   Цитата3. У меня логика посылки\повтора посылк...   Sep 24 2007, 11:14
- - dxp   Цитата(Rst7 @ Sep 24 2007, 18:14) Слова. ...   Sep 24 2007, 11:28
|- - Rst7   Цитата(dxp @ Sep 24 2007, 14:28) Я что-то...   Sep 24 2007, 11:53
|- - dxp   Цитата(Rst7 @ Sep 24 2007, 18:53) Ну да.....   Sep 24 2007, 12:06
|- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 15:53) Моя пра...   Sep 24 2007, 12:08
- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 15:14) У меня ...   Sep 24 2007, 11:53
- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 14...   Sep 24 2007, 12:23
- - dxp   Цитата(Rst7 @ Sep 24 2007, 19:23) Не прос...   Sep 24 2007, 12:49
- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 16:23) А вам -...   Sep 24 2007, 12:59
- - dxp   Цитата(Непомнящий Евгений @ Sep 24 2007, 19...   Sep 24 2007, 13:35
2 страниц V   1 2 >


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

 


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


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