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

 
 
> возможно ли на Си, объединить биты регистров портов микроконтроллера
another_one
сообщение Jun 13 2009, 16:50
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 252
Регистрация: 2-03-08
Пользователь №: 35 557



Здравствуйте.

Прошу подсказки.

С целью удобства и лучшей читабельности необходимо объединить биты портов микроконтроллера в один структурный тип или объединение.

Биты находятся в разных портах и не последовательно.

Не пойму как назначить адрес бита порта к "битовому типу" структуры.

Заранее благодарен


--------------------
One Chip is All You Need
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Jun 14 2009, 00:20
Сообщение #2


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

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



Почитайте современные книги, которые всячески советуют избегать везде, где только можно, макро. Это грабли, приводящие очень часто к трудно вылавливаемым ошибкам.
Go to the top of the page
 
+Quote Post
Herz
сообщение Jun 14 2009, 06:47
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(sergeeff @ Jun 14 2009, 02:20) *
Почитайте современные книги, которые всячески советуют избегать везде, где только можно, макро. Это грабли, приводящие очень часто к трудно вылавливаемым ошибкам.

Такие книжки читать как раз не нужно, ИМХО. Ибо это из категории вредных советов. biggrin.gif
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jun 14 2009, 10:21
Сообщение #4


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Herz @ Jun 14 2009, 12:47) *
Такие книжки читать как раз не нужно, ИМХО. Ибо это из категории вредных советов. biggrin.gif

Да нет, сами по себе советы вместо #define использовать const и темплейты - правильные.
Просто в тех книгах речь идёт о С++ и типичных его применениях - для ваяния многомегабайтных монстров. А тут случай практически противоположный - манипуляции битами на самом нижнем уровне, никакой переносимости не требуется по определению, зато важна эффективность.
Но, разумеется, хотелось бы собрать в одном месте все зависимости от номеров битов в портах, чтобы при правках не искать их по всей программе.

Альтернатива - написать пару функций для чтения и для записи, а для эффективности инлайнить их.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 14 2009, 10:49
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(SSerge @ Jun 14 2009, 13:21) *
Но, разумеется, хотелось бы собрать в одном месте все зависимости от номеров битов в портах, чтобы при правках не искать их по всей программе.

Описываю весь доступ к портам через макросы в одном h-файле и не парюсь.
В прочих файлах НИКАКОГО упоминания о портах, только макросы с осмысленными названиями. Просто для понимания. Существенно упрощает портирование.
К сожалению, есть проблема инлайнить функции, определенные в других модулях, теоретически можно тоже через #include, но это уж точно на изврат похоже.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 14 2009, 11:35
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Dog Pawlowa @ Jun 14 2009, 14:49) *
К сожалению, есть проблема инлайнить функции, определенные в других модулях, теоретически можно тоже через #include, но это уж точно на изврат похоже.

Напрасно Вы так - вовсе не изврат, а очень полезный в некоторых случаях прием.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 14 2009, 17:09
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(aaarrr @ Jun 14 2009, 14:35) *
очень полезный в некоторых случаях прием.

ОК, я подумаю. Хотелось бы уточнить случаи.

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

Если же функция вырождается в дерганье выводом или считывание его состояния, то объясните мне плз, в чем преимущество инлайновой функции по сравнению с простейшим макросом:
#define ON_BACKLIGHT (P1OUT|=P1_BACKLIGHT),
где #define P1_BACKLIGHT 0x02 //output


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 14 2009, 17:16
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Dog Pawlowa @ Jun 14 2009, 21:09) *
ОК, я подумаю. Хотелось бы уточнить случаи.


Например, есть у меня в модуле display такая функция:
Код
__forceinline void disp_set_dot_alpha(u_int x, u_int y, DISP_COLOR color, u_char alpha)
{
    u_int c0, c1, mask;
    
    if(alpha > 0)
    {
        c0 = color;
        if(alpha < DISP_MAX_ALPHA)
        {
            c1 = *((u_short*)&disp_frame + (y * DISP_WIDTH) + x);
            mask = 0x07e0f81f;
            c0 = (c0 | (c0 << 16)) & mask;
            c1 = (c1 | (c1 << 16)) & mask;
            c0 = ((c0 * alpha) >> 5) & mask;
            c1 = ((c1 * (DISP_MAX_ALPHA - alpha)) >> 5) & mask;
            c0 = c0 + c1;
            c0 |= c0 >> 16;
        }
        *((u_short*)&disp_frame + (y * DISP_WIDTH) + x) = c0;
    }
}


