ΠŸΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Qt Π½Π° STM32

ΠŸΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Qt Π½Π° STM32Π”ΠΎΠ±Π°Ρ€ Π΄Π΅Π½ НиС смС Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Ембокс Π³ΠΎ Π»Π°Π½ΡΠΈΡ€Π°ΡˆΠ΅ Qt Π½Π° STM32F7-Discovery ΠΈ Π±ΠΈ сакал Π΄Π° Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ°. ΠŸΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ, вСќС ΠΊΠ°ΠΆΠ°Π²ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ успСавмС Π΄Π° лансирамС OpenCV.

Qt Π΅ крос-платформска Ρ€Π°ΠΌΠΊΠ° која Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π½Π΅ само Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, Ρ‚ΡƒΠΊΡƒ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС QtNetwork, Π·Π±ΠΈΡ€ Π½Π° класи Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Qt Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° (Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° IoT) ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ повСќС. Π’ΠΈΠΌΠΎΡ‚ Π½Π° Qt бСшС ΠΏΡ€ΠΎΠ°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Qt Π²ΠΎ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ систСми, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ сС доста ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, Π΄ΠΎ Π½Π΅ΠΎΠ΄Π°ΠΌΠ½Π°, ΠΌΠ°Π»ΠΊΡƒΠΌΠΈΠ½Π° размислуваа Π·Π° ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Qt Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ, Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Ρ‚Π°ΠΊΠ²Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Ρ‚Π΅ΡˆΠΊΠ° - Qt Π΅ Π³ΠΎΠ»Π΅ΠΌ, MCU сС ΠΌΠ°Π»ΠΈ.

Од Π΄Ρ€ΡƒΠ³Π° страна, Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠΌΠ° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½ΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со ΠΌΡƒΠ»Ρ‚ΠΈΠΌΠ΅Π΄ΠΈΡ˜Π° ΠΈ супСриорни Π²ΠΎ однос Π½Π° ΠΏΡ€Π²ΠΈΡ‚Π΅ Pentium. ΠŸΡ€Π΅Π΄ ΠΎΠΊΠΎΠ»Ρƒ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° сС појави Π±Π»ΠΎΠ³ΠΎΡ‚ Qt пост. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ˜Π° ΠΏΠΎΡ€Ρ‚Π° Π½Π° Qt Π·Π° RTEMS OS ΠΈ лансираа ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ со Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Ρ‚Π°Π±Π»ΠΈ ΠΊΠΎΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со stm32f7. Ова Π½Π΅ заинтСрСсира. Π‘Π΅ΡˆΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²ΠΎ, Π° ΠΈ самитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π·Π° Ρ‚ΠΎΠ°, Π΄Π΅ΠΊΠ° Qt Π΅ Π±Π°Π²Π΅Π½ Π½Π° STM32F7-Discovery. Π‘Π΅ ΠΏΡ€Π°ΡˆΡƒΠ²Π°Π²ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ Qt ΠΏΠΎΠ΄ Embox, Π° Π½Π΅ само Π΄Π° Ρ†Ρ€Ρ‚Π°ΠΌΠ΅ Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠ° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°, Ρ‚ΡƒΠΊΡƒ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°.

Qt 4.8 Π΅ прСнСсСн Π½Π° Embox Π΄ΠΎΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΏΠ° Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠ±Π°ΠΌΠ΅ Π½Π° Π½Π΅Π³ΠΎ. Ја ΠΈΠ·Π±Ρ€Π°Π²ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° moveblocks - ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Сластична Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°.

Qt Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π° Π΄Π²ΠΈΠΆΠ΅ΡšΠ΅Ρ‚ΠΎ Π½Π° QEMUΠŸΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Qt Π½Π° STM32

