Ho tsamaisa Qt ho STM32

Ho tsamaisa Qt ho STM32Lumelang Re morerong Embox e phatlalalitse Qt ho STM32F7-Discovery mme e rata ho bua ka eona. Pejana, re se re boletse hore na re khonne ho qala joang OpenCV.

Qt ke moralo oa li-cross-platform o kenyelletsang likaroloana tsa litšoantšo feela, empa hape le lintho tse kang QtNetwork, sehlopha sa lihlopha tsa ho sebetsa le databases, Qt for Automation (ho kenyeletsoa le ts'ebetsong ea IoT) le tse ling tse ngata. Sehlopha sa Qt se ntse se sebetsa ka thata mabapi le ho sebelisa Qt lits'ebetsong tse kentsoeng, kahoo lilaebrari li khona ho hlophisoa. Leha ho le joalo, ho fihlela morao tjena, ke batho ba fokolang ba neng ba nahana ka ho tsamaisa Qt ho li-microcontrollers, mohlomong hobane mosebetsi o joalo o bonahala o le thata - Qt e kholo, li-MCU li nyenyane.

Ka lehlakoreng le leng, hajoale ho na le li-microcontrollers tse etselitsoeng ho sebetsa le multimedia le ho feta li-Pentium tsa pele. Hoo e ka bang selemo se fetileng, blog ea Qt e ile ea hlaha poso. Bahlahisi ba entse boema-kepe ba Qt bakeng sa RTEMS OS, mme ba qala mehlala e nang le li-widget libotong tse 'maloa tse tsamaisang stm32f7. Sena se ile sa re thahasella. E ne e hlokomeleha, 'me bahlahisi ka bobona ba ngola ka eona, hore Qt e lieha ho STM32F7-Discovery. Re ne re ntse re ipotsa hore na re ka tsamaisa Qt tlasa Embox, mme eseng feela ho taka widget, empa ho tsamaisa animation.

Qt 4.8 e kentsoe Embox nako e telele, kahoo re nkile qeto ea ho e leka ho eona. Re khethile ts'ebeliso ea li-moveblocks - mohlala oa animation ea springy.

Qt e thibela QEMUHo tsamaisa Qt ho STM32

Taba ea pele, re hlophisa Qt, haeba ho khonahala, ka bonyane ba likarolo tse hlokahalang ho tšehetsa animation. Bakeng sa sena ho na le khetho "-qconfig minimal, nyenyane, mahareng ...". E hokahanya faele ea tlhophiso ho tloha Qt le li-macros tse ngata - seo u ka se nolofalletsang / seo u ka se thibelang. Ka mor'a khetho ena, re eketsa lifolakha tse ling ho tlhophiso haeba re batla ho thibela ntho e 'ngoe. Mona ke mohlala oa rona tlhophiso.

E le hore Qt e sebetse, o hloka ho kenya lera le lumellanang le OS. Mokhoa o mong ke ho kenya tšebetsong QPA (Qt Platform Abstraction). Re nkile e le motheo oa fb_base plugin e seng e entsoe e kenyellelitsoeng ho Qt, motheong oo QPA ea Linux e sebetsang ka eona. Sephetho ke plugin e nyane e bitsoang emboxfb, e fanang ka Qt ka Embox's framebuffer, ebe e hulela moo ntle le thuso ea kantle.

Sena ke seo ho theha plugin ho shebahalang ka sona

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();
}

'Me sena ke kamoo redrawing e tla shebahala joang

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;
}

Ka lebaka leo, ka ntlafatso ea compiler bakeng sa boholo ba memori -Os e nolofalitsoe, setšoantšo sa laebrari se ile sa fetoha 3.5 MB, eo ka sebele e sa lumellaneng le mohopolo o ka sehloohong oa STM32F746. Joalo ka ha re se re ngotse sengolong sa rona se seng ka OpenCV, boto ena e na le:

  • 1 MB ROM
  • 320 KB RAM
  • 8 MB ea SDRAM
  • 16 MB QSPI

Kaha ts'ehetso ea ho etsa khoutu e tsoang ho QSPI e se e kentsoe ho OpenCV, re nkile qeto ea ho qala ka ho kenya setšoantšo sohle sa Embox c Qt ho QSPI. 'Me hang, tsohle li qalile hang hang ho tloha QSPI! Empa joalo ka tabeng ea OpenCV, ho ile ha fumaneha hore e sebetsa butle haholo.