Тащить всю работу с графикой в один модуль неразумно, до макроса не вырождается, зато как инлайн функция существенно повышает производительность.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 14 2009, 17:36
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(aaarrr @ Jun 14 2009, 20:16) *
зато как инлайн функция существенно повышает производительность.

ОК, спасибо. Видимо, не сталкивался.
Но в таком виде функция не инклюдится, или я не знаю эту среду/компилятор?

Цитата(sergeeff @ Jun 14 2009, 20:29) *
Вы сами-то как оцениваете читабельность такого выражения?

Супер! Превосходная ! Ни у кого такого нет! smile.gif
"Включить подсвет", насколько мне известно...
Большие буквы, отсутствие скобок -> значит это макрос для работы с портами -> см файл project_ports.h
Лет пят-шесть так работаю, маразм наступает, но вот с этим пока проблем не было.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 14 2009, 17:48
Сообщение #10


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

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



Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) *
Супер! Превосходная ! Ни у кого такого нет! smile.gif

Ну это, условный рефлекс, наверное.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 14 2009, 18:04
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(sergeeff @ Jun 14 2009, 20:48) *
Ну это, условный рефлекс, наверное.

Форум "электроникс" - 1) достаточно модерируемый и 2) самоорганизующийся форум.
Я удивлен тем фактом, что мне приходится отметать Ваш переход на какие-то посторонние от техники аспекты.
Или Вы так зашорены, что больше нечего сказать?

Цитата(aaarrr @ Jun 14 2009, 20:59) *
Только не так, Боже упаси! Функция в header'е display.h, который и подключается.

А, ну да, конечно...


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 14 2009, 18:41
Сообщение #12


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

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



Цитата(Dog Pawlowa @ Jun 14 2009, 21:04) *
Или Вы так зашорены, что больше нечего сказать?


1. При чем тут зашоренность. Абсолютное большинство программистов, увидев
Код
ABC()
сразу поймет, что вызывается некая функция, т.е. некая локальная обработка данных, а
Код
ABC;
может означать все что угодно. Может это чтение из глобальной переменной ABC в стиле уважаемого гуру zltigo, a может вызов макро.
2. Есть понятие "стиль программирования". Мне кажется, что "стильно" написанная программа это такая, которая легко читается и сопровождается, и не только автором.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 14 2009, 20:46
Сообщение #13


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(sergeeff @ Jun 14 2009, 21:41) *
2. Есть понятие "стиль программирования". Мне кажется, что "стильно" написанная программа это такая, которая легко читается и сопровождается, и не только автором.
В общем согласен. Но только с оговорокой "легко читается и сопровождается людьми, имеющими определённый уровень подготовки". Ни в коем случае не всеми, кто написал "Hello, world!".
А то ведь и в "человеческих" языках есть всякие там сложноподчинённые предложения, идиомы с прочими тропами, не говорю уже о профессиональной терминологии - тоже ведь не всё сказанное всем понятно будет, причём не только тем, кто только начал язык осваивать, но и многим "носителям". И это нормально.
Я немного увожу в сторону от основной темы обсуждения, но когда начинается "указательную арифметику не использовать, плохо читается" и т.п. я думаю - может просто надо уровень читателей поднимать?
Ведь в "должно быть понятно" можно докатиться до уровня рекламы стирального порошка или там "ретоны".
Когда вижу как бы на С написанное
Код
  if( flag )
  {
    struct.member[index] = a;
  }
  else
  {
    struct.member[index] = b;
  }
вместо
Код
   struct.member[index] = flag ? a : b;
я просто поражаюсь - насколько надо не любить и не знать С, чтобы так писать. А если это политика "чтобы понятно было", то на кого рассчитывается? И сможет ли этот "кто" понять всю программу?

Да, с маленькими детьми обычно разговаривают очень упрощённым языком (хотя и тут встречал мнение, что чрезмерное упрощение вредит развитию), но если так разговаривать со школьником...
Да, школьнику какую-то не сильно сложную медицинскую/физическую/... проблему можно и нужно уметь объяснить в каких-то базовых понятиях, но если профессионалы между собой начнут исключительно так общаться... Это им будет только мешать, затруднять общение. Конечно, если залезть в "башню из слоновой кости", то можно себя чувствовать крутым профи только потому, что тебя никто не понимает, это другая крайность.

