ΠΠ· ΡΡΠΌ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° , ΠΈ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΡΠΏΡΡ
Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌ OpenCV Π½Π° ΠΏΠ»Π°ΡΠΊΠ° STM32746G.
ΠΠΊΠΎ ΠΏΠΎΡΡΡΡΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ βOpenCV Π½Π° ΠΏΠ»Π°ΡΠΊΠ° STM32β, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ
ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° ΠΏΠ»Π°ΡΠΊΠΈ STM32 ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ.
ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²ΠΈΠ΄Π΅Π°, ΠΊΠΎΠΈΡΠΎ ΡΠΏΠΎΡΠ΅Π΄ Π·Π°Π³Π»Π°Π²ΠΈΡΡΠ° Π±ΠΈ ΡΡΡΠ±Π²Π°Π»ΠΎ Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Ρ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½ΡΠΆΠ½ΠΎ, Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ (Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΠ΄Π΅Π°, ΠΊΠΎΠΈΡΠΎ ΡΡΠΌ Π²ΠΈΠΆΠ΄Π°Π») Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° STM32 ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° Π½Π° Π΅ΠΊΡΠ°Π½Π°, Π° ΡΠ°ΠΌΠ°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΠ°Π²Π° ΠΈΠ»ΠΈ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΊΠΎΠΌΠΏΡΡΡΡ, ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎ-ΠΌΠΎΡΠ½ΠΈ ΠΏΠ»Π°ΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Raspberry Pi).
ΠΠ°ΡΠΎ Π΅ ΡΠ»ΠΎΠΆΠ΅Π½ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ?
ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΡΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ²Π° Ρ ΡΠΎΠ²Π°, ΡΠ΅ OpenCV Π΅ Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ½ΠΎ Π·ΡΠ΅Π½ΠΈΠ΅, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΡΠ° Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ Ρ Π½Π΅Ρ, ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° Π΄Π΅ΡΠΊΡΠΎΠΏ, Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠΎ Π·Π°ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΌΠ° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ?
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° OpenCV Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΏΠ»Π°ΡΠΊΠΈ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Π΄Π²Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈ:
- ΠΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎΡΠΈ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ±Π΅ΡΠ΅ Π² ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΡΡΡΠ°ΡΠ° STM32F7Discovery (Π΄ΠΎΡΠΈ Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΎΡΡΠΈΡΠ° ΠΠ‘) ΠΏΠΎΡΠ°Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌ ΠΊΠΎΠ΄ (Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ)
- Π‘Π°ΠΌΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° C++, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ
- ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° C++ ΡΠ°Π½ΡΠ°ΠΉΠΌ (ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ Ρ.Π½.)
- ΠΡΠΌΠ° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° LibC/Posix, ΠΊΠΎΡΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π² ΠΠ‘ Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ β Π½ΡΠΆΠ½Π° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° C++ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ STL (vector ΠΈ Ρ.Π½.)
ΠΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° Embox
ΠΠ°ΠΊΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π΅ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° Ρ ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ Π² Π²ΠΈΠ΄Π°, Π² ΠΊΠΎΠΉΡΠΎ Ρ Π΅ Π·Π°ΠΌΠΈΡΠ»ΠΈΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΡΠΎΠ²Π° Π½Π΅ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ β ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΡΡ Π½Π° , Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π° ΠΏΠΎΠ΄ GNU/Linux ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ cmake.
ΠΡ Π΄ΠΎΠ±ΡΠΈΡΠ΅ Π½ΠΎΠ²ΠΈΠ½ΠΈ β OpenCV ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π° ΠΎΡ ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ ΠΊΠ°ΡΠΎ ΡΡΠ°ΡΠΈΡΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ. Π‘Π³Π»ΠΎΠ±ΡΠ²Π°ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΠΌΡΡΡΠΎ Π·Π°Π΅ΠΌΠ°. ΠΡΠ΅ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ» ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π° Π² ΠΎΡΠ΄Π΅Π»Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
> size lib/*so --totals
text data bss dec hex filename
1945822 15431 960 1962213 1df0e5 lib/libopencv_calib3d.so
17081885 170312 25640 17277837 107a38d lib/libopencv_core.so
10928229 137640 20192 11086061 a928ed lib/libopencv_dnn.so
842311 25680 1968 869959 d4647 lib/libopencv_features2d.so
423660 8552 184 432396 6990c lib/libopencv_flann.so
8034733 54872 1416 8091021 7b758d lib/libopencv_gapi.so
90741 3452 304 94497 17121 lib/libopencv_highgui.so
6338414 53152 968 6392534 618ad6 lib/libopencv_imgcodecs.so
21323564 155912 652056 22131532 151b34c lib/libopencv_imgproc.so
724323 12176 376 736875 b3e6b lib/libopencv_ml.so
429036 6864 464 436364 6a88c lib/libopencv_objdetect.so
6866973 50176 1064 6918213 699045 lib/libopencv_photo.so
698531 13640 160 712331 ade8b lib/libopencv_stitching.so
466295 6688 168 473151 7383f lib/libopencv_video.so
315858 6972 11576 334406 51a46 lib/libopencv_videoio.so
76510375 721519 717496 77949390 4a569ce (TOTALS)ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠ΅Π΄, .bss ΠΈ .data Π·Π°Π΅ΠΌΠ°Ρ Π½Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π½ΠΎ ΠΊΠΎΠ΄ΡΡ Π΅ Π½Π°Π΄ 70 ΠΠΈΠ. Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ Π°ΠΊΠΎ ΡΠΎΠ²Π° Π±ΡΠ΄Π΅ ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΄ΡΡ ΡΠ΅ Π½Π°ΠΌΠ°Π»Π΅Π΅.
ΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ (ΠΊΠΎΠΉΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° OpenCV), ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° Π³Π»Π΅Π΄Π°ΠΌΠ΅. cmake .. -LA ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ Π²ΡΠ² ΠΎΠΏΡΠΈΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈ.
-DBUILD_opencv_java_bindings_generator=OFF
-DBUILD_opencv_stitching=OFF
-DWITH_PROTOBUF=OFF
-DWITH_PTHREADS_PF=OFF
-DWITH_QUIRC=OFF
-DWITH_TIFF=OFF
-DWITH_V4L=OFF
-DWITH_VTK=OFF
-DWITH_WEBP=OFF> size lib/libopencv_core.a --totals
text data bss dec hex filename
3317069 36425 17987 3371481 3371d9 (TOTALS)ΠΡ Π΅Π΄Π½Π° ΡΡΡΠ°Π½Π°, ΡΠΎΠ²Π° Π΅ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ» ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°, ΠΎΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, ΡΠΎΠ²Π° Π΅ Π±Π΅Π· ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΠΊΠΎΠ΄Π° (-Os). ~3 ΠΠΈΠ ΠΊΠΎΠ΄ β ΡΠΎΠ²Π° Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π΄ΠΎΡΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Π²Π΅ΡΠ΅ Π΄Π°Π²Π° Π½Π°Π΄Π΅ΠΆΠ΄Π° Π·Π° ΡΡΠΏΠ΅Ρ
.
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π² Π΅ΠΌΡΠ»Π°ΡΠΎΡ
ΠΠ° Π΅ΠΌΡΠ»Π°ΡΠΎΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠΈ Π½Π° qemu. ΠΠ°ΡΠΎ Π΅ΠΌΡΠ»ΠΈΡΠ°Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΈΠ·Π±ΡΠ°Ρ Integrator/CP, ΡΡΠΉ ΠΊΠ°ΡΠΎ, ΠΎΡ Π΅Π΄Π½Π° ΡΡΡΠ°Π½Π°, ΡΠΎΠ²Π° Π΅ ΡΡΡΠΎ ARM, Π° ΠΎΡ Π΄ΡΡΠ³Π°, Embox ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ·Ρ ΠΎΠ΄ Π·Π° ΡΠ°Π·ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°.
Π Embox ΠΈΠΌΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²ΡΠ½ΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΉΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ OpenCV ΠΊΠ°ΡΠΎ ΠΌΠΎΠ΄ΡΠ» (ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π·Π° "ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ" ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΌ ΠΏΡΠΎΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
version.cpp:
#include
#include
int main() {
printf("OpenCV: %s", cv::getBuildInformation().c_str());
return 0;
}Π‘Π³Π»ΠΎΠ±ΡΠ²Π°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ β ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄.
root@embox: /#opencv_version
OpenCV:
ΠΠ±ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° OpenCV 4.0.1 =====================================
ΠΠΎΠ½ΡΡΠΎΠ» Π½Π° Π²Π΅ΡΡΠΈΡΡΠ°: bd6927bdf-dirty
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°:
ΠΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅ΡΠ°Ρ: 2019-06-21T10:02:18Z
Π₯ΠΎΡΡ: Linux 5.1.7-arch1-1-ARCH x86_64
Π¦Π΅Π»: Generic arm-unknown-none
CMake: 3.14.5
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° CMake: Unix Makefiles
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° CMake: /usr/bin/make
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ: Debug
CPU/HW ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΠ°Π·ΠΎΠ²Π°:
ΠΏΠΎΠΈΡΠΊ: DETECT
Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ: VFPV3 NEON
C/C++:
ΠΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΊΠ°ΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ?: ΠΠΠ‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ ΠΎΡ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ . ΠΠ· ΠΈΠ·Π±ΡΠ°Ρ .
ΠΡΠΈΠΌΠ΅ΡΡΡ Π±Π΅ΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΡΠ² ΡΡΠ΅ΠΉΠΌ-Π±ΡΡΠ΅ΡΠ°. Π’ΠΎΠ²Π° ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡΡΠ° imshow() ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈΡΠ΅ QT, GTK ΠΈ Windows, ΠΊΠΎΠΈΡΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° STM32. ΠΡΡΡΠ½ΠΎΡΡ, QT ΡΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ Π½Π° STM32F7Discovery, Π½ΠΎ Π·Π° ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈ Π² Π΄ΡΡΠ³Π° ΡΡΠ°ΡΠΈΡ π
Π‘Π»Π΅Π΄ ΠΊΡΠ°ΡΠΊΠΎ ΠΈΠ·ΡΡΠ½ΡΠ²Π°Π½Π΅ Π² ΠΊΠ°ΠΊΡΠ² ΡΠΎΡΠ½ΠΎ ΡΠΎΡΠΌΠ°Ρ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΡΠ°Π±ΠΎΡΠ° Π½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° Π½Π° ΡΡΠ±ΠΎΠ²Π΅, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.

ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅

Π Π΅Π·ΡΠ»ΡΠ°Ρ
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° STM32F7Discovery
ΠΠ° 32F746GDISCOVERY ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΡΠ΅ΠΊΡΠΈΠΈ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅
- 320KiB ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ
- 1MiB ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅Ρ Π·Π° ΠΎΠ±ΡΠ°Π·Π°
- 8MiB SDRAM
- 16MiB QSPI NAND ΡΠ»Π°Ρ
- ΠΠΎΡΡ Π·Π° microSD ΠΊΠ°ΡΡΠ°
SD ΠΊΠ°ΡΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.
ΠΠΈΡΠΏΠ»Π΅ΡΡ ΠΈΠΌΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 480Γ272, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π·Π° ΡΡΠ΅ΠΉΠΌ-Π±ΡΡΠ΅ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ 522 240 Π±Π°ΠΉΡΠ° ΠΏΡΠΈ Π΄ΡΠ»Π±ΠΎΡΠΈΠ½Π° ΠΎΡ 32 Π±ΠΈΡΠ°, Ρ.Π΅. ΡΠΎΠ²Π° Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΡΠ΅ΠΉΠΌ-Π±ΡΡΠ΅ΡΠ° ΠΈ ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ° (ΠΊΠΎΡΡΠΎ ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° ΠΈ Π·Π° OpenCV, Π·Π° Π΄Π° ΡΡΡ
ΡΠ°Π½ΡΠ²Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ) ΡΠ΅ ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ°Ρ Π² SDRAM, Π²ΡΠΈΡΠΊΠΎ ΠΎΡΡΠ°Π½Π°Π»ΠΎ (ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π·Π° ΡΡΠ΅ΠΊΠΎΠ²Π΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π½ΡΠΆΠ΄ΠΈ) ΡΠ΅ ΠΎΡΠΈΠ΄Π΅ Π² RAM.
ΠΠΊΠΎ Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° STM32F7Discovery (Π΄Π° ΠΈΠ·Ρ Π²ΡΡΠ»ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΡΠ΅ΠΊΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ ΠΈ Ρ.Π½.) ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ OpenCV Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ°:
text data bss dec hex filename
2876890 459208 312736 3648834 37ad42 build/base/bin/emboxΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ Ρ ΡΠΎΠ²Π°, ΠΊΠ°ΠΊΠ²ΠΈ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΡΠ΄Π΅ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΡ, ΡΠ΅ ΠΎΠ±ΡΡΠ½Ρ: Π² .text ΠΈ .rodata ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ (Π³ΡΡΠ±ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, readonly-Π΄Π°Π½Π½ΠΈ), Π² .data ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΄Π°Π½Π½ΠΈ, Π² .bss ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ βΠ½ΡΠ»Π΅Π²ΠΈΡΠ΅β ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π½Π° ΠΊΠΎΠΈΡΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΠΈΠΌ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΡΡΡΠΎ (ΡΠ°Π·ΠΈ ΡΠ΅ΠΊΡΠΈΡ βΠΎΡΠΈΠ²Π°β Π² RAM).
ΠΠΎΠ±ΡΠ°ΡΠ° Π½ΠΎΠ²ΠΈΠ½Π° Π΅, ΡΠ΅ .data/.bss ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ±Π΅ΡΠ°Ρ, Π½ΠΎ Ρ .text ΠΏΡΠΎΠ±Π»Π΅ΠΌ β ΠΏΠΎΠ΄ ΠΎΠ±ΡΠ°Π·Π° ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ 1MiB ΠΏΠ°ΠΌΠ΅Ρ. ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Ρ
Π²ΡΡΠ»ΠΈΠΌ ΠΎΡ .text ΠΊΠ°ΡΡΠΈΠ½Π°ΡΠ° ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈ Π΄Π° Ρ ΡΠ΅ΡΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡ SD-ΠΊΠ°ΡΡΠ°ΡΠ° Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, Π½ΠΎ fruits.png ΡΠ΅ΠΆΠΈ ΠΎΠΊΠΎΠ»ΠΎ 330KiB, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΎΠ²Π° Π½Π΅ ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ .text ΡΡΡΡΠΎΠΈ ΡΠΎΡΠ½ΠΎ ΠΎΡ ΠΊΠΎΠ΄Π° Π½Π° OpenCV.
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΎΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ β Π΄Π° ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° Π½Π° QSPI-ΡΠ»Π°ΡΠΊΠ° (ΡΡ ΠΈΠΌΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π·Π° ΠΌΠ°ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° ΡΠΈΠ½Π°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΡΡΡΠΏΠΈ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ). ΠΡΠΈ ΡΠΎΠ²Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ: ΠΏΡΡΠ²ΠΎ, ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° QSPI-ΡΠ»Π°ΡΠΊΠ°ΡΠ° Π½Π΅ Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π²Π΅Π΄Π½Π°Π³Π° ΡΠ»Π΅Π΄ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ (Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π·Π° ΠΌΠ°ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°), Π²ΡΠΎΡΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ βΠ·Π°ΠΏΠΈΡΠ΅β ΡΠ°Π·ΠΈ ΠΏΠ°ΠΌΠ΅Ρ Ρ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π±Π΅ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Π² QSPI, Π° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅ Ρ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ΅Π½ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ ΠΏΠΎ TFTP.
Π Π΅Π·ΡΠ»ΡΠ°Ρ
ΠΠ΄Π΅ΡΡΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ²Π° ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° Embox ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ Π³ΠΎΠ΄ΠΈΠ½Π°, Π½ΠΎ Π½ΠΎΠ½ΡΡΠΎΠΏ ΡΠ΅ ΠΎΡΠ»Π°Π³Π° ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ. ΠΠ΄Π½Π° ΠΎΡ ΡΡΡ β ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° libstdc++ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° C++ Π² Embox Π½Π°Π΄Ρ Π²ΡΡΠ»Ρ ΠΎΠ±ΡΠ΅Π³Π° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, Π·Π°ΡΠΎΠ²Π° ΡΡΠΊ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ°, ΡΠ΅ ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΡΠ°Π·ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΎΠ±Π΅ΠΌ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° π
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π±ΡΡ Π° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»ΡΠ½ΠΈ (Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎΡΠΎ, Π² Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π° ΡΡΠ΅ΠΏΠ΅Π½ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° OpenCV), ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡΡ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°. 40 Π΄ΡΠ»Π³ΠΈ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΎΡΠ½Π΅ΠΌΠ° Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Ρ ΡΠΈΠ»ΡΡΡΠ° ΠΠ΅Π½ΠΈ. Π’ΠΎΠ²Π°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΅ ΡΠ²ΡΡΠ΄Π΅ Π΄ΡΠ»Π³ΠΎ (ΠΈΠΌΠ° ΠΈΠ΄Π΅ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ, ΠΏΠΎ ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ ΠΎΡΠ΄Π΅Π»Π½Π° ΡΡΠ°ΡΠΈΡ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΡΠΏΠ΅Ρ ).

ΠΡΠ΅ ΠΏΠ°ΠΊ, ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π°ΡΠ° ΡΠ΅Π» Π±Π΅ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠΎΡΠΈΠΏ, ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ½Π°ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° OpenCV Π½Π° STM32, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, ΡΠ°Π·ΠΈ ΡΠ΅Π» Π±Π΅ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π°ΡΠ°, ΡΡΠ°!
tl;dr: ΡΡΡΠΏΠΊΠΎΠ²Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ
0: ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠΈΡΠ΅ Π½Π° Embox, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ°:
git clone https://github.com/embox/embox && cd ./embox1: ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ ΡΡΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°, ΠΊΠΎΠΉΡΠΎ βΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅β QSPI-ΡΠ»Π°ΡΠΊΠ°ΡΠ°.
make confload-arm/stm32f7cubeΠ‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π°Ρ ΠΏΠΎ TFTP. ΠΠ° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° ΠΈ Ρ ΠΎΡΡΠ°, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»Π° conf/rootfs/network.
ΠΡΠΈΠΌΠ΅ΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
iface eth0 inet static
address 192.168.2.2
netmask 255.255.255.0
gateway 192.168.2.1
hwaddress aa:bb:cc:dd:ee:02gateway β Π°Π΄ΡΠ΅Ρ Π½Π° Ρ
ΠΎΡΡΠ°, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°ΡΠ΅Π΄Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, address β Π°Π΄ΡΠ΅Ρ Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ°.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π±ΡΡΡΠ»ΠΎΡΠ΄Π΅ΡΠ°:
Π½Π°ΠΏΡΠ°Π²ΠΈ2: ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±ΡΡΡΠ»ΠΎΡΠ΄Π΅ΡΠ° (ΠΈΠ·Π²ΠΈΠ½Π΅ΡΠ΅ Π·Π° ΠΊΠ°Π»Π°ΠΌΠ±ΡΡΠ°) Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° β ΡΡΠΊ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΊΠ°ΠΊΡΠΎ Π·Π° Π²ΡΡΠΊΠΎ Π΄ΡΡΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° STM32F7Discovery. ΠΠΊΠΎ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΡΠ°Π²Π° ΡΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° Π½Π΅Π³ΠΎ .
3: ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° OpenCV.
make confload-platform/opencv/stm32f7discovery
make4: ΠΠ·Π²Π»ΠΈΡΠ°Π½Π΅ ΠΎΡ ELF ΡΠ΅ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π² QSPI, Π² qspi.bin
arm-none-eabi-objcopy -O binary build/base/bin/embox build/base/bin/qspi.bin
--only-section=.text --only-section=.rodata
--only-section='.ARM.ex*'
--only-section=.dataΠ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° conf ΠΈΠΌΠ° ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ²Π°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅
./conf/qspi_objcopy.sh # ΠΡΠΆΠ½ΠΈΡΡ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠ°ΠΉΠ» -- build/base/bin/qspi.bin5: Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° tftp Π·Π°ΡΠ΅ΠΆΠ΄Π°ΠΌΠ΅ qspi.bin.bin Π½Π° QSPI ΡΠ»Π°ΡΠΊΠ°. ΠΠ° Ρ
ΠΎΡΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ qspi.bin Π² ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° Π½Π° tftp ΡΡΡΠ²ΡΡΠ° (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠΎΠ²Π° Π΅ /srv/tftp/ ΠΈΠ»ΠΈ /var/lib/tftpboot/; ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π·Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΡΡΡΠ²ΡΡ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ Π½Π°ΡΠΈΡΠ° tftpd ΠΈΠ»ΠΈ tftp-hpa, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ systemctl start tftpd.service Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅).
# Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ tftpd
sudo cp build/base/bin/qspi.bin /srv/tftp
# Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ tftp-hpa
sudo cp build/base/bin/qspi.bin /var/lib/tftpbootΠΠ° Embox (Ρ.Π΅. Π² Π±ΡΡΡΠ»ΠΎΡΠ΄Π΅ΡΠ°) ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌ, ΡΠ΅ Π°Π΄ΡΠ΅ΡΡΡ Π½Π° ΡΡΡΠ²ΡΡΠ° Π΅ 192.168.2.1):
embox> qspi_loader qspi.bin 192.168.2.16: Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° goto Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° βΡΠΊΠΎΡΠΈΡΠ΅β Π² QSPI ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° Π»ΠΎΠΊΠ°ΡΠΈΡ ΡΠ΅ Π²Π°ΡΠΈΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠ·ΠΈ Π°Π΄ΡΠ΅Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° mem 0x90000000 (Π°Π΄ΡΠ΅ΡΡΡ Π½Π° ΡΡΠ°ΡΡΠ° ΡΠ΅ ΠΏΠΎΠ±ΠΈΡΠ° Π² Π²ΡΠΎΡΠΎΡΠΎ 32-Π±ΠΈΡΠΎΠ²ΠΎ ΡΠ»ΠΎΠ²ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ); ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅ ΡΡΠ΅ΠΊΠ° Ρ ΡΠ»Π°Π³ -s, Π°Π΄ΡΠ΅ΡΡΡ Π½Π° ΡΡΠ΅ΠΊΠ° Π΅ Π½Π° Π°Π΄ΡΠ΅Ρ 0x90000000, ΠΏΡΠΈΠΌΠ΅Ρ:
embox>mem 0x90000000
0x90000000: 0x20023200 0x9000c27f 0x9000c275 0x9000c275
β β
ΡΠΎΠ²Π° Π΅ Π°Π΄ΡΠ΅ΡΡΡ ΡΠΎΠ²Π° Π΅ Π°Π΄ΡΠ΅ΡΡΡ
Π½Π° ΡΡΠ΅ΠΊΠ° Π½Π° ΠΏΡΡΠ²Π°ΡΠ°
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ
embox>goto -i 0x9000c27f -s 0x20023200 # Π€Π»Π°Π³ΡΡ -i Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ, Π·Π° Π΄Π° ΡΠ΅ Π·Π°Π±ΡΠ°Π½ΡΡ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°7: ΠΠ°ΠΏΡΡΠΊΠ°ΠΌΠ΅
embox> edges 20ΠΈ ΡΠ΅ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Π²Π°ΠΌΠ΅ Π½Π° 40-ΡΠ΅ΠΊΡΠ½Π΄Π½ΠΎ ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π³ΡΠ°Π½ΠΈΡΠΈ π
ΠΠΊΠΎ Π½Π΅ΡΠΎ Π½Π΅ Π²ΡΡΠ²ΠΈ ΠΏΠΎ ΠΏΠ»Π°Π½ β ΠΏΠΈΡΠ΅ΡΠ΅ issue Π² , ΠΈΠ»ΠΈ Π² mailing list-a embox-devel@googlegroups.com, ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΡΡΠΊ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
