Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 19:15:01

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7588 ]     ... , , , 265, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт фев 27, 2018 07:28:40 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
вы упорно не хотите написать, как именно вам ругается компилятор. Считаете это неважным? Рискну предположить, что в его ругани все описано достаточно исчерпывающе.


все верно, компилятор ругается на неизвестный тип...в том то и парадокс вроде как определил(но не правильно, как ща понимаю) ,передал, а он все равно ругается...

Добавлено after 4 minutes 50 seconds:
Попробуйте объявить тип структуры через typedef, чтобы без всяких
Код:
struct struct_1 *
было.
я так понял тип нужно объявить внешне, чтобы видеть ее в модулях, а struct struct_1 или typedef не фатально думаю....или я ошибаюсь?

Добавлено after 5 minutes 31 second:
надо так:
Код:
// заголовочный файл main.h
#if !defined(__MAIN_H__)
#define __MAIN_H__
#include <stdint.h>
typedef struct{
   uint8_t a;
   uint8_t b;
   uint8_t c;
} my_struct;
#endif

.

какая роль условной компиляции в данном коде?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт фев 27, 2018 07:35:57 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
ROMan2947 писал(а):
вроде как определил(но не правильно, как ща понимаю) ,передал, а он все равно ругается...

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

ROMan2947 писал(а):
я так понял тип нужно объявить внешне, чтобы видеть ее в модулях, а struct struct_1 или typedef не фатально думаю....или я ошибаюсь?

Если этот заголовочник будет вставлен в несколько модулей, то фатально. Без typedef будет ругаться на то, что переменная уже определена, с typedef не будет.
ROMan2947 писал(а):
какая роль условной компиляции в данном коде?

Гарантировать что код будет скомпилирован только один раз, даже если он будет вставлен в несколько модулей.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт фев 27, 2018 10:15:01 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 1
в том то и парадокс вроде как определил

Нет никаких парадоксов - есть три программы - препроцессор, компилятор и линкер. Препроцессор применяется к каждому С-файлу в проекте - вставляет #include, подставляет #define и исполняет остальные #-директивы. Результат его работы передаётся компилятору для превращения в объектный файл с кодом функций и местом под глобальные переменные. Объектные файлы полученные из всех С-модулей проекта [и библиотеки] передаются линкеру для установления связей данных, вызовов функций и создания окончательной программы. Если компилятор ругается на неизвестный тип - значит до данной конкретной строчки определение этого типа ему не встретилось - он работает только с тем текстом, который создан для него препроцессором - ни о других С-файлах ни о H-файлах знаний у него нет. Этот текст можно найти в папке с промежуточными файлами компиляции, иногда его требуется включить в настройках проекта, иногда это выглядит как переключатель "preprocess only" - не пожалейте времени на ознакомление с результатом работы препроцессора и поймёте, что никакой магии там нет - а идёт тупая работа с текстом. :-)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт фев 27, 2018 16:49:18 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
надо так:

пока буковку в буковку не написал компиляция не шла...в итоге победа! еще понять бы как это работает, было бы вообще самолет) Учить и учить еще этот Си.

ВСЕМ огромное СПАСИБО!!!


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт фев 27, 2018 19:07:23 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ROMan2947 писал(а):
Учить и учить еще этот Си.
если в какой-нибудь книжке про Си прочитаете что-то типа "в Си можно делать так...." - дальше не читайте. начинающему надо читать те книжки, в которых написано "в Си нужно делать так..."
после того, как освоите, как НУЖНО, тогда можете читать и делать, как МОЖНО.

в частности, инклюдить Сишные файлы МОЖНО, включать в заголовочные *.h-файлы тело функции МОЖНО, и еще много чего МОЖНО, но именно на этом вы и погорели...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср фев 28, 2018 10:48:41 
Родился

Зарегистрирован: Ср фев 28, 2018 10:33:09
Сообщений: 4
Рейтинг сообщения: 0
Товарищи добрый день. имеется МК ATmega 128 написал для него простенькую прогу для теста. Сразу же и приведу:
0x15 - адрес PORTC, 0x1B - адрес PORTA по отладчику все в порядке, а когда смотрю осциллографом то выполняется только функция Drrb()! В чём проблема?
/*
* DC_Voltmetr_Prog.cpp
*
* Created: 28.02.2018 11:19:19
* Author : LAN_Admin
*/
#include <avr/io.h>
void Prb()
{
asm("sbi 0x1B,2");
asm("nop");
asm("cbi 0x1B,2");
asm("nop");
};
void Drrb()
{
asm("sbi 0x15,0");
asm("nop");
asm("cbi 0x15,0");
asm("nop");
}
int main(void)
{
DDRA=0xFF;
DDRC=0xFF;
/* Replace with your application code */
while (1)
{
Drrb();
Prb();
};
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср фев 28, 2018 10:57:50 
Открыл глаза

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Чт дек 28, 2017 23:07:31
Сообщений: 53
Рейтинг сообщения: 0
У "большИх" ATmeg есть JTAG - не забывайте его отключать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт мар 01, 2018 21:38:43 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Доброго времени суток. Когда-то на асме был написан кусок кода, собирающий из 4 байт (принятых последовательно по SPI, то есть представляющие собой по сути один 32 битный регистр) состояние нужных кнопок в 1 байт. Потому что в этих 4 байтах не все биты - это значения кнопок, есть много незначащих бит. Всего содержится инфа о 8 кнопках (по 2 кнопки в каждом байте). И вот я с помощью следующего кода собирал их в 1 байт:
Осторожно, 8051 асм :)))
Спойлер
Код:
   mov     A,      KeyByte+1   ; А теперь склеим все 4 байта в 1 и получим байт с состоянием всех 8 кнопок
   rl      A
   orl     KeyByte,A
   mov     A,      KeyByte+2
   rl      A
   rl      A
   orl     KeyByte,A
   mov     A,      KeyByte+3
   rl      A
   rl      A
   rl      A
   orl     KeyByte,A      ; Склейка всех байтов в 1 закончена, теперь у нас в KeyByte состояние всех 8 кнопок