Оптимум где-то посредине, и, на мой взгляд, в случае с С в этот оптимум входит понимание возможностей и ограничений макросов, а не вера в то, что они вредны, почёрпнутая из агитации за С++, причём на примерах ошибок, которые более менее грамотный программист просто не должен уже совершать (а на уровне, на котором они совершаются, и на С++ ничего хорошего не будет написано). Уровень их использования, который обсуждается в этой теме, не должен приводить к каким-то ощутимым на фоне всей программы задержкам понимания текста. Любой знающий язык С, а не некое усечённое подмножество "разрешённое к применению в фирме" должен быстро с ним разобраться.
Это понимание требует какого-то своего опыта. Начинающим сразу с С++ и не собирающимся работать на С может и можно послабление дать. Но с учётом того, что они (теоретически) должны научиться понимать гораздо более сложные вещи - макросы такого уровня они должны понимать легко.

Также в этот оптимум входит достаточное понимание указателей, чтобы не сильно долго задерживаться на строке
Код
a = (flag ? sin : cos)(fi);

Duff's device в него, пожалуй, не включу (хотя для понимания сути switch это весьма полезный пример и он есть в упражнениях у Страуструпа в "Язык программирования С++", причём это упражнение с низким уровнем сложности).


Цитата(sergeeff @ Jun 14 2009, 21:59) *
Небольшой пример для иллюстрации "прелестей" макро.
Код
#define UP(port, bit) port |= (1<<bit)

где-то в программе напишем:
Код
UP(port,2) + 3;
Можно и без макросов и без указателей и без goto наворотить такое, что никто не разберёт и не сможет сопровождать. Точно так же, как и имея словарный запас в три сотни слов можно нести околесицу. Приведенный Вами пример настолько "букварный", что или он из букваря и взят, или написавшему этот код человеку надо наконец-то вдумчиво прочесть книжку по языку С.

Вы никогда не видели примеры "индусского" кода на java, где "корень всех зол" в виде макросов отсутствует?

Что бы Вы сказали, если бы кто-то привёл пример такого кода как доказательство того, что с java надо уходить на С ?

Означате ли то, что некоторые взрослые не умеют правильно поставить запятые в предложении, необходимость исключения из школьной программы этой части курса родного языка или, как минимум, рекомендации пользоваться всем только простыми предложениями?

Цитата(sergeeff @ Jun 14 2009, 21:59) *
Ежели UP оформить в виде inline функции
Код
inline void UP(char port, char bit) {port &= ~(1<<bit);}
То на попытку применить эту функцию к порту будет выдано сообщение об ошибке. А так - она вообще ничего полезного не делает, так как модифицирует свой аргумент типа char.


Да, для avr-gcc можно написать
Код
// для С99 так
static inline void UP( volatile uint8_t *port, uint8_t bit)
{
    *port |= 1 << bit;
}

// а для режима С++ ещё и так
static inline void UP2( volatile uint8_t& port, uint8_t bit)
{
    port |= 1 << bit;
}
Но
1) для IAR это уже не прокатит, там по-другому описаны порты, типы volatile uint8_t * и volatile uint8_t & не подойдут.
А вот правильно написанный макрос UP будет работать и там, и там.
2) а с первого раза и inline-функцию не вышло написать правильно wink.gif За что боролись?

Ага. Вроде бы это должно работать где угодно.
Код
template<typename PP> inline void
UP3( PP & port, uint8_t bit)
{
    port |= 1 << bit;
}
Но это уже совсем не С, так что может иметь отношение только к разговору о (не)применении макросов в С++, даже к C99 отношения не имеет, а, как тут в параллельной теме выяснилось, и С99 иногда непозволительная роскошь.

Постаравшись, можно залудить и что-то соответствующее по функционалу "макросам имени Аскольда Волкова" (тут упоминались несколько раз и приводились версии разного уровня развития идеи, но с лёту нашёл только одно сообщение), но не вижу смысла. У меня в связи с макросами ни аллергии, из-за "перееда" в детстве, ни полной беспомощности нетренированной имунной системы из-за жизни в стерильной среде нет.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 15 2009, 06:31
Сообщение #14


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

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



Цитата(ReAl @ Jun 14 2009, 23:46) *
где "корень всех зол" в виде макросов отсутствует?


