STM32 рдорд╛ Qt рдкреЛрд░реНрдЯ рдЧрд░реНрджреИ

STM32 рдорд╛ Qt рдкреЛрд░реНрдЯ рдЧрд░реНрджреИрд╢реБрдн рджрд┐рдЙрдБрд╕реЛ рд╣рд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдЫреМрдВ Embox STM32F7-Discovery рдорд╛ Qt рд╕реБрд░реБ рдЧрд░рд┐рдпреЛ рд░ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред рдпрд╕рдЕрдШрд┐ рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рдкреНрд░рдХреНрд╖реЗрдкрдг рдЧрд░реНрди рд╕рдлрд▓ рднрдпреМрдВ рднрдиреЗрд░ рдмрддрд╛рдЗрд╕рдХреЗрдХрд╛ рдЫреМрдВ OpenCV.

Qt рдПрдХ рдХреНрд░рд╕-рдкреНрд▓реЗрдЯрдлрд░реНрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реЛ рдЬрд╕рд▓реЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдорд╛рддреНрд░ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрди, рддрд░ QtNetwork, рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдХрдХреНрд╖рд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ, рд╕реНрд╡рдЪрд╛рд▓рдирдХрд╛ рд▓рд╛рдЧрд┐ Qt (IoT рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рд╣рд┐рдд) рд░ рдЕрдиреНрдп рдзреЗрд░реИ рдХреБрд░рд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред Qt рдЯреЛрд▓реА рдЗрдореНрдмреЗрдбреЗрдб рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛ Qt рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рд╕рдХреНрд░рд┐рдп рдЫ, рддреНрдпрд╕реИрд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рдзреЗрд░реИ рдХрдиреНрдлрд┐рдЧрд░ рдпреЛрдЧреНрдп рдЫрдиреНред рдпрджреНрдпрдкрд┐, рднрд░реНрдЦрд░реИрд╕рдореНрдо, рдереЛрд░реИ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓реЗ Qt рд▓рд╛рдИ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рд╣рд░реВрдорд╛ рдкреЛрд░реНрдЯ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рд╕реЛрдЪреЗрдХрд╛ рдерд┐рдП, рд╕рд╛рдпрдж рдпрд╕реНрддреЛ рдХрд╛рд░реНрдп рдЧрд╛рд╣реНрд░реЛ рджреЗрдЦрд┐рдиреНрдЫ - Qt рдареВрд▓реЛ рдЫ, MCU рд╣рд░реВ рд╕рд╛рдирд╛ рдЫрдиреНред

рдЕрд░реНрдХреЛрддрд░реНрдл, рдпрд╕ рд╕рдордпрдорд╛ рдорд▓реНрдЯрд┐рдорд┐рдбрд┐рдпрд╛рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХрд╛ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рд╣рд░реВ рдЫрдиреН рд░ рдкрд╣рд┐рд▓реЛ рдкреЗрдиреНрдЯрд┐рдпрдорд╣рд░реВ рднрдиреНрджрд╛ рдЙрдЪреНрдЪ рдЫрдиреНред рд▓рдЧрднрдЧ рдПрдХ рд╡рд░реНрд╖ рдкрд╣рд┐рд▓реЗ, Qt рдмреНрд▓рдЧ рджреЗрдЦрд╛ рдкрд░реНрдпреЛ рдкреЛрд╕реНрдЯред рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ RTEMS OS рдХреЛ рд▓рд╛рдЧрд┐ Qt рдХреЛ рдкреЛрд░реНрдЯ рдмрдирд╛рдП, рд░ stm32f7 рдЪрд▓реНрдиреЗ рдзреЗрд░реИ рдмреЛрд░реНрдбрд╣рд░реВрдорд╛ рд╡рд┐рдЬреЗрдЯрд╣рд░реВ рд╕рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╕реБрд░реБ рдЧрд░реЗред рдпреЛ рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╕реЛ рдерд┐рдпреЛред рдпреЛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдерд┐рдпреЛ, рд░ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рдЖрдлреИрд▓реЗ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд▓реЗрдЦреНрдЫрдиреН, рдХрд┐ Qt STM32F7-Discovery рдорд╛ рдврд┐рд▓реЛ рдЫред рд╣рд╛рдореА рд╕реЛрдЪрд┐рд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВ рдХрд┐ рд╣рд╛рдореА Embox рдЕрдиреНрддрд░реНрдЧрдд Qt рдЪрд▓рд╛рдЙрди рд╕рдХреНрдЫреМрдВ, рд░ рд╡рд┐рдЬреЗрдЯ рдорд╛рддреНрд░ рдХреЛрд░реНрджреИрдиреМрдВ, рддрд░ рдПрдирд┐рдореЗрд╕рди рдЪрд▓рд╛рдЙрди рд╕рдХреНрдЫреМрдВред

Qt 4.8 рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ Embox рдорд╛ рдкреЛрд░реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред рд╣рд╛рдореАрд▓реЗ рдЪрд╛рд▓ рдмреНрд▓рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд░реЛрдЬреНрдпреМрдВ - рд╕реНрдкреНрд░рд┐рдВрдЧреА рдПрдирд┐рдореЗрд╕рдирдХреЛ рдЙрджрд╛рд╣рд░рдгред

QEMU рдорд╛ Qt рдЪрд╛рд▓ рдмреНрд▓рдХрд╣рд░реВSTM32 рдорд╛ Qt рдкреЛрд░реНрдЯ рдЧрд░реНрджреИ

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

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

рд░ рдпреЛ redrawing рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗ рдЫ

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 рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╣рд╛рдореНрд░реЛ рдЕрд░реНрдХреЛ рд▓реЗрдЦрдорд╛ рд▓реЗрдЦреЗрдХрд╛ рдЫреМрдВ, рдпрд╕ рдмреЛрд░реНрдбрдорд╛ рдЫ:

  • рез рдПрдордмреА рд░реЛрдо
  • 320 KB RAM
  • 8 MB SDRAM
  • резрем рдПрдордмреА QSPI

