ΠΠΎΠ±Π°Ρ Π΄Π΅Π½ ΠΠΈΠ΅ ΡΠΌΠ΅ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ
Qt Π΅ ΠΊΡΠΎΡ-ΠΏΠ»Π°ΡΡΠΎΡΠΌΡΠΊΠ° ΡΠ°ΠΌΠΊΠ° ΠΊΠΎΡΠ° Π²ΠΊΠ»ΡΡΡΠ²Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π³ΡΠ°ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΡΡΠΊΡ ΠΈ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ QtNetwork, Π·Π±ΠΈΡ Π½Π° ΠΊΠ»Π°ΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Qt Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ° (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° IoT) ΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ²Π΅ΡΠ΅. Π’ΠΈΠΌΠΎΡ Π½Π° Qt Π±Π΅ΡΠ΅ ΠΏΡΠΎΠ°ΠΊΡΠΈΠ²Π΅Π½ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Qt Π²ΠΎ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΡΠ°ΠΊΠ° ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, Π΄ΠΎ Π½Π΅ΠΎΠ΄Π°ΠΌΠ½Π°, ΠΌΠ°Π»ΠΊΡΠΌΠΈΠ½Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°Π° Π·Π° ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π° Qt Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ, Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π·Π°ΡΠΎΠ° ΡΡΠΎ ΡΠ°ΠΊΠ²Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° ΡΠ΅ΡΠΊΠ° - Qt Π΅ Π³ΠΎΠ»Π΅ΠΌ, MCU ΡΠ΅ ΠΌΠ°Π»ΠΈ.
ΠΠ΄ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠΌΠ° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΎ ΠΌΡΠ»ΡΠΈΠΌΠ΅Π΄ΠΈΡΠ° ΠΈ ΡΡΠΏΠ΅ΡΠΈΠΎΡΠ½ΠΈ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΏΡΠ²ΠΈΡΠ΅ Pentium. ΠΡΠ΅Π΄ ΠΎΠΊΠΎΠ»Ρ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ Π±Π»ΠΎΠ³ΠΎΡ Qt
Qt 4.8 Π΅ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ Π½Π° Embox Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΏΠ° ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠ±Π°ΠΌΠ΅ Π½Π° Π½Π΅Π³ΠΎ. ΠΠ° ΠΈΠ·Π±ΡΠ°Π²ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° moveblocks - ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π΅Π»Π°ΡΡΠΈΡΠ½Π° Π°Π½ΠΈΠΌΠ°ΡΠΈΡΠ°.
Qt Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ° Π΄Π²ΠΈΠΆΠ΅ΡΠ΅ΡΠΎ Π½Π° QEMU
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊ, Π½ΠΈΠ΅ Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ 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, ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ Π±Π°Π²Π½ΠΎ.
ΠΠ°ΡΠΎΠ°, ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠΎΠ° Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ - ΠΏΡΠ²ΠΎ ΡΠ° ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π²ΠΎ QSPI, ΠΏΠΎΡΠΎΠ° ΡΠ° Π²ΡΠΈΡΡΠ²Π°ΠΌΠ΅ Π²ΠΎ SDRAM ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°ΠΌΠ΅ ΠΎΠ΄ ΡΠ°ΠΌΡ. ΠΠ΄ SDRAM ΡΡΠ°Π½Π° ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ±ΡΠ·, Π½ΠΎ ΡΠ΅ΠΏΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΡ ΠΎΠ΄ QEMU.
Π‘Π»Π΅Π΄Π½ΠΎ, ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ΄Π΅ΡΠ° Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π° Π·Π°ΠΏΠΈΡΠΊΠ° - Π½Π° ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΊΡΠ°ΠΈΡΡΠ°ΡΠ°, Qt ΠΏΡΠ°Π²ΠΈ Π½Π΅ΠΊΠΎΠΈ ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠΈ Π½Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡΠ΅ Π½Π° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ΅ Π²ΠΎ Π°Π½ΠΈΠΌΠ°ΡΠΈΡΠ°ΡΠ°. Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΠΎΠ²ΠΌΠ΅, Π½ΠΎ ΡΡΠΊΠ° Π½Π΅ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎ Π·Π°Π±ΡΠ·ΡΠ²Π°ΡΠ΅, ΠΈΠ°ΠΊΠΎ Π²ΠΎ
ΠΠ°ΡΠ΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π°ΡΠ° ΠΈΠ΄Π΅ΡΠ° Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈ 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! ΠΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΡΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΡΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΠ΅ ΠΌΠΈΡΠ»Π΅ΡΠ΅, Π΅ Π΄ΠΎΠ½Π΅ΠΊΠ°Π΄Π΅ ΠΏΡΠ΅ΡΠ΅ΡΠ°Π½Π°. Π‘Π΅ΠΊΠ°ΠΊΠΎ, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈΡΠ΅ ΠΈ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ Π΄Π° ΡΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡΠΊΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° ΡΠΊΠ°ΠΆΡΠ²Π°Π°Ρ Π½Π° Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠ·Π½Π°ΡΠΈΠΎΡ ΡΠ°ΠΊΡ Π΄Π΅ΠΊΠ° ΡΠ΅ΡΠ½ΠΎ Π³ΡΠ»ΠΎ Π²ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡΠΊΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π΅ Π΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ, ΡΡΠΊΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°.
ΠΠ²Π°Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠ΅ ΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΠΈΠ²Π°Π»ΠΎΡ
ΠΠ·Π²ΠΎΡ: www.habr.com