1. Я нигде не утверждал, что макрос - страшное, ужасное зло. Бывают случаи, когда только они и работают.
2. "Букварный пример" он на то и пример, чтобы просто показать "подводные камни" макропрограммирования.
3. Все очень быстро в пылу дисскуссии забывают изначальный вопрос автора топика.
4. Любую программу можно написать десятком разных способов. Не спроста Кнут назвал свои книги "Искусство программирования".
5. Примеры с разложенными по строкам if .. else и тернарный оператор ? в 99% случае компилятором генерируются в одинаковый машинный код. Тут, как говорится, на вкус и цвет...
6. В большинстве случаев (есть и исключения) книги по программированию написаны людьми лично принимавшими участие в больших и огромных проектах и не знакомиться с их практическим опытом просто не разумно.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 15 2009, 08:03
Сообщение #15


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(sergeeff @ Jun 15 2009, 09:31) *
2. "Букварный пример" он на то и пример, чтобы просто показать "подводные камни" макропрограммирования.
Не спорю. Но с тем же успехом можно Вашу inline-функцию, просто модифицирующую свой собственный аргумент (независимо от того, как в данной системе представлены порты) использовать как пример "подводного камня" при использовании функций. Cобственно, что-то похожее и показывают в разговорах о передаче по ссылке и по значению. Ошибки, на мой взгляд, одного уровня, нормальный человек их может сделать только в начале обучения либо поздно вечером в пылу спора wink.gif

Годится как урок "как не надо делать", а не как аргумент за то, чтобы не использовать.

Цитата(sergeeff @ Jun 15 2009, 09:31) *
5. Примеры с разложенными по строкам if .. else и тернарный оператор ? в 99% случае компилятором генерируются в одинаковый машинный код. Тут, как говорится, на вкус и цвет...
А я об эффективности кода и не говорил. Это иллюстрация к "упрощённый язык для объяснения школьнику" и "общение профессионалов".
Многострочный вариант читается так:
Цитата
если флаг установлен, то такому-то элементу такого-то массива такой-то структуры присвоить а
если же он сброшен, то такому-то элементу такого-то массива такой-то структуры присвоить b
а, одной и той же структуры!
а, одного и того же массива!
а, и индекс одинаковый!
щас... да, точно, всё до буковки одинаково.
значит так, такому-то элементу такого-то массива такой-то структуры в зависимости от флага присвоить a или b
тогда как тернарная операция сразу приводит понимание текста к последней строке. Конечно, только для человека, знающего язык достаточно хорошо.

Так значит тут - "на вкус и цвет", а макросы - снижают читаемость и сопровождаемость текста?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 15 2009, 08:33
Сообщение #16


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

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



Цитата(ReAl @ Jun 15 2009, 11:03) *
Так значит тут - "на вкус и цвет", а макросы - снижают читаемость и сопровождаемость текста?


