ืคึผืึธืจื˜ื™ื ื’ Qt ืฆื• STM32

ืคึผืึธืจื˜ื™ื ื’ Qt ืฆื• STM32ื ื’ื•ื˜ืŸ ืžื™ื˜ืื’ ืžื™ืจ ื–ืขื ืขืŸ ืื™ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืขืžื‘ืึธืงืก ืœืึธื ื˜ืฉื˜ Qt ืื•ื™ืฃ STM32F7-Discovery ืื•ืŸ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืจืขื“ืŸ ื•ื•ืขื’ืŸ ืื™ื. ืคืจื™ืขืจ, ืžื™ืจ ืฉื•ื™ืŸ ื“ืขืจืฆื™ื™ืœื˜ ื•ื•ื™ ืžื™ืจ ื’ืขืจืื˜ืŸ ืฆื• ืงืึทื˜ืขืจ OpenCV.

Qt ืื™ื– ืึท ืงืจื™ื™ึทื–-ืคึผืœืึทื˜ืคืึธืจืžืข ืคืจื™ื™ืžื•ื•ืขืจืง ื•ื•ืึธืก ื›ื•ืœืœ ื ื™ื˜ ื‘ืœื•ื™ื– ื’ืจืึทืคื™ืงืึทืœ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ, ืึธื‘ืขืจ ืื•ื™ืš ืึทื–ืึท ื˜ื™ื ื’ื– ื•ื•ื™ QtNetwork, ืึท ืกื›ื•ื ืคื•ืŸ ืงืœืืกืŸ ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื–, Qt ืคึฟืึทืจ ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ (ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืคึฟืึทืจ ื™ืึธื˜ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ) ืื•ืŸ ืคื™ืœ ืžืขืจ. ื“ื™ Qt ืžืึทื ืฉืึทืคึฟื˜ ืื™ื– ืคึผืจืึธื•ืึทืงื˜ื™ื•ื• ื•ื•ืขื’ืŸ ื ื™ืฆืŸ Qt ืื™ืŸ ืขืžื‘ืขื“ื™ื“ ืกื™ืกื˜ืขืžืขืŸ, ืึทื–ื•ื™ ื“ื™ ืœื™ื™ื‘ืจืขืจื™ื– ื–ืขื ืขืŸ ื’ืึทื ืฅ ืงืึทื ืคื™ื’ื™ืขืจืึทื‘ืึทืœ. ืึธื‘ืขืจ, ื‘ื™ื– ืœืขืฆื˜ื ืก, ื•ื•ื™ื™ื ื™ืง ืžืขื ื˜ืฉืŸ ื’ืขื“ืึทื ืง ื•ื•ืขื’ืŸ ืคึผืึธืจื˜ื™ื ื’ Qt ืฆื• ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจืก, ืžื™ืกื˜ืึธืžืข ื•ื•ื™ื™ึทืœ ืึทื–ืึท ืึท ืึทืจื‘ืขื˜ ืกื™ืžื– ืฉื•ื•ืขืจ - Qt ืื™ื– ื’ืจื•ื™ืก, MCUs ื–ืขื ืขืŸ ืงืœื™ื™ืŸ.

ืื•ื™ืฃ ื“ื™ ืื ื“ืขืจืข ื”ืึทื ื˜, ื“ืขืจื•ื•ื™ื™ึทืœ ืขืก ื–ืขื ืขืŸ ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจืก ื“ื™ื–ื™ื™ื ื“ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ืžื•ืœื˜ื™ืžืขื“ื™ืึท ืื•ืŸ ื”ืขื›ืขืจ ื•ื•ื™ ื“ื™ ืขืจืฉื˜ืขืจ ืคึผืขื ื˜ื™ื•ืžืก. ืžื™ื˜ ืึท ื™ืึธืจ ืฆื•ืจื™ืง, ื“ื™ Qt ื‘ืœืึธื’ ืื™ื– ืืจื•ื™ืก ืคึผืึธืกื˜ืŸ. ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื’ืขืžืื›ื˜ ืึท ืคึผืึธืจื˜ ืคื•ืŸ Qt ืคึฟืึทืจ ื“ื™ RTEMS OS, ืื•ืŸ ืœืึธื ื˜ืฉื˜ ื‘ื™ื™ืฉืคื™ืœืŸ ืžื™ื˜ ื•ื•ื™ื“ื–ืฉื™ืฅ ืื•ื™ืฃ ืขื˜ืœืขื›ืข ื‘ืึธืจื“ื– ื•ื•ืึธืก ืœื•ื™ืคืŸ stm32f7. ื“ืึธืก ื”ืึธื˜ ืื•ื ื“ื– ืื™ื ื˜ืขืจืขืกื™ืจื˜. ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืืžืขืจืงื˜, ืื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื–ื™ืš ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืขื’ืŸ ืื™ื, ืึทื– Qt ืื™ื– ืคึผืึทืžืขืœืขืš ืื•ื™ืฃ ื“ื™ STM32F7-Discovery. ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื—ื™ื“ื•ืฉื˜ ืื•ื™ื‘ ืžื™ืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ Qt ืื•ื ื˜ืขืจ ืขืžื‘ืึธืงืก, ืื•ืŸ ื ื™ื˜ ื ืึธืจ ืฆื™ืขืŸ ืึท ื•ื•ื™ื“ื–ืฉื™ื˜, ืึธื‘ืขืจ ืœื•ื™ืคืŸ ืึทืŸ ืึทื ืึทืžื™ื™ืฉืึทืŸ.