Π—Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ, Π½ΠΈΠ΅ Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Qt, Π°ΠΊΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ, со ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΠΎΡ‚ сСт Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π½Π° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°. Π—Π° ΠΎΠ²Π° постои ΠΎΠΏΡ†ΠΈΡ˜Π° β€ž-qconfig ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ, ΠΌΠ°Π»ΠΎ, срСдно...β€œ. ΠŸΠΎΠ²Ρ€Π·ΡƒΠ²Π° конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ΄ Qt со ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°ΠΊΡ€ΠΎΠ° - ΡˆΡ‚ΠΎ Π΄Π° сС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ / ΡˆΡ‚ΠΎ Π΄Π° сС ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ. По ΠΎΠ²Π°Π° ΠΎΠΏΡ†ΠΈΡ˜Π°, Π΄ΠΎΠ΄Π°Π²Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΈ Π·Π½Π°ΠΌΠ΅Π½Ρ†Π° Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π°ΠΊΠΎ сакамС Π΄Π° ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈΠΌΠ΅ Π½Π΅ΡˆΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ. Π•Π²Π΅ Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°.

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Qt Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ слој Π·Π° компатибилност со ОБ. Π•Π΄Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΅ Π΄Π° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° QPA (Qt Platform Abstraction). Како основа Π³ΠΎ Π·Π΅Π΄ΠΎΠ²ΠΌΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΎΡ‚ Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ fb_base Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ Π²ΠΎ Qt, Π²Ρ€Π· основа Π½Π° кој Ρ€Π°Π±ΠΎΡ‚ΠΈ QPA Π·Π° Linux. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ Π΅ ΠΌΠ°Π» ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Π½Π°Ρ€Π΅Ρ‡Π΅Π½ emboxfb, кој ΠΌΡƒ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π½Π° Qt Ρ€Π°ΠΌΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ Π±Π°Ρ„Π΅Ρ€ Π½Π° Embox, Π° ΠΏΠΎΡ‚ΠΎΠ° Ρ‚ΠΎΡ˜ Ρ†Ρ€Ρ‚Π° Ρ‚Π°ΠΌΡƒ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½Π° помош.

Π’Π°ΠΊΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ

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. Како ΡˆΡ‚ΠΎ вСќС напишавмС Π²ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° Π΄Ρ€ΡƒΠ³Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° Π·Π° OpenCV, ΠΎΠ²Π°Π° Ρ‚Π°Π±Π»Π° ΠΈΠΌΠ°:

  • 1 MB ROM
  • 320 KB RAM ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°
  • 8 MB SDRAM
  • 16 MB QSPI

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ°Ρ‚Π° Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΠ΄ ΠΎΠ΄ QSPI Π΅ вСќС Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π²ΠΎ OpenCV, Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅ со Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ†Π΅Π»Π°Ρ‚Π° слика Embox c Qt Π²ΠΎ QSPI. И ΡƒΡ€Π°, сС ΠΏΠΎΡ‡Π½Π° скоро вСднаш ΠΎΠ΄ QSPI! Но, ΠΊΠ°ΠΊΠΎ ΠΈ Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ΠΎΡ‚ со OpenCV, сС ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ Π±Π°Π²Π½ΠΎ.

ΠŸΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Qt Π½Π° STM32

Π—Π°Ρ‚ΠΎΠ°, Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Ρ‚ΠΎΠ° Π½Π° овој Π½Π°Ρ‡ΠΈΠ½ - ΠΏΡ€Π²ΠΎ ја ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ сликата Π²ΠΎ QSPI, ΠΏΠΎΡ‚ΠΎΠ° ја Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΠΌΠ΅ Π²ΠΎ SDRAM ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΠΌΠ΅ ΠΎΠ΄ Ρ‚Π°ΠΌΡƒ. Од SDRAM стана ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΠ±Ρ€Π·, Π½ΠΎ сСпак Π΄Π°Π»Π΅ΠΊΡƒ ΠΎΠ΄ QEMU.

ΠŸΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Qt Π½Π° STM32