Макросы - это препроцессор, т.е. "до компилятора". Варианты if... и ? - компилятор. Вы лично часто изучаете листинг препроцессора? Уверен - почти никогда. Значит вы просто полагаетесь на то, что вы со своим многолетним опытом, ошибок при написании макросов не допускаете и препроцессор все сделал именно так, вы себе это представляете. А если ошибка есть, она трудноуловима (при одних данных есть, при других - нет, а еще хуже при одних типах данных - есть, при других - нет). Вам что больше по душе, чтобы компилятор вам хотя бы подсказывал про подобные потенциальные проблемы, или молча, по своему усмотрению чего-то там понаделал, а вы потом, "по вторичным половым признакам" аномального поведения программы это все вылавливали?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- another_one   возможно ли на Си   Jun 13 2009, 16:50
- - sergeeff   Никак   Jun 13 2009, 17:59
- - DpInRock   Вы всегда смотрите, как именно ваши фантазии будет...   Jun 13 2009, 19:38
|- - another_one   Цитата(DpInRock @ Jun 13 2009, 23:38) Вы ...   Jun 13 2009, 22:17
- - SSerge   Для читаемости можно оформить доступ к битам в раз...   Jun 13 2009, 22:49
|- - zltigo   Цитата(sergeeff @ Jun 14 2009, 03:20) Поч...   Jun 14 2009, 05:17
|- - sergeeff   Цитата(Dog Pawlowa @ Jun 14 2009, 14:49) ...   Jun 14 2009, 10:55
||- - Dog Pawlowa   Цитата(sergeeff @ Jun 14 2009, 13:55) Это...   Jun 14 2009, 11:07
|||- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 21:30) ...   Jun 14 2009, 17:41
||||- - Dog Pawlowa   Цитата(aaarrr @ Jun 14 2009, 20:41) Вы им...   Jun 14 2009, 17:55
||||- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 21:55) ...   Jun 14 2009, 17:59
||||- - Dog Pawlowa   Цитата(sergeeff @ Jun 15 2009, 09:31) кни...   Jun 15 2009, 06:44
|||||- - sergeeff   Цитата(Dog Pawlowa @ Jun 15 2009, 09:44) ...   Jun 15 2009, 07:11
|||- - zltigo   Цитата(Dog Pawlowa @ Jun 14 2009, 20:36) ...   Jun 14 2009, 19:13
||- - sergeeff   Цитата(Dog Pawlowa @ Jun 14 2009, 20:09) ...   Jun 14 2009, 17:29
|- - SasaVitebsk   Цитата(Dog Pawlowa @ Jun 14 2009, 13:49) ...   Jun 15 2009, 08:24
|- - zltigo   Цитата(SasaVitebsk @ Jun 15 2009, 11:24) ...   Jun 15 2009, 10:43
|- - SasaVitebsk   Цитата(zltigo @ Jun 15 2009, 13:43) ...и ...   Jun 17 2009, 08:57
- - sergeeff   Мне представляется, что: 1. Есть программисты - од...   Jun 14 2009, 10:27
- - KRS   На С++ можно с помощью перезагрузки операции присв...   Jun 14 2009, 10:59
- - sergeeff   А почему все макросы в одном h-файле можно помести...   Jun 14 2009, 11:16
- - MrYuran   Я бы сделал так: #define UP(port, bit) port |=...   Jun 14 2009, 11:34
|- - another_one   Цитата(MrYuran @ Jun 14 2009, 15:34) Я бы...   Jun 14 2009, 18:41
|- - sergeeff   Цитата(another_one @ Jun 14 2009, 21:41) ...   Jun 14 2009, 18:59
|- - aaarrr   Цитата(sergeeff @ Jun 14 2009, 22:59) Еже...   Jun 14 2009, 19:05
|- - zltigo   Цитата(sergeeff @ Jun 14 2009, 21:59) Неб...   Jun 14 2009, 19:16
|- - sergeeff   Цитата(zltigo @ Jun 14 2009, 22:16) Прост...   Jun 14 2009, 19:38
|- - Dog Pawlowa   Цитата(sergeeff @ Jun 14 2009, 22:38) ......   Jun 14 2009, 19:54
||- - aaarrr   Цитата(Dog Pawlowa @ Jun 14 2009, 23:54) ...   Jun 14 2009, 20:05
|- - zltigo   Цитата(sergeeff @ Jun 14 2009, 22:38) Сог...   Jun 14 2009, 20:11
- - aaarrr   Да-да, copy-paste, в первый раз и "char...   Jun 14 2009, 19:14
- - defunct   Меня как-то никогда не смущало написать пару десят...   Jun 14 2009, 20:52
|- - zltigo   Цитата(defunct @ Jun 14 2009, 23:52) Заче...   Jun 14 2009, 21:03
|- - defunct   Цитата(zltigo @ Jun 15 2009, 00:03) Зачем...   Jun 14 2009, 21:07
|- - zltigo   Цитата(defunct @ Jun 15 2009, 00:07) Нужн...   Jun 14 2009, 21:16
|- - defunct   Цитата(zltigo @ Jun 15 2009, 00:16) А вме...   Jun 14 2009, 21:28
|- - singlskv   Цитата(defunct @ Jun 15 2009, 01:28) на м...   Jun 14 2009, 21:39
||- - defunct   Цитата(singlskv @ Jun 15 2009, 00:39) а п...   Jun 14 2009, 21:46
||- - singlskv   Цитата(defunct @ Jun 15 2009, 01:46) Пото...   Jun 14 2009, 21:54
||- - defunct   Цитата(singlskv @ Jun 15 2009, 00:54) про...   Jun 14 2009, 22:13
||- - singlskv   Цитата(defunct @ Jun 15 2009, 02:03) Вы ч...   Jun 14 2009, 22:14
||- - Dog Pawlowa   Цитата(defunct @ Jun 15 2009, 01:13) Вы м...   Jun 15 2009, 05:37
||- - defunct   Цитата(Dog Pawlowa @ Jun 15 2009, 08:37) ...   Jun 15 2009, 06:46
|- - zltigo   Цитата(defunct @ Jun 15 2009, 00:28) если...   Jun 14 2009, 22:00
|- - defunct   Цитата(zltigo @ Jun 15 2009, 01:00) Зачас...   Jun 14 2009, 22:25
|- - singlskv   Цитата(defunct @ Jun 15 2009, 02:25) Блин...   Jun 14 2009, 22:30
||- - defunct   Цитата(singlskv @ Jun 15 2009, 01:30) Ну ...   Jun 14 2009, 22:37
|- - zltigo   Цитата(defunct @ Jun 15 2009, 01:25) А ес...   Jun 15 2009, 07:05
- - ReAl   ==================== Кстати, об исходной теме и пр...   Jun 14 2009, 20:58


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 17:36
Рейтинг@Mail.ru


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