Qt 4.8 ืื™ื– ื’ืขื•ื•ืขืŸ ืคึผืึธืจื˜ื™ื“ ืฆื• ืขืžื‘ืึธืงืก ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜, ืึทื–ื•ื™ ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืขืก ืื•ื™ืฃ ืขืก. ืžื™ืจ ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื“ื™ ืžืึธื•ื•ืขื‘ืœืึธืงืงืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ - ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืกืคึผืจื™ื ื’ื™ ืึทื ืึทืžื™ื™ืฉืึทืŸ.

Qt ืžืึธื•ื•ืขื‘ืœืึธืงืงืก ืื•ื™ืฃ QEMUืคึผืึธืจื˜ื™ื ื’ Qt ืฆื• STM32

ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜, ืžื™ืจ ืงืึทื ืคื™ื’ื™ืขืจ Qt, ืื•ื™ื‘ ืžืขื’ืœืขืš, ืžื™ื˜ ื“ื™ ืžื™ื ื™ืžื•ื ื’ืึทื ื’ ืคื•ืŸ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ืคืืจืœืื ื’ื˜ ืฆื• ืฉื˜ื™ืฆืŸ ืึทื ืึทืžื™ื™ืฉืึทืŸ. ืคึฟืึทืจ ื“ืขื ืขืก ืื™ื– ืึทืŸ ืึธืคึผืฆื™ืข "-qconfig ืžื™ื ื™ืžืึทืœ, ืงืœื™ื™ืŸ, ืžื™ื˜ืœ ...". ืขืก ืงืึทื ืขืงืฅ ืึท ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืคึฟื•ืŸ Qt ืžื™ื˜ ืคื™ืœืข ืžืึทืงืจืึธืก - ื•ื•ืึธืก ืฆื• ื’ืขื‘ืŸ / ื•ื•ืึธืก ืฆื• ื“ื™ืกื™ื™ื‘ืึทืœ. ื ืึธืš ื“ืขื ืึธืคึผืฆื™ืข, ืžื™ืจ ืœื™ื™ื’ืŸ ืื ื“ืขืจืข ืคืœืึทื’ืก ืฆื• ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ื™ื‘ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื“ื™ืกื™ื™ื‘ืึทืœ ืขืคึผืขืก ืึทื ื“ืขืจืฉ. ื“ืึธ ืื™ื– ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ื›ึผื“ื™ Qt ื–ืึธืœ ืึทืจื‘ืขื˜ืŸ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื™ื™ื’ืŸ ืึทืŸ ืึทืก ืงืึทืžืคึผืึทื˜ืึทื‘ื™ืœืึทื˜ื™ ืฉื™ื›ื˜ืข. ืื™ื™ืŸ ื•ื•ืขื’ ืื™ื– ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ QPA (Qt Platform Abstraction). ืžื™ืจ ื’ืขื ื•ืžืขืŸ ื•ื•ื™ ืึท ื™ืงืขืจ ื“ื™ ืคืึทืจื˜ื™ืง fb_base ืคึผืœื•ื’ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ Qt, ืื•ื™ืฃ ื“ืขืจ ื‘ืื–ืข ืคื•ืŸ โ€‹โ€‹ื•ื•ืึธืก QPA ืคึฟืึทืจ ืœื™ื ื•ืงืก ืึทืจื‘ืขื˜. ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ืึท ืงืœื™ื™ืŸ ืคึผืœื•ื’ื™ืŸ ื’ืขืจื•ืคืŸ emboxfb, ื•ื•ืึธืก ื’ื™ื˜ 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 ืžืขื’ืื‘ื™ื™ื˜ืŸ, ื•ื•ืึธืก ืคื•ืŸ ืงื•ืจืก ืื™ื– ื ื™ืฉื˜ ืคึผืึทืกื™ืง ืื™ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ื–ื›ึผืจื•ืŸ ืคื•ืŸ ื“ื™ STM32F746. ื•ื•ื™ ืžื™ืจ ืฉื•ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืื•ื ื“ื–ืขืจ ืื ื“ืขืจืข ืึทืจื˜ื™ืงืœ ื•ื•ืขื’ืŸ OpenCV, ื“ืขื ื‘ืจืขื˜ ื”ืื˜:

  • 1 ืžื‘ ืจืึทื
  • 320 ืงื‘ ื‘ืึทืจืึทืŸ
  • 8 MB SDRAM
  • 16 ืžื‘ QSPI