Π‘Π»Π΅Π΄Π½ΠΎ, имашС идСја Π΄Π° сС Π²ΠΊΠ»ΡƒΡ‡ΠΈ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π° Π·Π°ΠΏΠΈΡ€ΠΊΠ° - Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° ΠΊΡ€Π°ΠΈΡˆΡ‚Π°Ρ‚Π°, Qt ΠΏΡ€Π°Π²ΠΈ Π½Π΅ΠΊΠΎΠΈ прСсмСтки Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²ΠΎ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°. Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ²ΠΌΠ΅, Π½ΠΎ Ρ‚ΡƒΠΊΠ° Π½Π΅ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎ Π·Π°Π±Ρ€Π·ΡƒΠ²Π°ΡšΠ΅, ΠΈΠ°ΠΊΠΎ Π²ΠΎ Π§Π»Π΅Π½ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Qt Ρ‚Π²Ρ€Π΄Π΅Π° Π΄Π΅ΠΊΠ° FPU Π΄Π°Π²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° Π·Π° β€žΠ²Π»Π΅Ρ‡Π΅ΡšΠ΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°β€œ Π½Π° Π΅ΠΊΡ€Π°Π½ Π½Π° Π΄ΠΎΠΏΠΈΡ€. МоТС Π΄Π° ΠΈΠΌΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ прСсмСтки со ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π° Π·Π°ΠΏΠΈΡ€ΠΊΠ° Π²ΠΎ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ, ΠΈ Ρ‚ΠΎΠ° зависи ΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ΠΠ°Ρ˜Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° идСја бСшС Π΄Π° сС прСмСсти framebuffer ΠΎΠ΄ SDRAM Π²ΠΎ Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Π³ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ²ΠΌΠ΅ Π΄ΠΈΠΌΠ΅Π½Π·ΠΈΠΈΡ‚Π΅ Π½Π° Π΅ΠΊΡ€Π°Π½ΠΎΡ‚ Π½Π΅ 480x272, Ρ‚ΡƒΠΊΡƒ 272x272. Ја Π½Π°ΠΌΠ°Π»ΠΈΠ²ΠΌΠ΅ ΠΈ Π΄Π»Π°Π±ΠΎΡ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° Π±ΠΎΡ˜Π°Ρ‚Π° ΠΎΠ΄ A8R8G8B8 Π½Π° R5G6B5, со ΡˆΡ‚ΠΎ ја Π½Π°ΠΌΠ°Π»ΠΈΠ²ΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π΅Π΄Π΅Π½ пиксСл ΠΎΠ΄ 4 Π½Π° 2 Π±Π°Ρ˜Ρ‚ΠΈ. Π Π΅Π·ΡƒΠ»Ρ‚ΠΈΡ€Π°Ρ‡ΠΊΠ°Ρ‚Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° Π±Π°Ρ„Π΅Ρ€ΠΎΡ‚ Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π΅ 272 * 272 * 2 = 147968 Π±Π°Ρ˜Ρ‚ΠΈ. Ова Π΄Π°Π΄Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π°Π±Ρ€Π·ΡƒΠ²Π°ΡšΠ΅, ΠΌΠΎΠΆΠ΅Π±ΠΈ најзабСлСТливо, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° стана рСчиси ΠΌΠ°Π·Π½Π°.

ΠΠ°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° бСшС Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Embox ΠΊΠΎΠ΄ ΠΎΠ΄ RAM ΠΈ Qt ΠΊΠΎΠ΄ ΠΎΠ΄ SDRAM. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Π½ΠΈΠ΅ ΠΏΡ€Π²ΠΎ, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΎΠ±ΠΈΡ‡Π½ΠΎ, статички Π³ΠΎ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΠΌΠ΅ Embox Π·Π°Π΅Π΄Π½ΠΎ со 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))