Как это правильнее всего всего сделать на Си:
1. Переписать 1 к 1.
2. Переписать через массив.
3. Переписать через структуру.
4. Загнать все в одну 32 битную переменную еще на этапе приема по SPI, и уже ее ужимать до 8 бит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт мар 01, 2018 22:01:12 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
а словами написать, какие биты используются, для не желающих восстанавливать их по асму?
"правильнее" зависит от того, как вы потом обрабатываете кнопки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт мар 01, 2018 22:19:05 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
а словами написать, какие биты используются...

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт мар 01, 2018 22:26:01 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Сдвигами и масками. Элементарно.
Если Вы сумели такое написать на АСМе, то на Си напишите запросто.

Добавлено after 42 seconds:
Можно написать линейный код - проверки битов+установки битов. Выполняться будет быстрей.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт мар 01, 2018 23:32:56 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
0 и 4 бит каждого принятого байта.
В итоге в этом байте установленный бит - это нажатая кнопка. Все биты установлены - все кнопки нажаты. Какая разница, как потом его обрабатывать ?


Код:
u8_t button_byte (u8_t *p)
{
    return ((p[0] & 0x11) << 0) | ((p[1] & 0x11) << 1) | ((p[2] & 0x11) << 2) | ((p[3] & 0x11) << 3);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт мар 01, 2018 23:56:22 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 7
0 и 4 бит каждого принятого байта. В итоге в этом байте установленный бит - это нажатая кнопка. Все биты установлены - все кнопки нажаты. Какая разница, как потом его обрабатывать ?

РЕШАЮЩАЯ разница.
Архетипичнейший сюжет кстати - когда общественность начинает "умничать" уточнениями "а вообще вы что сделать пытаетесь?" на конкретный вроде-бы вопрос. И соискателю кажется что над ним издеваются и рейтинг зарабатывают. Но дело в том, что первична задача, а не конкретные шаги по её исполнению. У ассемблерщика свои подходцы, у С-шника свои, у плюсиста - свои. Там где первый морочится упаковкой в байт - второй с третьим наложат на принятые данные структуру с битовыми полями и будут пользоваться этими полями напрямую - оставив всё побитное кунг-фу со сдвигами и масками на долю компилятора.

Код:
struct state {
  unsigned char btn0 : 1;
  unsigned char rsv0 : 3;
  unsigned char btn1 : 1;
  unsigned char rsv1 : 3;

  unsigned char btn2 : 1;
  unsigned char rsv2 : 3;
  unsigned char btn3 : 1;
  unsigned char rsv3 : 3;

  unsigned char btn4 : 1;
  unsigned char rsv4 : 3;
  unsigned char btn5 : 1;
  unsigned char rsv5 : 3;
};

unsigned char buf[4] = { 0 };

// приняли что положено и забыли подробности как страшный сон - жизнь и так коротка

struct state* pstate = (struct state*)buf;

if (p->btn2)
  // цветомузыка
if (p->btn0)
  // танцы
if (p->btn5)
  // асисяй


_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт мар 02, 2018 09:48:26 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Всем спасибо. Я планировал делать примерно как viiv написал. Но способ Siarzhuk интересен с точки зрения познания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт мар 02, 2018 16:42:30 
Родился

Зарегистрирован: Пт мар 02, 2018 16:31:19
Сообщений: 7
Рейтинг сообщения: 0
Всем мяу! Помогите новичку разобраться с синтаксисом си для stm32. Среда разработки Keil, отладочная плата stm32f4discovery. Хочу сделать библиотеку для отображения на дисплее векторных шрифтов, в дальнейшем добавить сглаживание. Столкнулся с проблемой, что как таковых текстовых типов данных нет... А ведь хотел координаты полилиний записывать в текстовом виде:
Код:
struct TFont {
  char *Lines;
} Font[255] ;

...
   Font[48].Lines="010516364541301001|0541";  //0
   Font[81].Lines="010516364541301001|2547";  //Q
...


но вот беда... не могу посимвольно читать строку...
Что-то тут не так:
Код:
for(i=0;i<strlen(Font[C].Lines);i++)
  {
      if  (Font[C].Lines[i]!="|") { }
  }

Может кто подскажет, как это делать или как вообще лучше хранить такие цепочки? Думал по 4 байта разбить отрезки типа:
Код:
(X1 shl 12) or (Y1 shl 8) or (X2 shl 4) or Y2
, но тут тоже вопрос как их хранить?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт мар 02, 2018 21:07:17 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Shrike1987 писал(а):
А ведь хотел координаты полилиний записывать в текстовом виде
я, конечно, понимаю: ARM, 32 бита, много памяти и мегагерц, но храниить шрифт в текстовом виде?! до этого даже в Майкрософте не додумались!

шрифт, как очень активно используемый ресурс, должен быть предельно оптимальным, иначе рендеринг его на экране, да еще и со сглаживанием (вы уверены, что задачу себе по "зубам" выбрали? строку не умеете считать, а антиалиасинг - легко?)

имхо, шрифт должен быть в двоичном виде. Если векторный из отрезков прямых линий (если иначе - сразу TTF загружайте - чего там мелочиться), то в виде обычного массива стреуктур типа такого
Код:
typedef struct{
  short int dx;
  shoet int dy;
}vect_t;

typedef struct{
   short int cnt; // количество векторов
   vect_t nodes[]; // массив векторов
}symbol_t;
массив векторов описывает на сколько пикселей и в какую сторону смещается "перо", если оба поля структуры равны нулю, это означает, что перо переносится в следующую точку без рисования линии... как-то так...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт мар 02, 2018 23:30:31 
Родился

Зарегистрирован: Пт мар 02, 2018 16:31:19
Сообщений: 7
Рейтинг сообщения: 0
Да, текстовый вариант очень плох, это я понимаю. Пришел к нему, т.к. ооочень уж туго дается мне си после delphi... С точки зрения алгоритмизации - задача по зубам, причем исходники wuline сишные есть в интернете, библиотеку для своего дисплея переписал для вывода графики через буфер (благо RAM хватает) + реализация альфа канала, обновления нужного участка экрана... С периферией разобрался благодаря CubeMX. А вот синтаксис языка си ну вообще никак не лезет...

Да, я записываю действительно массив, только не векторов, а координат полилиний, где их нужно разорвать и начать рисовать новую полилинию - ставил символ "|". Прекрасно понимаю, что эта чушь будет и медленно работать и жрать много памяти. Поэтому и решил спросить совета в каком виде хранить массив типа uint16_t чисел, в которых по 4 бита будут записаны координаты отрезка (x1,y1,x2,y2) преобразованных по формуле ( X1 shl 12 ) or ( Y1 shl 8 ) or ( X2 shl 4 ) or Y2
Экономней вижу вариант писать в массив uint8_t пару координат, а разрыв полилинии - заранее определенная (невозможная или неиспользуемая) пара координат...

Ваш вариант возьму за основу, только вместо short int буду использовать uint8_t - всё таки на байт меньше )))