ื–ื™ื ื˜ ื“ื™ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ืงืึธื“ ืคื•ืŸ QSPI ืื™ื– ืฉื•ื™ืŸ ืฆื•ื’ืขืœื™ื™ื’ื˜ ืฆื• OpenCV, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ืœืึธื•ื“ื™ื ื’ ื“ื™ ื’ืื ืฆืข Embbox c Qt ื‘ื™ืœื“ ืื™ืŸ QSPI. ืื•ืŸ ื”ื•ืจื™ื™, ืึทืœืฅ ืื ื’ืขื”ื•ื™ื‘ืŸ ื›ึผืžืขื˜ ืชื™ื›ืฃ ืคื•ืŸ QSPI! ืึธื‘ืขืจ ื•ื•ื™ ืื™ืŸ ื“ืขื ืคืึทืœ ืคื•ืŸ OpenCV, ืขืก ืคืืจืงืขืจื˜ ืื•ื™ืก ืึทื– ืขืก ืึทืจื‘ืขื˜ ืฆื• ืกืœืึธื•ืœื™.

ืคึผืึธืจื˜ื™ื ื’ Qt ืฆื• STM32

ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื˜ืึธืŸ ื“ืึธืก - ืขืจืฉื˜ืขืจ, ืžื™ืจ ื ืึธื›ืžืึทื›ืŸ ื“ื™ ื‘ื™ืœื“ ืฆื• QSPI, ื“ืขืžืึธืœื˜ ืœืึธื“ืŸ ืขืก ืื™ืŸ SDRAM ืื•ืŸ ื•ื™ืกืคื™ืจืŸ ืคึฟื•ืŸ ื“ืึธืจื˜. ืคึฟื•ืŸ SDRAM ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ืึท ื‘ื™ืกืœ ืคืึทืกื˜ืขืจ, ืึธื‘ืขืจ ื ืึธืš ื•ื•ื™ื™ึทื˜ ืคื•ืŸ QEMU.

ืคึผืึธืจื˜ื™ื ื’ Qt ืฆื• STM32

ื“ืขืจื ืึธืš, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื’ืขื“ืึทื ืง ืฆื• ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืึท ืคืœืึธื•ื˜ื™ื ื’ ืคื•ื ื˜ - ื ืึธืš ืึทืœืข, Qt ื˜ื•ื˜ ืขื˜ืœืขื›ืข ื—ืฉื‘ื•ื ื•ืช ืคื•ืŸ ื“ื™ ืงืึธื•ืึธืจื“ืึทื ืึทืฅ ืคื•ืŸ ืกืงื•ื•ืขืจื– ืื™ืŸ ืึทื ืึทืžื™ื™ืฉืึทืŸ. ืžื™ืจ ื’ืขืคืจื•ื•ื•ื˜, ืึธื‘ืขืจ ื“ืึธ ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื‘ืึทืงื•ืžืขืŸ ืงื™ื™ืŸ ืงืขื ื˜ื™ืง ืึทืงืกืขืœืขืจื™ื™ืฉืึทืŸ, ื›ืึธื˜ืฉ ืื™ืŸ ืึทืจื˜ื™ืงืœ Qt ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืงืœื™ื™ืžื“ ืึทื– FPU ื’ื™ื˜ ืึท ื‘ืึทื˜ื™ื™ื˜ื™ืง ืคืึทืจื’ืจืขืกืขืจืŸ ืื™ืŸ ื’ื™ื›ืงื™ื™ึทื˜ ืคึฟืึทืจ "ื“ืจืึทื’ื™ื ื’ ืึทื ืึทืžื™ื™ืฉืึทืŸ" ืื•ื™ืฃ ื˜ืึธื•ื˜ืฉืกืงืจืขืขืŸ. ืขืก ืงืขืŸ ื–ื™ื™ืŸ ื‘ืื˜ื™ื™ื˜ื™ืง ื•ื•ื™ื™ื ื™ืงืขืจ ืคืœืึธื•ื˜ื™ื ื’ ืคื•ื ื˜ ื—ืฉื‘ื•ื ื•ืช ืื™ืŸ ืžืึธื•ื•ืขื‘ืœืึธืงืงืก, ืื•ืŸ ื“ืึธืก ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื“ื™ ืกืคึผืขืฆื™ืคื™ืฉ ื‘ื™ื™ึทืฉืคึผื™ืœ.

