แฒกแแฆแแแ แแจแแแแแแแกแ แแ แแแฅแขแจแ แแแ แ
Qt แแ แแก แแ แแก-แแแแขแคแแ แแฃแแ แฉแแ แฉแ, แ แแแแแแช แแแแชแแแก แแ แ แแฎแแแแ แแ แแคแแแฃแ แแแแแแแแแขแแแก, แแ แแแแ แแกแแ แแแแแแแก, แ แแแแ แแชแแ QtNetwork, แแแแแชแแแแ แแแแแแแแ แแฃแจแแแแแก แแแแกแแแแก แแแแ แแแ, Qt แแแขแแแแขแแแแชแแแกแแแแก (แแแ แจแแ แแก, IoT แแแแฎแแ แชแแแแแแแกแแแแก) แแ แแ แแแแแ แกแฎแแ. Qt แแฃแแแ แแ แแแฅแขแแฃแแ แแงแ Qt-แแก แแแแแงแแแแแแกแแแ แแแแแแจแแ แแแแ แฉแแจแแแแแฃแ แกแแกแขแแแแแจแ, แแแแขแแ แแแแแแแแแแแแ แกแแแแแแ แแแแคแแแฃแ แแ แแแแแแ. แแฃแแชแ, แแแแ แแ แแแแ แชแแขแแก แแฃ แคแแฅแ แแแแ Qt แแแแ แแแแแขแ แแแแ แแแแ แแแ แขแแ แแแแแ, แแแแแ แแแแขแแ, แ แแ แแกแแแ แแแแแแแแ แ แแฃแแ แฉแแแก - Qt แแแแแ, MCU - แแแขแแ แ.
แแแแ แแก แแฎแ แแ, แแ แแแแแแขแจแ แแ แแก แแแแ แแแแแขแ แแแแ แแแ, แ แแแแแแแช แจแแฅแแแแแแ แแฃแแขแแแแแแแกแแแ แแฃแจแแแแแกแแแแก แแ แแแ แแแ แแแแขแแฃแแแแแแ แจแแแแ แแแแ. แแแแฎแแแแแแ แแ แแ แฌแแแก แฌแแ แแแแแฉแแแ Qt แแแแแ
Qt 4.8 แฃแแแ แแแแ แฎแแแแ แแแ แขแแ แแแฃแแแ Embox-แจแ, แแแแขแแ แแแแแแฌแงแแแขแแ แแแกแ แแแแแกแแชแแแแแ. แฉแแแ แแแแ แฉแแแ moveblocks แแแแแแแชแแ - แแแแแคแฎแฃแแแ แแแแแแชแแแก แแแแแแแแ.
Qt แแแแแแแก QEMU-แแ
แแแกแแฌแงแแกแแกแแแแก, แฉแแแ แแแแแแคแแแฃแ แแ แแแ Qt-แก, แแฃ แแก แจแแกแแซแแแแแแแ, แแแแแแชแแแก แแฎแแ แแแกแแญแแ แแ แกแแญแแ แ แแแแแแแแแขแแแแก แแแแแแแแฃแ แ แแแแ แแแแ. แแแแกแแแแแก แแ แแก แแแ แแแแขแ "-qconfig แแแแแแแแฃแ แ, แแแขแแ แ, แกแแจแฃแแแ...". แแก แแแแแจแแ แแแก แแแแคแแแฃแ แแชแแแก แคแแแแก Qt-แแแ แแแแ แแแแ แแกแแแ - แ แ แฃแแแ แฉแแ แแแ / แ แ แแแแแ แแแ. แแ แแแ แแแแขแ แแก แจแแแแแ, แฉแแแ แแแแแขแแแ แกแฎแแ แแ แแจแแแก แแแแคแแแฃแ แแชแแแจแ, แแฃ แแแกแฃแ แก แกแฎแแ แ แแแแก แแแแแ แแแ. แแ แฉแแแแ แแแแแแแแ
แแแแกแแแแแก, แ แแ Qt-แ แแแฃแจแแแก, แแฅแแแ แฃแแแ แแแแแแขแแ OS แแแแกแแแแแแแแก แคแแแ. แแ แ-แแ แแ แแแแ QPA (Qt Platform Abstraction) แแแแแ แแแ. แฉแแแ แกแแคแฃแซแแแแ แแแแฆแแ Qt-แจแ แฉแแ แแฃแแ แแแ fb_base แแแแฃแแ, แ แแแแแก แกแแคแฃแซแแแแแแช แแฃแจแแแแก 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 แแ, แ แแช, แ แ แแฅแแ แฃแแแ, แแ แฏแแแแ STM32F746-แแก แแแแแแ แแแฎแกแแแ แแแแจแ. แ แแแแ แช แฃแแแ แแแแฌแแ แแ แฉแแแแก แกแฎแแ แกแขแแขแแแจแ OpenCV-แแก แจแแกแแฎแแ, แแ แแแคแแก แแฅแแก:
- 1 แแ ROM
- 320 KB แแแแ แแขแแฃแแ แแแฎแกแแแ แแแ
- 8 MB SDRAM
- 16 MB QSPI
แแแแแแแแ QSPI-แแแ แแแแแก แจแแกแ แฃแแแแแก แแฎแแ แแแญแแ แ แฃแแแ แแแแแแขแ OpenCV-แก, แฉแแแ แแแแแแฌแงแแแขแแ แแแแแฌแงแแ แแแแแ Embox c Qt แกแฃแ แแแแก QSPI-แจแ แฉแแขแแแ แแแแ. แแ แ แ, แงแแแแแคแแ แ แแแแฅแแแก แแแจแแแแ แแแแฌแงแ QSPI-แแแ! แแแแ แแ แ แแแแ แช OpenCV-แแก แจแแแแฎแแแแแจแ, แแฆแแแฉแแแ, แ แแ แแก แซแแแแแ แแแแ แแฃแจแแแแก.
แแแแขแแ, แแแแแแฌแงแแแขแแ แแกแ แแแแแแแแแแแแแ - แฏแแ แกแฃแ แแแก แแแแแแแ แแแ QSPI-แจแ, แจแแแแแ แแขแแแ แแแแ SDRAM-แจแ แแ แแแกแ แฃแแแแ แแฅแแแแ. SDRAM-แแแ แชแแขแ แฃแคแ แ แกแฌแ แแคแ แแแฎแแ, แแแแ แแ QEMU-แกแแแ แแแแแช แจแแ แก.
แจแแแแแ แแแฉแแแ แแแแ แแชแฃแ แแแ แฌแแ แขแแแแก แฉแแ แแแแก - แแแแแก แแ แแแแแก, Qt แแแแแแแก แแแแแแชแแแจแ แแแแแ แแขแแแแก แแแแ แแแแแขแแแแก แแแ แแแแฃแ แแแแแแแแแแก. แฉแแแ แแชแแแแ, แแแแ แแ แแฅ แแแ แแแแแฆแแ แ แแแแ แฎแแแฃแแ แแฉแฅแแ แแแ, แแฃแแชแ แจแแแแแ
แงแแแแแแ แแคแแฅแขแฃแ แ แแแแ แแงแ แคแ แแแแแฃแคแแ แแก แแแแแขแแแ SDRAM-แแแ แจแแแ แแแฎแกแแแ แแแแจแ. แแแแกแแแแแก แฉแแแ แแแแแแแแแ แแแ แแแแก แแแแแแ แแ แ 480x272, แแ แแแแ 272x272. แฉแแแ แแกแแแ แจแแแแแชแแ แแ แคแแ แแก แกแแฆแ แแ A8R8G8B8-แแแ R5G6B5-แแแ, แ แแแแช แจแแแแแชแแ แแ แแ แแ แแแฅแกแแแแก แแแแ 4-แแแ 2 แแแแขแแแแ. แจแแแแแแ แแแฆแแแฃแแ แคแ แแแแแฃแคแแ แแก แแแแแ 272 * 272 * 2 = 147968 แแแแขแ. แแแแ แแแแจแแแแแแแแแ แแฉแฅแแ แแแ แแแกแชแ, แแแแแ แงแแแแแแ แจแแกแแแฉแแแแ แแงแ, แ แแ แแแแแแชแแ แแแแฅแแแก แแแฃแแ แแแฎแแ.
แฃแแฎแแแกแ แแแขแแแแแแชแแ แแงแ Embox แแแแแก แแแจแแแแ RAM-แแแ แแ Qt แแแแ SDRAM-แแแ. แแแแกแแแแแก แฉแแแ แฏแแ , แฉแแแฃแแแแแกแแแแแ , แกแขแแขแแแฃแ แแ แแแแแแจแแ แแแ Embox-แก Qt-แแแ, แแแแ แแ แแแแแแกแแแ แแแแแแแแแแแก แขแแฅแกแขแก, 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 แแแแแก แจแแกแ แฃแแแแแ, แฉแแแ แแกแแแ แแแแแฆแแ แจแแกแแแฉแแแแ แแฉแฅแแ แแแ. แจแแแแแแ, แแแแแแชแแ แกแแแแแแ แแแฃแแ แแฆแแแฉแแแ:
แแแแแก, แกแขแแขแแแก แแแแแแแแแแกแ แแ แกแฎแแแแแกแฎแแ Embox แแแแคแแแฃแ แแชแแแแแก แชแแแกแแก, แแฆแแแฉแแแ, แ แแ Qt moveblocks แแฃแจแแแแก QSPI-แแแ, SDRAM-แแก แคแ แแแแแฃแคแแ แแ, แแ แแแแแ แแฃแกแขแแ แแงแ แคแ แแแแแฃแคแแ แแก แแแแ! แ แแแแ แช แฉแแแก, แกแแฌแงแแกแ โแกแแแแแจแแฃแกโ แแแกแแซแแแแแ แกแแแแแ แแกแ แแงแ 2-แฏแแ แแแ แแฉแฅแแ แแแ แคแ แแแแแฃแคแแ แแก แแแแแก แแแแแแฃแ แ แจแแแชแแ แแแแก แแแแ. แแแแ แแ แแกแแแ แจแแแแแแก แแแฆแฌแแแ แจแแฃแซแแแแแแ แแงแ แแฎแแแแ Embox แแแแแก แกแฎแแแแแกแฎแแ แกแฌแ แแค แแแฎแกแแแ แแแแแ แแแแแขแแแแ (แแฉแฅแแ แแแ แแงแ แแ แ 2, แแ แแแแ แแแแฎแแแแแแ 1.5-แฏแแ ).
แ แแแแ แกแชแแแแ แแแ แกแแแฃแแแ แแแแก
แแฃ แแฅแแแ แแแฅแแ STM32F7-Discovery, แจแแแแซแแแแ แแแแแ แแแฃแจแแแ Qt Embox-แแก แฅแแแจ. แแฅแแแ แจแแแแซแแแแ แฌแแแแแแฎแแ แ แแแแ แแแแแแแ แแก แฉแแแแก แกแแแขแแ
แแแกแแแแ
แจแแแแแแ, แฉแแแ แแแแแฎแแ แฎแแ Qt! แแแแแแแแแก แกแแ แแฃแแ, แฉแแแแ แแแ แแ, แแแ แแแแฃแแฌแแแแ แแแแแญแแ แแแแฃแแแ. แแฃแแแแ แแแแ, แแฅแแแ แฃแแแ แแแแแแแแแกแฌแแแแ แแแแ แแแแแขแ แแแแ แแแแก แกแแแชแแคแแแ แแ แแแแแแแ แแแแแแ แแแแแแฃแขแแ แฃแแ แกแแกแขแแแแแแก แแ แฅแแขแแฅแขแฃแ แ. แแแขแแแแแแชแแแก แจแแแแแแแ แแแฃแแแแแแก แชแแแแแ แคแแฅแขแแ, แ แแ แแแแแแแแแ แกแแกแขแแแแจแ แแแ แแแ แ แแ แแ แแก แแ แแชแแกแแ แ, แแ แแแแ แแแฎแกแแแ แแแ.
แฌแแแก แฉแแแ แแแแแฆแแแ แแแแแฌแแแแแแแก แคแแกแขแแแแแจแ
แฌแงแแ แ: www.habr.com