QSPI рдмрд╛рдЯ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдкрд╣рд┐рд▓реЗ рдиреИ OpenCV рдорд╛ рдердкрд┐рдПрдХреЛ рд╣реБрдирд╛рд▓реЗ, рд╣рд╛рдореАрд▓реЗ QSPI рдорд╛ рд╕рдореНрдкреВрд░реНрдг Embox c Qt рдЫрд╡рд┐ рд▓реЛрдб рдЧрд░реЗрд░ рд╕реБрд░реБ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред рд░ рд╣реБрд░реНрд░реЗ, рд╕рдмреИ рдХреБрд░рд╛ QSPI рдмрд╛рдЯ рддреБрд░реБрдиреНрддреИ рд╕реБрд░реБ рднрдпреЛ! рддрд░ OpenCV рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рдпреЛ рдзреЗрд░реИ рдврд┐рд▓реЛ рдХрд╛рдо рдЧрд░реНрдЫ рдХрд┐ рдмрд╛рд╣рд┐рд░ рдЖрдпреЛред

STM32 рдорд╛ Qt рдкреЛрд░реНрдЯ рдЧрд░реНрджреИ

рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдпрд╕рд░реА рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНтАНрдпреМрдВ - рдкрд╣рд┐рд▓реЗ рд╣рд╛рдореА рдЫрд╡рд┐рд▓рд╛рдИ QSPI рдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдЫреМрдВ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓рд╛рдИ SDRAM рдорд╛ рд▓реЛрдб рдЧрд░реНрдЫреМрдВ рд░ рддреНрдпрд╣рд╛рдБрдмрд╛рдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдЫреМрдВред SDRAM рдмрд╛рдЯ рдпреЛ рдЕрд▓рд┐ рдЫрд┐рдЯреЛ рднрдпреЛ, рддрд░ QEMU рдмрд╛рдЯ рдЕрдЭреИ рдЯрд╛рдврд╛ рдЫред

STM32 рдорд╛ Qt рдкреЛрд░реНрдЯ рдЧрд░реНрджреИ

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

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

рдирд╡реАрдирддрдо рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди RAM рдмрд╛рдЯ Embox рдХреЛрдб рд░ SDRAM рдмрд╛рдЯ Qt рдХреЛрдб рдЪрд▓рд╛рдЙрди рдерд┐рдпреЛред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдкрд╣рд┐рд▓реЗ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛, рд╕реНрдерд┐рд░ рд░реВрдкрдорд╛ Qt рд╕рдБрдЧ Embox рд▓рд┐рдВрдХ рдЧрд░реНрдЫреМрдВ, рддрд░ рд╣рд╛рдореА рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдкрд╛рда, rodata, рдбреЗрдЯрд╛ рд░ 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 moveblocks рд▓реЗ QSPI рдмрд╛рдЯ SDRAM рдорд╛ рдлреНрд░реЗрдордмрдлрд░рдХреЛ рд╕рд╛рде рд░рд╛рдореНрд░реЛ рдХрд╛рдо рдЧрд░реНрджрдЫ, рд░ рдмрд╛рдзрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рдлреНрд░реЗрдордмрдлрд░рдХреЛ рдЖрдХрд╛рд░ рдерд┐рдпреЛ! рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛, рдкреНрд░рд╛рд░рдореНрднрд┐рдХ "рд╕реНрд▓рд╛рдЗрдб рд╢реЛ" рд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрди, рдлреНрд░реЗрдордмрдлрд░рдХреЛ рдЖрдХрд╛рд░рдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрдореАрдХреЛ рдХрд╛рд░рдг реи-рдЧреБрдирд╛ рдПрдХреНрд╕реЗрд▓реЗрд░реЗрд╢рди рдкрд░реНрдпрд╛рдкреНрдд рдерд┐рдпреЛред рддрд░ рд╡рд┐рднрд┐рдиреНрди рджреНрд░реБрдд рдореЗрдореЛрд░реАрд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рдПрдореНрдмрдХреНрд╕ рдХреЛрдб рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реЗрд░ рдпрд╕реНрддреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдореНрднрд╡ рдерд┐рдПрди (рддреНрд╡рд░рдг 2 рдерд┐рдПрди, рддрд░ рд▓рдЧрднрдЧ 2 рдкрдЯрдХ)ред

рдпреЛ рдЖрдлреИрд▓рд╛рдИ рдХрд╕рд░реА рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗ

рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ STM32F7-Discovery рдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдЖрдлреИрд▓рд╛рдИ Embox рдЕрдиреНрддрд░реНрдЧрдд Qt рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрдкрд╛рдИрдВ рд╣рд╛рдореНрд░реЛ рдорд╛ рдпреЛ рдХрд╕рд░реА рдЧрд░рд┐рдиреНрдЫ рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╡рд┐рдХреА.

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

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

рдпрд╕ рд╡рд░реНрд╖ рд╣рд╛рдореА рдорд╣реЛрддреНрд╕рд╡рдорд╛ рд╕рд╣рднрд╛рдЧреА рд╣реБрдиреЗрдЫреМрдВ TechTrainред рддреНрдпрд╣рд╛рдБ рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рдердк рд╡рд┐рд╕реНрддрд╛рд░рдорд╛ рдмрддрд╛рдЙрдиреЗрдЫреМрдВ рд░ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рд╣рд░реВрдорд╛ Qt, OpenCV рд░ рд╣рд╛рдореНрд░рд╛ рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдзрд┐рд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреЗрдЫреМрдВред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди