Kia pai te ahiahi Kei roto tatou i te kaupapa
Ko te Qt he anga-whakawhitiwhiti e mau ana ehara i nga waahanga kauwhata anake, engari ano ko nga mea penei i te QtNetwork, he huinga karaehe mo te mahi me nga papaa raraunga, Qt mo te Aunoatanga (tae atu ki te whakatinana IoT) me te maha atu. Kua kaha te roopu Qt ki te whakamahi i te Qt i roto i nga punaha whakauru, na reira ka taea te whirihora i nga whare pukapuka. Heoi, i mua tata nei, he ruarua nga tangata i whakaaro ki te kawe i te Qt ki nga microcontrollers, na te mea he uaua te ahua o tera mahi - he nui te Qt, he iti nga MCU.
I tetahi atu taha, i tenei wa he microcontrollers i hangaia hei mahi me te rongorau me te pai ake i nga Pentiums tuatahi. Tata ki te tau ki muri, ka puta te blog Qt
Ko te Qt 4.8 kua tukuna ki te Embox mo te wa roa, no reira ka whakatau matou ki te whakamatau. I whiriwhiria e matou te tono moveblocks - he tauira o te hākoritanga puna.
Qt moveblocks i runga i QEMU
Hei timata, ka whirihorahia e matou te Qt, mena ka taea, me te huinga iti o nga waahanga e hiahiatia ana hei tautoko i te hākoritanga. Mo tenei he whiringa "-qconfig iti, iti, reo ...". Ka honoa he konae whirihoranga mai i te Qt me te maha o nga tonotono - he aha hei whakaahei / aha hei mono. Whai muri i tenei whiringa, ka taapirihia e matou etahi atu haki ki te whirihoranga mena ka hiahia matou ki te whakakore i tetahi atu mea. Anei tetahi tauira o to maatau
Kia mahi a Qt, me taapiri he paparanga hototahi OS. Ko tetahi huarahi ko te whakatinana i te QPA (Qt Platform Abstraction). I tangohia e matou hei kaupapa te mono fb_base kua rite kua whakauruhia ki roto i te Qt, na runga i te mahi a QPA mo Linux. Ko te hua ko te mono iti e kiia ana ko emboxfb, e whakarato ana i te Qt me te framebuffer a Embox, katahi ka kumea ki reira kaore he awhina o waho.
Koinei te ahua o te hanga mono
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();
}
A koinei te ahua o te tuhi ano
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;
}
Ko te hua o tenei, na te whakahiatotanga o te kaitoi mo te rahi o te mahara -Os kua whakahohea, ka puta te ahua o te whare pukapuka ki te 3.5 MB, kaore e uru ki te mahara matua o te STM32F746. Ka rite ki ta maatau i tuhi i etahi atu tuhinga mo OpenCV, kei tenei poari:
- 1 MB ROM
- 320 KB RAM
- 8 MB SDRAM
- 16 MB QSPI
I te mea kua taapirihia te tautoko mo te mahi waehere mai i QSPI ki OpenCV, i whakatau matou ki te timata ma te uta i te whakaahua Embox c Qt katoa ki roto i te QSPI. Na hurray, tata tonu nga mea katoa i timata mai i te QSPI! Engari i te ahua o OpenCV, i puta mai he puhoi te mahi.
Na reira, i whakatau matou ki te mahi penei - tuatahi ka kapehia e matou te ahua ki te QSPI, ka utaina ki te SDRAM ka mahia mai i reira. Mai i te SDRAM ka tere ake, engari kei tawhiti tonu i te QEMU.
I muri mai, i puta he whakaaro ki te whakauru i tetahi tohu maanu - inaa, ka mahia e Qt etahi tatauranga o nga taunga o nga tapawha i roto i te hākoritanga. I whakamatau matou, engari i konei kaore i kitea he whakaterenga, ahakoa kei roto
Ko te whakaaro tino whai hua ko te neke i te framebuffer mai i te SDRAM ki te mahara o roto. Hei mahi i tenei, i hanga e matou nga rahi o te mata ehara i te 480x272, engari 272x272. I whakahekehia ano e matou te hohonu o te tae mai i te A8R8G8B8 ki te R5G6B5, na reira ka whakaitihia te rahi o te pika kotahi mai i te 4 ki te 2 paita. Ko te rahi o te framebuffer ko te 272 * 272 * 2 = 147968 paita. Na tenei i nui te whakaterenga, tera pea i tino kitea, kua tata maeneene te hākoritanga.
Ko te arotautanga hou ko te whakahaere waehere Embox mai i te RAM me te waehere Qt mai i SDRAM. Ki te mahi i tenei, ko te tuatahi ka honoa e matou a Embox ki te Qt, engari ka whakanohohia e matou nga waahanga kuputuhi, rodata, raraunga me nga bss o te whare pukapuka ki te QSPI kia kape ai ki te 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))
Na roto i te mahi i te waehere Embox mai i te ROM, i kite ano matou i te tere tere. Ko te mutunga, he maeneene te ahua o te hākoritanga:
I te mutunga, i te wa e whakarite ana i te tuhinga me te whakamatau i nga momo whirihoranga Embox, i puta mai he pai te mahi a Qt moveblocks mai i te QSPI me te framebuffer i roto i te SDRAM, a ko te pounamu he rite tonu te rahi o te framebuffer! Ko te ahua, ki te wikitoria i te "whakaata whakaataata" tuatahi, he 2-whakatere tere i nui na te whakahekenga o te rahi o te framebuffer. Engari kaore i taea te whakatutuki i taua hua ma te whakawhiti noa i te waehere Embox ki nga maharatanga tere (kaore i te 2 te whakatere, engari mo te 1.5 nga wa).
Me pehea te whakamatau i a koe ano
Mena kei a koe he STM32F7-Discovery, ka taea e koe te whakahaere Qt i raro i te Embox koe. Ka taea e koe te panui me pehea te mahi i runga i ta maatau
mutunga
Ko te mutunga, i taea e matou te whakarewa i te Qt! Ko te uauatanga o te mahi, ki ta matou nei whakaaro, he ahua whakanuia. Ko te tikanga, me whai whakaaro koe ki nga ahuatanga o nga microcontrollers me te maarama ki te hoahoanga o nga punaha rorohiko. Ko nga hua arotautanga e tohu ana ki te meka e mohiotia ana ko te pounamu i roto i te punaha rorohiko ehara i te tukatuka, engari ko te mahara.
I tenei tau ka uru matou ki te hakari
Source: will.com