เชถเซเชญ เชฌเชชเซเชฐ เช
เชฎเซ เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เชเซเช
Qt เช เชเซเชฐเซเชธ-เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชซเซเชฐเซเชฎเชตเชฐเซเช เชเซ เชเซเชฎเชพเช เชฎเชพเชคเซเชฐ เชเซเชฐเชพเชซเชฟเชเชฒ เชเชเชเซ เช เชจเชนเซเช, เชชเชฃ QtNetwork, เชกเซเชเชพเชฌเซเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซเชจเชพ เชตเชฐเซเชเซเชจเซ เชธเชฎเซเชน, เชเชเซเชฎเซเชถเชจ เชฎเชพเชเซ Qt (IoT เช
เชฎเชฒเซเชเชฐเชฃ เชธเชนเชฟเชค) เช
เชจเซ เชเชฃเซเช เชฌเชงเซเช เชถเชพเชฎเซเชฒ เชเซ. Qt เชเซเชฎ เชเชฎเซเชฌเซเชกเซเชก เชธเชฟเชธเซเชเชฎเซเชธเชฎเชพเช Qt เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชธเชเซเชฐเชฟเชฏ เชฐเชนเซ เชเซ, เชคเซเชฅเซ เชชเซเชธเซเชคเชเชพเชฒเชฏเซ เชคเชฆเซเชฆเชจ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเซ. เชเซ เชเซ, เชคเชพเชเซเชคเชฐเชฎเชพเช เชธเซเชงเซ, เชฅเซเชกเชพ เชฒเซเชเซเช Qt เชจเซ เชฎเชพเชเชเซเชฐเซเชเชจเซเชเซเชฐเซเชฒเชฐเซเชธเชฎเชพเช เชชเซเชฐเซเช เชเชฐเชตเชพ เชตเชฟเชถเซ เชตเชฟเชเชพเชฐเซเชฏเซเช, เชเชฆเชพเช เชเชพเชฐเชฃ เชเซ เชเชตเชพ เชเชพเชฐเซเชฏ เชฎเซเชถเซเชเซเชฒ เชฒเชพเชเซ เชเซ - Qt เชฎเซเชเซเช เชเซ, MCU เชจเชพเชจเชพ เชเซ.
เชฌเซเชเซ เชฌเชพเชเซ, เช เชเซเชทเชฃเซ เชฎเชฒเซเชเชฟเชฎเซเชกเชฟเชฏเชพ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชฎเชพเชเชเซเชฐเซเชเชจเซเชเซเชฐเซเชฒเชฐเซเชธ เชเซ เช
เชจเซ เชชเซเชฐเชฅเชฎ เชชเซเชจเซเชเชฟเชฏเชฎเซเชธเชฅเซ เชถเซเชฐเซเชทเซเช เชเซ. เชฒเชเชญเช เชเช เชตเชฐเซเชท เชชเชนเซเชฒเชพเช, Qt เชฌเซเชฒเซเช เชฆเซเชเชพเชฏเซ
Qt 4.8 เชฒเชพเชเชฌเชพ เชธเชฎเชฏเชฅเซ Embox เชชเชฐ เชชเซเชฐเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ, เชคเซเชฅเซ เช เชฎเซ เชคเซเชจเซ เชคเซเชจเชพ เชชเชฐ เช เชเชฎเชพเชตเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชเซ. เช เชฎเซ เชฎเซเชตเชฌเซเชฒเซเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเชธเชเชฆ เชเชฐเซ เชเซ - เชธเซเชชเซเชฐเชฟเชเชเซ เชเชจเชฟเชฎเซเชถเชจเชจเซเช เชเชฆเชพเชนเชฐเชฃ.
QEMU เชชเชฐ Qt เชฎเซเชตเชฌเซเชฒเซเชเซเชธ
เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เช
เชฎเซ เชเชจเชฟเชฎเซเชถเชจเชจเซ เชธเชชเซเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเชเชเซเชจเชพ เชจเซเชฏเซเชจเชคเชฎ เชธเซเช เชธเชพเชฅเซ, เชเซ เชถเชเซเชฏ เชนเซเชฏ เชคเซ, Qt เชเซเช เชตเซเช เชเซเช. เช เชฎเชพเชเซ "-qconfig เชฎเชฟเชจเชฟเชฎเชฒ, เชธเซเชฎเซเชฒ, เชฎเซเชกเชฟเชฏเชฎ..." เชตเชฟเชเชฒเซเชช เชเซ. เชคเซ Qt เชฅเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเชจเซ เชเชฃเชพ เชฎเซเชเซเชฐเซ เชธเชพเชฅเซ เชเซเชกเซ เชเซ - เชถเซเช เชธเชเซเชทเชฎ เชเชฐเชตเซเช / เชถเซเช เช
เชเซเชทเชฎ เชเชฐเชตเซเช. เช เชตเชฟเชเชฒเซเชช เชชเชเซ, เช
เชฎเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจเชฎเชพเช เช
เชจเซเชฏ เชซเซเชฒเซเช เชเชฎเซเชฐเซเช เชเซเช เชเซ เชเชชเชฃเซ เชเชเชเช เชฌเซเชเซเช เช
เชเซเชทเชฎ เชเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซเชเช. เช
เชนเซเช เช
เชฎเชพเชฐเชพ เชเช เชเชฆเชพเชนเชฐเชฃ เชเซ
Qt เชเชพเชฐเซเชฏ เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ OS เชธเซเชธเชเชเชคเชคเชพ เชธเซเชคเชฐ เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเช เชฐเชธเซเชคเซ QPA (Qt เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชเชฌเซเชธเซเชเซเชฐเซเชเซเชถเชจ) เชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพเชจเซ เชเซ. เช เชฎเซ Qt เชฎเชพเช เชธเชฎเชพเชตเชฟเชทเซเช เชคเซเชฏเชพเชฐ fb_base เชชเซเชฒเชเชเชจเชจเซ เชเชงเชพเชฐ เชคเชฐเซเชเซ เชฒเซเชงเซ, เชเซเชจเชพ เชเชงเชพเชฐเซ Linux เชฎเชพเชเซ QPA เชเชพเชฎ เชเชฐเซ เชเซ. เชชเชฐเชฟเชฃเชพเชฎ เช เชเชฎเชฌเซเชเซเชธเชเชซเชฌเซ เชจเชพเชฎเชจเซเช เชเช เชจเชพเชจเซเช เชชเซเชฒเชเชเชจ เชเซ, เชเซ เชเชฎเซเชฌเซเชเซเชธเชจเชพ เชซเซเชฐเซเชฎเชฌเชซเชฐ เชธเชพเชฅเซ Qt เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ, เช เชจเซ เชชเชเซ เชคเซ เชฌเชนเชพเชฐเชจเซ เชเซเช เชฎเชฆเชฆ เชตเชฟเชจเชพ เชคเซเชฏเชพเช เชฆเซเชฐเซ เชเซ.
เชชเซเชฒเชเชเชจ เชฌเชจเชพเชตเชตเชพเชจเซเช เช เชเซเชตเซเช เชฆเซเชเชพเชฏ เชเซ
QEmboxFbIntegration::QEmboxFbIntegration()
: fontDb(new QGenericUnixFontDatabase())
{
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
const char *fbPath = "/dev/fb0";
fbFd = open(fbPath, O_RDWR);
if (fbPath < 0) {
qFatal("QEmboxFbIntegration: Error open framebuffer %s", fbPath);
}
if (ioctl(fbFd, FBIOGET_FSCREENINFO, &finfo) == -1) {
qFatal("QEmboxFbIntegration: Error ioctl framebuffer %s", fbPath);
}
if (ioctl(fbFd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
qFatal("QEmboxFbIntegration: Error ioctl framebuffer %s", fbPath);
}
fbWidth = vinfo.xres;
fbHeight = vinfo.yres;
fbBytesPerLine = finfo.line_length;
fbSize = fbBytesPerLine * fbHeight;
fbFormat = vinfo.fmt;
fbData = (uint8_t *)mmap(0, fbSize, PROT_READ | PROT_WRITE,
MAP_SHARED, fbFd, 0);
if (fbData == MAP_FAILED) {
qFatal("QEmboxFbIntegration: Error mmap framebuffer %s", fbPath);
}
if (!fbData || !fbSize) {
qFatal("QEmboxFbIntegration: Wrong framebuffer: base = %p,"
"size=%d", fbData, fbSize);
}
mPrimaryScreen = new QEmboxFbScreen(fbData, fbWidth,
fbHeight, fbBytesPerLine,
emboxFbFormatToQImageFormat(fbFormat));
mPrimaryScreen->setPhysicalSize(QSize(fbWidth, fbHeight));
mScreens.append(mPrimaryScreen);
this->printFbInfo();
}
เช เชจเซ เช เชฐเซเชกเซเชฐเซเชเชเช เชเซเชตเซ เชฆเซเชเชพเชถเซ
QRegion QEmboxFbScreen::doRedraw()
{
QVector<QRect> rects;
QRegion touched = QFbScreen::doRedraw();
DPRINTF("QEmboxFbScreen::doRedrawn");
if (!compositePainter) {
compositePainter = new QPainter(mFbScreenImage);
}
rects = touched.rects();
for (int i = 0; i < rects.size(); i++) {
compositePainter->drawImage(rects[i], *mScreenImage, rects[i]);
}
return touched;
}
เชชเชฐเชฟเชฃเชพเชฎเซ, เชฎเซเชฎเชฐเซ เชธเชพเชเช -Os เชฎเชพเชเซ เชเชฎเซเชชเชพเชเชฒเชฐ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชธเชเซเชทเชฎ เชฅเชตเชพเชฅเซ, เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชเชฎเซเช 3.5 MB เชจเซ เชฌเชนเชพเชฐ เชเชตเซ, เชเซ เช เชฒเชฌเชคเซเชค STM32F746 เชจเซ เชฎเซเชเซเชฏ เชฎเซเชฎเชฐเซเชฎเชพเช เชฌเชเชงเชฌเซเชธเชคเซ เชจเชฅเซ. เชเซเชฎ เชเซ เช เชฎเซ เชเชชเชจเชธเซเชตเซ เชตเชฟเชถเซ เช เชฎเชพเชฐเชพ เช เชจเซเชฏ เชฒเซเชเชฎเชพเช เชชเชนเซเชฒเซเชฅเซ เช เชฒเชเซเชฏเซเช เชเซ, เช เชฌเซเชฐเซเชก เชชเชพเชธเซ เชเซ:
- 1 เชเชฎเชฌเซ เชฐเซเชฎ
- 320 KB เชฐเซเชฎ
- 8 MB SDRAM
- 16 MB QSPI
QSPI เชคเชฐเชซเชฅเซ เชเซเชก เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชธเชชเซเชฐเซเช เชชเชนเซเชฒเซเชฅเซ เช OpenCV เชฎเชพเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเซเชตเชพเชฅเซ, เช เชฎเซ QSPI เชฎเชพเช เชธเชฎเชเซเชฐ Embox c Qt เชเชฎเซเช เชฒเซเชก เชเชฐเซเชจเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชเซ. เช เชจเซ เชนเซเชฐเซ, QSPI เชฅเซ เชฒเชเชญเช เชคเชฐเชค เช เชฌเชงเซเช เชถเชฐเซ เชฅเชฏเซเช! เชชเชฐเชเชคเซ OpenCV เชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เชคเซ เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช เชเซ เชเซ เชคเซ เชเซเชฌ เชงเซเชฎเซเชฅเซ เชเชพเชฎ เชเชฐเซ เชเซ.
เชคเซเชฅเซ, เช
เชฎเซ เชคเซเชจเซ เช เชฐเซเชคเซ เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช - เชชเชนเซเชฒเชพ เช
เชฎเซ เชเชฎเซเชเชจเซ QSPI เชชเชฐ เชเซเชชเชฟ เชเชฐเซเช เชเซเช, เชชเชเซ เชคเซเชจเซ SDRAM เชฎเชพเช เชฒเซเชก เชเชฐเซเช เชเซเช เช
เชจเซ เชคเซเชฏเชพเชเชฅเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเซเช เชเซเช. SDRAM เชฅเซ เชคเซ เชฅเซเชกเซเช เชเชกเชชเซ เชฌเชจเซเชฏเซเช, เชชเชฐเชเชคเซ เชนเชเซ เชชเชฃ QEMU เชฅเซ เชฆเซเชฐ เชเซ.
เชเชเชณ, เชซเซเชฒเซเชเชฟเชเช เชชเซเชเชจเซเชเชจเซ เชธเชฎเชพเชตเซเชถ เชเชฐเชตเชพเชจเซ เชตเชฟเชเชพเชฐ เชนเชคเซ - เชเซเชตเชเซ, Qt เชเชจเชฟเชฎเซเชถเชจเชฎเชพเช เชเซเชฐเชธเชจเชพ เชเซเชเชฐเซเชกเชฟเชจเซเชเซเชธเชจเซ เชเซเชเชฒเซเช เชเชฃเชคเชฐเซเช เชเชฐเซ เชเซ. เช
เชฎเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชฏเซ, เชชเชฐเชเชคเซ เช
เชนเซเช เช
เชฎเชจเซ เชเซเช เชฆเซเชถเซเชฏเชฎเชพเชจ เชชเซเชฐเชตเซเช เชฎเชณเซเชฏเซ เชจเชฅเซ, เชคเซเชฎ เชเชคเชพเช
เชซเซเชฐเซเชฎเชฌเชซเชฐเชจเซ SDRAM เชฅเซ เชเชเชคเชฐเชฟเช เชฎเซเชฎเชฐเซเชฎเชพเช เชเชธเซเชกเชตเชพเชจเซ เชธเซเชฅเซ เช เชธเชฐเชเชพเชฐเช เชตเชฟเชเชพเชฐ เชนเชคเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเซ เชธเซเชเซเชฐเซเชจเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซเชจเซ 480x272 เชจเชนเซเช, เชชเชฐเชเชคเซ 272x272 เชฌเชจเชพเชตเซเชฏเชพเช เชเซ. เช เชฎเซ A8R8G8B8 เชฅเซ R5G6B5 เชธเซเชงเซ เชฐเชเชเชจเซ เชเชเชกเชพเช เชชเชฃ เชเชเชพเชกเซ เชเซ, เชเชฎ เชเช เชชเชฟเชเซเชธเซเชฒเชจเซเช เชเชฆ 4 เชฅเซ 2 เชฌเชพเชเชเซเชธ เชเชเชพเชกเซเชฏเซเช เชเซ. เชชเชฐเชฟเชฃเชพเชฎเซ เชซเซเชฐเซเชฎเชฌเชซเชฐเชจเซเช เชเชฆ 272 * 272 * 2 = 147968 เชฌเชพเชเชเซเชธ เชเซ. เชเชจเชพเชฅเซ เชจเซเชเชงเชชเชพเชคเซเชฐ เชชเซเชฐเชตเซเชเช เชฅเชฏเซ, เชเชฆเชพเช เชธเซเชฅเซ เชจเซเชเชงเชชเชพเชคเซเชฐ เชฐเซเชคเซ, เชเชจเชฟเชฎเซเชถเชจ เชฒเชเชญเช เชธเชฐเชณ เชฌเชจเซเชฏเซเช.
เชจเชตเซเชจเชคเชฎ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ RAM เชฎเชพเชเชฅเซ Embox เชเซเชก เช เชจเซ SDRAM เชฎเชพเชเชฅเซ Qt เชเซเชก เชเชฒเชพเชตเชตเชพเชจเซเช เชนเชคเซเช. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเซ เชชเชนเซเชฒเชพ, เชนเชเชฎเซเชถเชจเซ เชเซเชฎ, เชธเซเชเซเชเชฟเชเชฒเซ เชเชฎเซเชฌเซเชเซเชธเชจเซ Qt เชธเชพเชฅเซ เชเซเชกเซเช เชเซเช, เชชเชฐเชเชคเซ เช เชฎเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเชพ เชเซเชเซเชธเซเช, เชฐเซเชกเซเชเชพ, เชกเซเชเชพ เช เชจเซ bss เชธเซเชเชฎเซเชจเซเชเซเชธเชจเซ QSPI เชฎเชพเช เชฎเซเชเซเช เชเซเช เชเซเชฅเซ เชชเชเซ เชคเซเชจเซ SDRAM เชชเชฐ เชเซเชชเชฟ เชเชฐเซ เชถเชเชพเชฏ.
section (qt_text, SDRAM, QSPI)
phdr (qt_text, PT_LOAD, FLAGS(5))
section (qt_rodata, SDRAM, QSPI)
phdr (qt_rodata, PT_LOAD, FLAGS(5))
section (qt_data, SDRAM, QSPI)
phdr (qt_data, PT_LOAD, FLAGS(6))
section (qt_bss, SDRAM, QSPI)
phdr (qt_bss, PT_LOAD, FLAGS(6))
ROM เชฎเชพเชเชฅเซ Embox เชเซเชกเชจเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเซเชจเซ, เช เชฎเชจเซ เชจเซเชเชงเชชเชพเชคเซเชฐ เชชเซเชฐเชตเซเชเช เชชเชฃ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เชเชจเชฟเชฎเซเชถเชจ เชเชเชฆเชฎ เชธเชฐเชณ เชฌเชจเซเชฏเซเช:
เชเซเชฌ เช เช เชเชคเชฎเชพเช, เชฒเซเช เชคเซเชฏเชพเชฐ เชเชฐเชคเซ เชตเชเชคเซ เช เชจเซ เชตเชฟเชตเชฟเชง เชเชฎเซเชฌเซเชเซเชธ เชฐเซเชชเชฐเซเชเชพเชเชเชจเซเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเชคเซ เชตเชเชคเซ, เชคเซ เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช เชเซ QT เชฎเซเชตเชฌเซเชฒเซเชเซเชธ SDRAM เชฎเชพเช เชซเซเชฐเซเชฎเชฌเชซเชฐ เชธเชพเชฅเซ QSPI เชฎเชพเชเชฅเซ เชธเชฐเชธ เชเชพเชฎ เชเชฐเซ เชเซ, เช เชจเซ เช เชกเชเชฃ เชเซเชเซเชเชธเชชเชฃเซ เชซเซเชฐเซเชฎเชฌเชซเชฐเชจเชพ เชเชฆเชจเซ เชนเชคเซ! เชฆเซเชเซเชคเซ เชฐเซเชคเซ, เชชเซเชฐเชพเชฐเชเชญเชฟเช "เชธเซเชฒเชพเชเชกเชถเซ" เชจเซ เชฆเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ, เชซเซเชฐเซเชฎเชฌเชซเชฐเชจเชพ เชเชฆเชฎเชพเช เชฎเชพเชฎเซเชฒเซ เชเชเชพเชกเชพเชจเซ เชเชพเชฐเชฃเซ 2-เชเชฃเซ เชชเซเชฐเชตเซเชเช เชชเซเชฐเชคเซ เชนเชคเซ. เชชเชฐเชเชคเซ เชฎเชพเชคเซเชฐ เชเชฎเซเชฌเซเชเซเชธ เชเซเชกเชจเซ เชตเชฟเชตเชฟเชง เชเชกเชชเซ เชธเซเชฎเซเชคเชฟเชเชฎเชพเช เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเซเชจเซ เชเชตเชพ เชชเชฐเชฟเชฃเชพเชฎ เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเซเช เชถเชเซเชฏ เชจ เชนเชคเซเช (เชชเซเชฐเชตเซเชเช 2 เชจ เชนเชคเซ, เชชเชฐเชเชคเซ เชฒเชเชญเช 1.5 เชเชฃเซ เชนเชคเซ).
เชคเซเชจเซ เชเชพเชคเซ เชเซเชตเซ เชฐเซเชคเซ เช เชเชฎเชพเชตเชตเซเช
เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ STM32F7-เชกเชฟเชธเซเชเชตเชฐเซ เชเซ, เชคเซ เชคเชฎเซ เชเชพเชคเซ เช Embox เชนเซเช เชณ Qt เชเชฒเชพเชตเซ เชถเชเซ เชเซ. เชคเชฎเซ เช
เชฎเชพเชฐเชพ เชชเชฐ เช เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชคเซ เชตเชพเชเชเซ เชถเชเซ เชเซ
เชจเชฟเชทเซเชเชฐเซเชท
เชชเชฐเชฟเชฃเชพเชฎเซ, เช เชฎเซ Qt เชฒเซเชจเซเช เชเชฐเชตเชพเชฎเชพเช เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เชฅเชฏเชพ! เชเชพเชฐเซเชฏเชจเซ เชเชเชฟเชฒเชคเชพ, เช เชฎเชพเชฐเชพ เชฎเชคเซ, เชเชเชเช เช เชเชถเซ เช เชคเชฟเชถเชฏเซเชเซเชคเชฟเชชเซเชฐเซเชฃ เชเซ. เชธเซเชตเชพเชญเชพเชตเชฟเช เชฐเซเชคเซ, เชคเชฎเชพเชฐเซ เชฎเชพเชเชเซเชฐเซเชเชจเซเชเซเชฐเซเชฒเชฐเซเชธเชจเซ เชตเชฟเชถเชฟเชทเซเชเชคเชพเชเชจเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชตเชพเชจเซ เช เชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชฎเซเชชเซเชฏเซเชเชฐ เชธเชฟเชธเซเชเชฎเซเชธเชจเชพ เชเชฐเซเชเชฟเชเซเชเซเชเชฐเชจเซ เชธเชฎเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชชเชฐเชฟเชฃเชพเชฎเซ เชเชพเชฃเซเชคเซ เชนเชเซเชเชค เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซเชถ เชเชฐเซ เชเซ เชเซ เชเชฎเซเชชเซเชฏเซเชเชฟเชเช เชธเชฟเชธเซเชเชฎเชฎเชพเช เช เชตเชฐเซเชง เชชเซเชฐเซเชธเซเชธเชฐ เชจเชฅเซ, เชชเชฐเชเชคเซ เชฎเซเชฎเชฐเซ เชเซ.
เช เชตเชฐเซเชทเซ เช
เชฎเซ เชเชคเซเชธเชตเชฎเชพเช เชญเชพเช เชฒเชเชถเซเช
เชธเซเชฐเซเชธ: www.habr.com