ื“ื™ ืžืขืจืกื˜ ืขืคืขืงื˜ื™ื•ื• ื’ืขื“ืึทื ืง ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ืคืจืึทืžืขื‘ื•ืคืขืจ ืคื•ืŸ SDRAM ืฆื• ื™ื ืขืจืœืขืš ื–ื›ึผืจื•ืŸ. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื’ืขืžืื›ื˜ ื“ื™ ืคืึทืจืฉื˜ืขืœืŸ ื“ื™ืžืขื ืฉืึทื ื– ื ื™ืฉื˜ 480ืงืก272, ืึธื‘ืขืจ 272ืงืก272. ืžื™ืจ ืื•ื™ืš ืœืึธื•ืขืจื“ ื“ื™ ืงืึธืœื™ืจ ื˜ื™ืคืงื™ื™ึทื˜ ืคื•ืŸ A8R8G8B8 ืฆื• R5G6B5, ืึทื–ื•ื™ ืจื™ื“ื•ืกื™ื ื’ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ืื™ื™ืŸ ืคึผื™ืงืกืขืœ ืคื•ืŸ 4 ืฆื• 2 ื‘ื™ื˜ืขืก. ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ืจืึทื ื‘ืึทืคืขืจ ื’ืจื™ื™ืก ืื™ื– 272 * 272 * 2 = 147968 ื‘ื™ื˜ืขืก. ื“ืึธืก ื”ืึธื˜ ื’ืขื’ืขื‘ืŸ ืึท ื‘ืึทื˜ื™ื™ื˜ื™ืง ืึทืงืกืขืœืขืจื™ื™ืฉืึทืŸ, ื˜ืึธืžืขืจ ืจื•ื‘ึฟ ื‘ืืžืขืจืงื˜, ื“ื™ ืึทื ืึทืžื™ื™ืฉืึทืŸ ืื™ื– ื›ึผืžืขื˜ ื’ืœืึทื˜.

ื“ื™ ืœืขืฆื˜ืข ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ืœื•ื™ืคืŸ ืขืžื‘ืึธืงืก ืงืึธื“ ืคึฟื•ืŸ ื‘ืึทืจืึทืŸ ืื•ืŸ Qt ืงืึธื“ ืคึฟื•ืŸ SDRAM. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ืขืจืฉื˜ืขืจ, ื•ื•ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ืกื˜ืึทื˜ื™ืงืœื™ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืขืžื‘ืึธืงืก ืฆื•ื–ืึทืžืขืŸ ืžื™ื˜ 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, ืžื™ืจ ืื•ื™ืš ื‘ืืงื•ืžืขืŸ ืึท ื‘ืืžืขืจืงื˜ ืึทืงืกืขืœืขืจื™ื™ืฉืึทืŸ. ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ื“ื™ ืึทื ืึทืžื™ื™ืฉืึทืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืึทื ืฅ ื’ืœืึทื˜:


