Qt рдХреЛ STM32 рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛

Qt рдХреЛ STM32 рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛рд╢реБрдн рджреЛрдкрд╣рд░ рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИрдВ рдПрдордмреЙрдХреНрд╕ STM32F7-рдбрд┐рд╕реНрдХрд╡рд░реА рдкрд░ Qt рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрддрд╛рдпрд╛ рдерд╛ рдХрд┐ рд╣рдо рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ OpenCV.

Qt рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рди рдХреЗрд╡рд▓ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдмрд▓реНрдХрд┐ QtNetwork, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдСрдЯреЛрдореЗрд╢рди рдХреЗ рд▓рд┐рдП Qt (IoT рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣рд┐рдд) рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред Qt рдЯреАрдо рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ Qt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛рдлреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рд╛рд▓ рддрдХ, рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ Qt рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛, рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ - Qt рдмрдбрд╝рд╛ рд╣реИ, MCU рдЫреЛрдЯреЗ рд╣реИрдВред

рджреВрд╕рд░реА рдУрд░, рдлрд┐рд▓рд╣рд╛рд▓ рдРрд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИрдВ рдЬреЛ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдкреЗрдВрдЯрд┐рдпрдо рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВред рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, Qt рдмреНрд▓реЙрдЧ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдерд╛ рдкрдж. рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ RTEMS OS рдХреЗ рд▓рд┐рдП Qt рдХрд╛ рдПрдХ рдкреЛрд░реНрдЯ рдмрдирд╛рдпрд╛, рдФрд░ stm32f7 рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдмреЛрд░реНрдбреЛрдВ рдкрд░ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рд▓реЙрдиреНрдЪ рдХрд┐рдПред рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рд░реБрдЪрд┐ рдереА. рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдерд╛, рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реНрд╡рдпрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдХрд┐ STM32F7-рдбрд┐рд╕реНрдХрд╡рд░реА рдкрд░ Qt рдзреАрдорд╛ рд╣реИред рд╣рдо рд╕реЛрдЪ рд░рд╣реЗ рдереЗ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдПрдордмреЙрдХреНрд╕ рдХреЗ рддрд╣рдд рдХреНрдпреВрдЯреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдПрдиреАрдореЗрд╢рди рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпреВрдЯреА 4.8 рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдордмреЙрдХреНрд╕ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рдкрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдореВрд╡рдмреНрд▓реЙрдХреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪреБрдирд╛ - рд╕реНрдкреНрд░рд┐рдВрдЧреА рдПрдиреАрдореЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред

QEMU рдкрд░ рдХреНрдпреВрдЯреА рдореВрд╡рдмреНрд▓реЙрдХQt рдХреЛ STM32 рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╣рдо рдПрдиреАрдореЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХреЛрдВ рдХреЗ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдХреЗ рд╕рд╛рде Qt рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ "-qconfig рдиреНрдпреВрдирддрдо, рдЫреЛрдЯрд╛, рдордзреНрдпрдо..."ред рдпрд╣ Qt рд╕реЗ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдИ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реИ / рдХреНрдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╣рдо рдХреБрдЫ рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЕрдиреНрдп рдЭрдВрдбреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рд╡рд┐рдиреНрдпрд╛рд╕.

Qt рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ OS рд╕рдВрдЧрддрддрд╛ рдкрд░рдд рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рддрд░реАрдХрд╛ QPA (Qt рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рд╣рдордиреЗ Qt рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд░реЗрдбреАрдореЗрдб fb_base рдкреНрд▓рдЧрдЗрди рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Linux рдХреЗ рд▓рд┐рдП QPA рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬрд┐рд╕реЗ 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;
}

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореЗрдореЛрд░реА рд╕рд╛рдЗрдЬрд╝ -рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЫрд╡рд┐ 3.5 рдПрдордмреА рд╣реЛ рдЧрдИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ STM32F746 рдХреА рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ OpenCV рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреНрдп рд▓реЗрдЦ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕ рдмреЛрд░реНрдб рдореЗрдВ рд╣реИ:

  • 1 рдПрдордмреА рд░реЙрдо
  • 320 рдХреЗрдмреА рд░реИрдо
  • 8 рдПрдордмреА рдПрд╕рдбреАрдЖрд░рдПрдПрдо
  • 16 рдПрдордмреА рдХреНрдпреВрдПрд╕рдкреАрдЖрдИ

рдЪреВрдБрдХрд┐ QSPI рд╕реЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди OpenCV рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╕рдВрдкреВрд░реНрдг Embox c Qt рдЫрд╡рд┐ рдХреЛ QSPI рдореЗрдВ рд▓реЛрдб рдХрд░рдХреЗ рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдФрд░ рдЬрд▓реНрджреА, рдХреНрдпреВрдПрд╕рдкреАрдЖрдИ рд╕реЗ рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╣реА рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛! рд▓реЗрдХрд┐рди рдУрдкрдирд╕реАрд╡реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Qt рдХреЛ STM32 рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - рдкрд╣рд▓реЗ рд╣рдо рдЫрд╡рд┐ рдХреЛ QSPI рдкрд░ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЗрд╕реЗ SDRAM рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред SDRAM рд╕реЗ рдпрд╣ рдереЛрдбрд╝рд╛ рддреЗрдЬрд╝ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди QEMU рд╕реЗ рдЕрднреА рднреА рджреВрд░ рд╣реИред