Благодарю, за помощь!!!

Добавлено after 41 minute 59 seconds:
Это абзац... я не могу создать массив, структура которого содержит динамический массив... :shock:
Код:
typedef struct{
  uint8_t dx;
  uint8_t dy;
} vect_t;

typedef struct{
   uint8_t cnt;
   vect_t nodes[];
} symbol_t;

symbol_t VFont[255];


Компилятор, конечно же ругается: type containing an unknown-size array is not allowed


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт мар 02, 2018 23:37:16 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Си - не делфи, в нём нет никаких динамический массивов. Есть, конечно, стандартные функции для выделения/удаления памяти в куче, но об этом долго писать. Погуглите...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб мар 03, 2018 00:08:44 
Родился

Зарегистрирован: Пт мар 02, 2018 16:31:19
Сообщений: 7
Рейтинг сообщения: 0
Ок. Разбираться со стеком, выделением памяти и т.д. для меня слишком муторно, поэтому возвращаюсь к варианту с типом char *Lines. Текст буду обновлять все равно редко, так что сойдет хранение координат в тексте...
Как же все-таки получить char от i-го элемента Lines структуры TFont?

Код:
struct TFont {
  char *Lines;
} Font[255] ;

...
   Font[48].Lines="010516364541301001|0541"; 


Font[48].Lines[i] - ругается

в коде программы загоняю примерно 25 строк в Font - все выполняется без ошибок. Теперь бы с этим научиться работать...

Добавлено after 8 minutes 12 seconds:
хотяб судя по содержимому, там полная каша...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб мар 03, 2018 00:58:01 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Код:
struct TFont {
  char *Lines;
} Font[255] ;

..............

    Font[48].Lines="010516364541301001|0541";
   
    Font[48].Lines[5] = 'A';
    char ch = Font[48].Lines[10];

GCC. Компиляция проходит успешно.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7588 ]     ... , , , 265, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y