ΠΠΎΠ±ΡΡ Π΄Π΅Π½ ΠΠΈΠ΅ ΡΠΌΠ΅ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°
Qt Π΅ ΠΌΠ΅ΠΆΠ΄ΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π° ΡΠ°ΠΌΠΊΠ°, ΠΊΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, Π½ΠΎ ΠΈ Π½Π΅ΡΠ° ΠΊΠ°ΡΠΎ QtNetwork, Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Qt Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° IoT) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° Π΅ΠΊΠΈΠΏΠ° Π½Π° Qt ΡΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Qt Π²ΡΠ² Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ° Π΄ΠΎΡΡΠ° Π΄ΠΎΠ±ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠΎΡΠΊΠΎΡΠΎ ΠΎΠ±Π°ΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ Ρ
ΠΎΡΠ° ΠΌΠΈΡΠ»Π΅Ρ
Π° Π·Π° ΠΏΡΠ΅Π½Π°ΡΡΠ½Π΅ Π½Π° Qt ΠΊΡΠΌ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π·Π°ΡΠΎΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π·Π°Π΄Π°ΡΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡΡΠ΄Π½Π° - Qt Π΅ Π³ΠΎΠ»ΡΠΌ, MCU ΡΠ° ΠΌΠ°Π»ΠΊΠΈ.
ΠΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ ΠΌΡΠ»ΡΠΈΠΌΠ΅Π΄ΠΈΡ ΠΈ Π΄Π° Π½Π°Π΄ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΏΡΡΠ²ΠΈΡΠ΅ Pentium. ΠΠΎΡΠ²ΠΈ ΡΠ΅ Π² Π±Π»ΠΎΠ³Π° Π½Π° Qt ΠΏΡΠ΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ Π³ΠΎΠ΄ΠΈΠ½Π°
Qt 4.8 Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ ΠΊΡΠΌ Embox ΠΎΡ Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΡΠΎΠ±Π²Π°ΠΌΠ΅ Π½Π° Π½Π΅Π³ΠΎ. ΠΠ·Π±ΡΠ°Ρ ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ moveblocks - ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΏΡΡΠΆΠΈΠ½ΠΈΡΠ°ΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ.
Qt moveblocks Π½Π° QEMU
ΠΠ°ΡΠΎ Π½Π°ΡΠ°Π»ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ Qt Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ, Π°ΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ° ΡΠΎΠ²Π° ΠΈΠΌΠ° ΠΎΠΏΡΠΈΡ β-qconfig minimal,small,mediumβ¦β. ΠΠΊΠ»ΡΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ°ΠΉΠ» ΠΎΡ 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 Ρ 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))
Π§ΡΠ΅Π· ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Embox ΠΊΠΎΠ΄Π° ΠΎΡ ROM, Π½ΠΈΠ΅ ΡΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π°Π½ΠΈΠΌΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π΄ΠΎΡΡΠ° Π³Π»Π°Π΄ΠΊΠ°:
ΠΡΠ΅ Π² ΡΠ°ΠΌΠΈΡ ΠΊΡΠ°ΠΉ, ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΠΉΠΊΠΈ ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ ΠΎΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° Embox, ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ Qt moveblocks ΡΠ°Π±ΠΎΡΠΈ ΡΡΠ΄Π΅ΡΠ½ΠΎ ΠΎΡ QSPI Ρ framebuffer Π² SDRAM, Π° ΡΡΡΠ½ΠΎΡΠΎ ΠΌΡΡΡΠΎ Π±Π΅ΡΠ΅ ΡΠΎΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° framebuffer! ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π΅ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎΡΠΎ βΡΠ»Π°ΠΉΠ΄ΡΠΎΡβ, Π±Π΅ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ 2-ΠΊΡΠ°ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ°Π΄ΠΈ Π±Π°Π½Π°Π»Π½ΠΎΡΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΊΠ°Π΄ΡΠΎΠ²ΠΈΡ Π±ΡΡΠ΅Ρ. ΠΠΎ Π½Π΅ Π±Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΡΠ°ΠΊΡΠ² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΡΠ΅Π· ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° Embox ΠΊΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±ΡΡΠ·ΠΈ ΠΏΠ°ΠΌΠ΅ΡΠΈ (ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ Π±Π΅ΡΠ΅ 2, Π° ΠΎΠΊΠΎΠ»ΠΎ 1.5 ΠΏΡΡΠΈ).
ΠΠ°ΠΊ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΈ
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ STM32F7-Discovery, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Qt ΠΏΠΎΠ΄ Embox. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π½Π° Π½Π°ΡΠΈΡ
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Qt! Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΠΏΠΎΡΠ΅Π΄ Π½Π°Ρ Π΅ Π΄ΠΎΠ½ΡΠΊΡΠ΄Π΅ ΠΏΡΠ΅ΡΠ²Π΅Π»ΠΈΡΠ΅Π½Π°. ΠΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈΡΠ΅ ΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΠΎΡΠ°Ρ Π΄ΠΎΠ±ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡ ΡΠ°ΠΊΡ, ΡΠ΅ ΡΡΡΠ½ΠΎΡΠΎ ΠΌΡΡΡΠΎ Π² Π΅Π΄Π½Π° ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ Π΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΡ, Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
Π’Π°Π·ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠ΅ ΡΡΠ°ΡΡΠ²Π°ΠΌΠ΅ Π²ΡΠ² ΡΠ΅ΡΡΠΈΠ²Π°Π»Π°
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com