Qt рдХреЛ STM32 рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛

рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ - рдЖрдЦрд┐рд░рдХрд╛рд░, Qt рдПрдиреАрдореЗрд╢рди рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рддреНрд╡рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрджрд░ рд▓реЗрдЦ рдХреНрдпреВрдЯреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдПрдлрдкреАрдпреВ рдЯрдЪрд╕реНрдХреНрд░реАрди рдкрд░ "рдбреНрд░реИрдЧрд┐рдВрдЧ рдПрдиреАрдореЗрд╢рди" рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИред рдореВрд╡рдмреНрд▓реЙрдХ рдореЗрдВ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЧрдгрдирд╛рдПрдБ рдХрд╛рдлреА рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╡рд┐рдЪрд╛рд░ рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреЛ рдПрд╕рдбреАрдЖрд░рдПрдПрдо рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕реНрдХреНрд░реАрди рдХрд╛ рдЖрдпрд╛рдо 480x272 рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 272x272 рдмрдирд╛рдпрд╛ред рд╣рдордиреЗ рд░рдВрдЧ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ A8R8G8B8 рд╕реЗ рдШрдЯрд╛рдХрд░ R5G6B5 рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 4 рд╕реЗ 2 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХрд╛ рдЖрдХрд╛рд░ 272 * 272 * 2 = 147968 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдЗрд╕рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреЗрдЬреА рдЖрдИ, рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ, рдПрдиреАрдореЗрд╢рди рд▓рдЧрднрдЧ рд╕реБрдЪрд╛рд░реВ рд╣реЛ рдЧрдпрд╛ред

рдирд╡реАрдирддрдо рдЕрдиреБрдХреВрд▓рди RAM рд╕реЗ Embox рдХреЛрдб рдФрд░ SDRAM рд╕реЗ Qt рдХреЛрдб рдЪрд▓рд╛рдирд╛ рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдПрдордмреЙрдХреНрд╕ рдХреЛ рдХреНрдпреВрдЯреА рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ, рд░реЛрдбрд╛рдЯрд╛, рдбреЗрдЯрд╛ рдФрд░ рдмреАрдПрд╕рдПрд╕ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдХреНрдпреВрдПрд╕рдкреАрдЖрдИ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдПрд╕рдбреАрдЖрд░рдПрдПрдо рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

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 рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ, рд╣рдореЗрдВ рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рддреНрд╡рд░рдг рднреА рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдиреАрдореЗрд╢рди рдХрд╛рдлреА рд╕рд╣рдЬ рд╣реЛ рдЧрдпрд╛:


рдЕрдВрдд рдореЗрдВ, рд▓реЗрдЦ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╕рдордп рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдПрдордмреЙрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреНрдпреВрдЯреА рдореВрд╡рдмреНрд▓реЙрдХ рдПрд╕рдбреАрдЖрд░рдПрдПрдо рдореЗрдВ рдлреНрд░реЗрдордмрдлрд░ рдХреЗ рд╕рд╛рде рдХреНрдпреВрдПрд╕рдкреАрдЖрдИ рд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдзрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдлреНрд░реЗрдордмрдлрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдереА! рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдкреНрд░рд╛рд░рдВрднрд┐рдХ "рд╕реНрд▓рд╛рдЗрдб рд╢реЛ" рдкрд░ рдХрд╛рдмреВ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдорд╛рдореВрд▓реА рдХрдореА рдХреЗ рдХрд╛рд░рдг 2 рдЧреБрдирд╛ рддреНрд╡рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдордмреЙрдХреНрд╕ рдХреЛрдб рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддреЗрдЬрд╝ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рдРрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ (рддреНрд╡рд░рдг 2 рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд▓рдЧрднрдЧ 1.5 рдЧреБрдирд╛ рдерд╛)ред

рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреИрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдБ

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ STM32F7-рдбрд┐рд╕реНрдХрд╡рд░реА рд╣реИ, рддреЛ рдЖрдк рд╕реНрд╡рдпрдВ Embox рдХреЗ рдЕрдВрддрд░реНрдЧрдд Qt рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ╨▓╨╕╨║╨╕.

рдирд┐рд╖реНрдХрд░реНрд╖

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо Qt рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ! рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, рдХрд╛рд░реНрдп рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдЕрддрд┐рд░рдВрдЬрд┐рдд рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреБрдХреВрд▓рди рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рддрдереНрдп рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрд╛рдзрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдореЗрдореЛрд░реА рд╣реИред

рдЗрд╕ рд╡рд░реНрд╖ рд╣рдо рдЙрддреНрд╕рд╡ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗ рдЯреЗрдХрдЯреНрд░реЗрди. рд╡рд╣рд╛рдВ рд╣рдо рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдПрдВрдЧреЗ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдкрд░ рдХреНрдпреВрдЯреА, рдУрдкрдирд╕реАрд╡реА рдФрд░ рд╣рдорд╛рд░реА рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдзрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдПрдВрдЧреЗред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