Π‘ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° Embox ΠΊΠΎΠ΄ΠΎΡ‚ ΠΎΠ΄ ROM-ΠΎΡ‚ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π°Π±Ρ€Π·ΡƒΠ²Π°ΡšΠ΅. Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ ΠΌΠ°Π·Π½Π°:


На самиот ΠΊΡ€Π°Ρ˜, Π΄ΠΎΠ΄Π΅ΠΊΠ° ја ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΡƒΠ²Π°Π²Ρ‚Π΅ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° ΠΈ ΠΏΡ€ΠΎΠ±ΡƒΠ²Π°Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π° Embox, сС ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° Qt moveblocks Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΎ ΠΎΠ΄ QSPI со Ρ€Π°ΠΌΠΊΠ° Π²ΠΎ SDRAM, Π° тСсното Π³Ρ€Π»ΠΎ бСшС Ρ‚ΠΎΡ‡Π½ΠΎ со Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π°! ΠžΡ‡ΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π·Π° Π΄Π° сС Π½Π°Π΄ΠΌΠΈΠ½Π΅ ΠΏΡ€Π²ΠΈΡ‡Π½ΠΎΡ‚ΠΎ β€žΡΠ»Π°Ρ˜Π΄ΡˆΠΎΡƒβ€œ, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ бСшС 2-ΠΊΡ€Π°Ρ‚Π½ΠΎ Π·Π°Π±Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΡ€Π°Π΄ΠΈ Π±Π°Π½Π°Π»Π½ΠΎΡ‚ΠΎ Π½Π°ΠΌΠ°Π»ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π±Π°Ρ„Π΅Ρ€ΠΎΡ‚ Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π°. Но, Π½Π΅ бСшС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС постигнС Ρ‚Π°ΠΊΠΎΠ² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ со ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ само Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ Embox Π½Π° Ρ€Π°Π·Π½ΠΈ Π±Ρ€Π·ΠΈ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΠΈ (Π·Π°Π±Ρ€Π·ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π΅ бСшС 2, Ρ‚ΡƒΠΊΡƒ ΠΎΠΊΠΎΠ»Ρƒ 1.5 ΠΏΠ°Ρ‚ΠΈ).

Како Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠ±Π°Ρ‚Π΅ сами

Ако ΠΈΠΌΠ°Ρ‚Π΅ STM32F7-Discovery, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄Π° стартуватС Qt ΠΏΠΎΠ΄ Embox. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ Ρ‚ΠΎΠ° сС ΠΏΡ€Π°Π²ΠΈ Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° Π²ΠΈΠΊΠΈ.

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, успСавмС Π΄Π° Π³ΠΎ лансирамС Qt! ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΡΡ‚Π° Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°, спорСд нашС мислСњС, Π΅ Π΄ΠΎΠ½Π΅ΠΊΠ°Π΄Π΅ ΠΏΡ€Π΅Ρ‚Π΅Ρ€Π°Π½Π°. Π‘Π΅ΠΊΠ°ΠΊΠΎ, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ спСцификитС Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ Π΄Π° ја Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ΡΠΊΠΈΡ‚Π΅ систСми. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΡƒΠΊΠ°ΠΆΡƒΠ²Π°Π°Ρ‚ Π½Π° Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈΠΎΡ‚ Ρ„Π°ΠΊΡ‚ Π΄Π΅ΠΊΠ° тСсно Π³Ρ€Π»ΠΎ Π²ΠΎ ΠΊΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ΡΠΊΠΈΠΎΡ‚ систСм Π½Π΅ Π΅ процСсорот, Ρ‚ΡƒΠΊΡƒ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°.

Оваа Π³ΠΎΠ΄ΠΈΠ½Π° ќС учСствувамС Π½Π° фСстивалот TechTrain. Π’Π°ΠΌΡƒ ќС Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΎ ΠΈ ќС Π³ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅ΠΌΠ΅ Qt, OpenCV Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ наши Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΠ²Π°ΡšΠ°.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€