ืื™ืŸ ื“ื™ ืกื•ืฃ, ื‘ืฉืขืช ืคึผืจื™ืคึผืขืจื™ื ื’ ื“ืขื ืึทืจื˜ื™ืงืœ ืื•ืŸ ื˜ืจื™ื™ื ื’ ืคืึทืจืฉื™ื“ืขื ืข ืขืžื‘ืึธืงืก ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื–, ืขืก ืคืืจืงืขืจื˜ ืื•ื™ืก ืึทื– Qt ืžืึธื•ื•ืขื‘ืœืึธืงืงืก ืึทืจื‘ืขื˜ ื’ืจื•ื™ืก ืคึฟื•ืŸ QSPI ืžื™ื˜ ืึท Framebuffer ืื™ืŸ SDRAM, ืื•ืŸ ื“ื™ ื‘ืึทื˜ืึทืœื ืขืง ืื™ื– ืคึผื•ื ืงื˜ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ืขื Framebuffer! ืžืฉืžืขื•ืช, ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืขืจืฉื˜ "ืกืœื™ื“ืขืฉืึธื•ื•", ืึท 2-ืคืึทืจืœื™ื™ื’ืŸ ืึทืงืกืขืœืขืจื™ื™ืฉืึทืŸ ืื™ื– ื’ืขื ื•ื’ ืจืขื›ื˜ ืฆื• ืึท ื‘ืึทื ืึทืœ ืจืขื“ื•ืงืฆื™ืข ืื™ืŸ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืคืจืึทืžืขื‘ืึทืคืขืจ. ืึธื‘ืขืจ ืขืก ืื™ื– ื ื™ื˜ ืžืขื’ืœืขืš ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ืึทื–ืึท ืึท ืจืขื–ื•ืœื˜ืึทื˜ ื“ื•ืจืš ื˜ืจืึทื ืกืคืขืจื™ื ื’ ื‘ืœื•ื™ื– ื“ื™ ืขืžื‘ืึธืงืก ืงืึธื“ ืฆื• ืคืึทืจืฉื™ื“ืŸ ืฉื ืขืœ ืžืขืžืขืจื™ื– (ื“ื™ ืึทืงืกืขืœืขืจื™ื™ืฉืึทืŸ ืื™ื– ื ื™ืฉื˜ 2, ืึธื‘ืขืจ ื•ื•ืขื’ืŸ 1.5 ืžืืœ).

ื•ื•ื™ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืขืก ื–ื™ืš

ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ืึท STM32F7-ืึทื ื˜ื“ืขืงื•ื ื’, ืื™ืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ Qt ืื•ื ื˜ืขืจ ืขืžื‘ืึธืงืก ื–ื™ืš. ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ื•ื•ื™ ื“ืึธืก ืื™ื– ื’ืขื˜ืืŸ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ wiki.

ืกืึธืฃ

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื’ืขืจืื˜ืŸ ืฆื• ืงืึทื˜ืขืจ Qt! ื“ื™ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืคื•ืŸ ื“ืขืจ ืึทืจื‘ืขื˜, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืžื™ื™ื ื•ื ื’, ืื™ื– ืขืคึผืขืก ื™ื’ื–ืึทื“ื–ืฉืขืจื™ื™ื˜ื™ื“. ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื ืขืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ื“ื™ ืกืคึผื™ืกื™ืคื™ืงืก ืคื•ืŸ ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจืก ืื•ืŸ ื‘ื›ืœืœ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ืคื•ืŸ ืงืึธืžืคึผื™ื•ื˜ืขืจ ืกื™ืกื˜ืขืžืขืŸ. ื“ื™ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ื ื˜ ืฆื• ื“ื™ ื‘ืึทื•ื•ื•ืกื˜ ืคืึทืงื˜ ืึทื– ื“ื™ ื‘ืึทื˜ืึทืœื ืขืง ืื™ืŸ ืึท ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ืกื™ืกื˜ืขื ืื™ื– ื ื™ืฉื˜ ื“ืขืจ ืคึผืจืึทืกืขืกืขืจ, ืึธื‘ืขืจ ื“ืขืจ ื–ื›ึผืจื•ืŸ.

ื“ืึธืก ื™ืึธืจ ืžื™ืจ ื•ื•ืขืœืŸ ืึธื ื˜ื™ื™ืœ ื ืขืžืขืŸ ืื™ืŸ ื“ืขื ื™ืึธืžื˜ืขื•ื• ื˜ืขื˜ืฉื˜ืจืึทื™ืŸ. ื“ืึธ ืžื™ืจ ื•ื•ืขืœืŸ ื“ืขืจืฆื™ื™ืœืŸ ืื™ืจ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ Qt, OpenCV ืื•ื™ืฃ ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจืก ืื•ืŸ ืื•ื ื“ื–ืขืจ ืื ื“ืขืจืข ื“ืขืจื’ืจื™ื™ื›ื•ื ื’ืขืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’