Ho tsamaisa Qt ho STM32

Ka hona, re nkile qeto ea ho e etsa ka tsela ena - pele re kopitsa setšoantšo ho QSPI, ebe re se kenya ho SDRAM ebe re phethela ho tloha moo. Ho tloha SDRAM e ile ea fetoha kapele, empa e ntse e le hole le QEMU.

Ho tsamaisa Qt ho STM32

Ka mor'a moo, ho ne ho e-na le mohopolo oa ho kenyelletsa ntlha e phaphametseng - ka mor'a moo, Qt e etsa lipalo tsa likhokahano tsa lisekoere ho animation. Re lekile, empa mona ha rea ​​ka ra fumana lebelo le bonahalang, leha ho le joalo sehlooho Bahlahisi ba Qt ba boletse hore FPU e fana ka keketseho e kholo ea lebelo la "ho hula animation" skrineng sa ho ama. Ho ka 'na ha e-ba le lipalo tse fokolang haholo tsa lintlha tse phaphametseng ho li-moveblocks,' me sena se itšetlehile ka mohlala o khethehileng.

Mohopolo o sebetsang ka ho fetesisa e ne e le ho tlosa foreimi ho tloha SDRAM ho ea mohopolong o kahare. Ho etsa sena, re entse litekanyo tsa skrine eseng 480x272, empa 272x272. Hape re theotse botebo ba 'mala ho tloha ho A8R8G8B8 ho ea ho R5G6B5, kahoo ra fokotsa boholo ba pixel e le' ngoe ho tloha ho 4 ho ea ho 2 byte. Sephetho sa boholo ba foreimi ke 272 * 272 * 2 = 147968 bytes. Sena se ile sa fana ka lebelo le leholo, mohlomong haholo-holo, animation e ile ea batla e boreleli.

Ntlafatso ea morao-rao e ne e le ho tsamaisa khoutu ea Embox ho tsoa ho RAM le khoutu ea Qt ho tsoa ho SDRAM. Ho etsa sena, pele, joalo ka tloaelo, re hokahanya Embox hammoho le Qt, empa re beha mongolo, rodata, data le likarolo tsa bss tsa laebrari ho QSPI e le hore re ka e kopitsa ho 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))

Ka ho sebelisa khoutu ea Embox ho tsoa ho ROM, re boetse re fumane lebelo le hlokomelehang. Ka lebaka leo, animation e ile ea bonahala e le bonolo haholo:


Qetellong, ha u ntse u lokisa sengoloa le ho leka litlhophiso tse fapaneng tsa Embox, ho ile ha fumaneha hore Qt moveblocks e sebetsa hantle ho tloha QSPI e nang le foreimi e SDRAM, mme botlolo e ne e le boholo ba sebopeho se nepahetseng hantle! Kamoo ho bonahalang kateng, ho hlōla "slideshow" ea pele, ho potlakisa ha 2 ho ne ho lekane ka lebaka la ho fokotseha ha banal ka boholo ba foreimi. Empa ho ne ho sa khonehe ho fumana sephetho se joalo ka ho fetisetsa khoutu ea Embox feela mehopolong e fapaneng e potlakileng (ho potlakisa e ne e se 2, empa ka makhetlo a ka bang 1.5).

Mokhoa oa ho e leka ka bowena

Haeba u na le STM32F7-Discovery, u ka matha Qt tlas'a Embox ka boeena. U ka bala hore na sena se etsoa joang ho rona wiki.

fihlela qeto e

Ka lebaka leo, re khonne ho qala Qt! Ho rarahana ha mosebetsi, ho ea ka maikutlo a rona, ho batla ho feteletsoe. Ka tlhaho, o hloka ho ela hloko lintlha tse ikhethang tsa li-microcontrollers mme ka kakaretso u utloisise meralo ea litsamaiso tsa likhomphutha. Liphetho tsa optimization li supa 'nete e tsebahalang ea hore botlolo tsamaisong ea komporo ha se processor, empa ke mohopolo.

Selemong sena re tla kenya letsoho moketeng TechTrain. Ha re le moo re tla u joetsa ka botlalo le ho bonts'a Qt, OpenCV ho li-microcontroller le likatleho tse ling tsa rona.

Source: www.habr.com

Eketsa ka tlhaloso