ΠΠ· ΡΡΠΌ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°
ΠΠΊΠΎ Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ βOpenCV Π½Π° ΠΏΠ»Π°ΡΠΊΠ° STM32β Π² ΡΡΡΡΠ°ΡΠΊΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π΄ΠΎΡΡΠ° Ρ
ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° ΠΏΠ»Π°ΡΠΊΠΈ STM32 ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ.
ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ»ΠΈΠΏΠ°, ΠΊΠΎΠΈΡΠΎ, ΡΡΠ΄Π΅ΠΉΠΊΠΈ ΠΏΠΎ ΠΈΠΌΠ΅ΡΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Ρ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ (Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ»ΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π²ΠΈΠ΄ΡΡ
) Π½Π° ΠΏΠ»Π°ΡΠΊΠ°ΡΠ° STM32 ΡΠ°ΠΌΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ Π±Π΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° Π΅ΠΊΡΠ°Π½Π°, Π° ΡΠ°ΠΌΠ°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΊΠΎΠΌΠΏΡΡΡΡ, ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎ-ΠΌΠΎΡΠ½ΠΈ ΠΏΠ»Π°ΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Raspberry Pi).
ΠΠ°ΡΠΎ Π΅ ΡΡΡΠ΄Π½ΠΎ?
ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π·Π° ΡΡΡΡΠ΅Π½Π΅ ΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ²Π° Ρ ΡΠ°ΠΊΡΠ°, ΡΠ΅ OpenCV Π΅ Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ½ΠΎ Π·ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΡΠ° Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ Ρ Π½Π΅Ρ, Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π΅ΡΠΊΡΠΎΠΏ ΠΊΠΎΠ΄ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠΎ Π·Π°ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΌΠ° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ?
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° OpenCV Π²ΡΡΡ Ρ ΠΌΠ°Π»ΠΊΠΈ ΡΠ°Π»ΠΎΠ²Π΅ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
- ΠΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎΡΠΈ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΡ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ±Π΅ΡΠ΅ Π²ΡΠ² ΡΠ»Π°Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΡΡΡΠΈΡ STM32F7Discovery (Π΄ΠΎΡΠΈ Π±Π΅Π· Π΄Π° Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°) ΠΏΠΎΡΠ°Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΡΠΌ ΠΊΠΎΠ΄ (Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ)
- Π‘Π°ΠΌΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° C++, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°
- ΠΡΠΆΠ΄Π°Π΅ΡΠ΅ ΡΠ΅ ΠΎΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ (ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ Ρ.Π½.)
- ΠΠ°Π»ΠΊΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° LibC/Posix, ΠΊΠΎΡΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² ΠΠ‘ Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ - ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° ΠΏΠ»ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° STL ΡΠ°Π±Π»ΠΎΠ½Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (Π²Π΅ΠΊΡΠΎΡ ΠΈ Ρ.Π½.)
ΠΡΠ΅Π½Π°ΡΡΠ½Π΅ ΠΊΡΠΌ Embox
ΠΠ°ΠΊΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠ΅Π½Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΈΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΊΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π΄ΠΎΠ±ΡΠ° ΠΈΠ΄Π΅Ρ Π΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° Ρ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ Π²ΡΠ² ΡΠΎΡΠΌΠ°ΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ° Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠ»ΠΈ. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ Π½ΡΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΡΠΎΠ²Π° - ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π½Π°
ΠΠΎΠ±ΡΠ°ΡΠ° Π½ΠΎΠ²ΠΈΠ½Π° Π΅, ΡΠ΅ 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 MiB. Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ Π°ΠΊΠΎ ΡΠΎΠ²Π° Π΅ ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΡΡΠ°Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ.
ΠΠ΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·Ρ
Π²ΡΡΠ»ΠΈΠΌ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ (ΠΊΠΎΠΉΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° 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 MiB ΠΊΠΎΠ΄ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π΄ΠΎΡΡΠ°, Π½ΠΎ Π²Π΅ΡΠ΅ Π΄Π°Π²Π° Π½Π°Π΄Π΅ΠΆΠ΄Π° Π·Π° ΡΡΠΏΠ΅Ρ
.
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ Π² Π΅ΠΌΡΠ»Π°ΡΠΎΡΠ°
ΠΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ Π² Π΅ΠΌΡΠ»Π°ΡΠΎΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΡΠ²Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠΈ Π½Π° qemu. ΠΠ°ΡΠΎ Π΅ΠΌΡΠ»ΠΈΡΠ°Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΈΠ·Π±ΡΠ°Ρ Integrator / CP, Ρ.ΠΊ ΠΏΡΡΠ²ΠΎ, ΡΠΎΠΉ ΡΡΡΠΎ Π΅ ARM, ΠΈ Π²ΡΠΎΡΠΎ, Embox ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ·Ρ ΠΎΠ΄ Π·Π° ΡΠ°Π·ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°.
Embox ΠΈΠΌΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²ΡΠ½ΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠ°ΡΠΎ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅, Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ OpenCV ΠΊΠ°ΡΠΎ ΠΌΠΎΠ΄ΡΠ» (ΠΏΡΠ΅Π΄Π°Π²Π°ΠΉΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π·Π° "ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ°" ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
version.cpp:
#include <stdio.h>
#include <opencv2/core/utility.hpp>
int main() {
printf("OpenCV: %s", cv::getBuildInformation().c_str());
return 0;
}
Π‘Π³Π»ΠΎΠ±ΡΠ²Π°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Ρ - ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ.
root@embox:/#opencv_version
OpenCV:
General configuration for OpenCV 4.0.1 =====================================
Version control: bd6927bdf-dirty
Platform:
Timestamp: 2019-06-21T10:02:18Z
Host: Linux 5.1.7-arch1-1-ARCH x86_64
Target: Generic arm-unknown-none
CMake: 3.14.5
CMake generator: Unix Makefiles
CMake build tool: /usr/bin/make
Configuration: Debug
CPU/HW features:
Baseline:
requested: DETECT
disabled: VFPV3 NEON
C/C++:
Built as dynamic libs?: NO
< ΠΠ°Π»ΡΡΠ΅ ΠΈΠ΄ΡΡ ΠΏΡΠΎΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ -- Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ ΡΠ»Π°Π³Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ,
ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ OpenCV Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΡΠ±ΠΎΡΠΊΡ ΠΈ Ρ.ΠΏ.>
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π½ΠΈ ΠΎΡ ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡΡ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π»Π΅ΠΊΠΎ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² Π±ΡΡΠ΅ΡΠ° Π½Π° ΡΠ°ΠΌΠΊΠ°ΡΠ°. Π’ΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΡΠΎΠ²Π°, Π·Π°ΡΠΎΡΠΎ. ΡΡΠ½ΠΊΡΠΈΡ imshow()
ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈΡΠ΅ QT, GTK ΠΈ Windows, ΠΊΠΎΠΈΡΠΎ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΏΡΠΈΡΡΡΡΠ²Π°Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° STM32. ΠΡΡΡΠ½ΠΎΡΡ QT ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΈ Π½Π° STM32F7Discovery, Π½ΠΎ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΎ Π² Π΄ΡΡΠ³Π° ΡΡΠ°ΡΠΈΡ π
Π‘Π»Π΅Π΄ ΠΊΡΠ°ΡΠΊΠΎ ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΊΡΠ² ΡΠΎΡΠΌΠ°Ρ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΡΡΠ±ΠΎΠ²ΠΈΡ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π° ΡΠ½ΠΈΠΌΠΊΠ°
Π Π΅Π·ΡΠ»ΡΠ°Ρ
Π Π°Π±ΠΎΡΠΈ Π½Π° STM32F7Discovery
ΠΠ° 32F746GDISCOVERY ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΊΡΠΈΠΈ Ρ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½
- 320KiB RAM
- 1MiB ΡΠ»Π°Ρ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
- 8MiB SDRAM
- 16MiB QSPI NAND ΡΠ»Π°Ρ
- ΡΠ»ΠΎΡ Π·Π° microSD ΠΊΠ°ΡΡΠ°
SD ΠΊΠ°ΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.
ΠΠΈΡΠΏΠ»Π΅ΡΡ Π΅ Ρ ΡΠ΅Π·ΠΎΠ»ΡΡΠΈΡ 480Γ272, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ 522 240 Π±Π°ΠΉΡΠ° ΠΏΡΠΈ Π΄ΡΠ»Π±ΠΎΡΠΈΠ½Π° 32 Π±ΠΈΡΠ°, Ρ.Π΅. ΡΠΎΠ²Π° Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° RAM, ΡΠ°ΠΊΠ° ΡΠ΅ Π±ΡΡΠ΅ΡΡΡ Π½Π° ΠΊΠ°Π΄ΡΠΈΡΠ΅ ΠΈ ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ° (ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π° OpenCV, Π·Π° ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΏΠΎΠΌΠ°Π³Π°ΡΠ΅Π»Π½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ) ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π² SDRAM, Π²ΡΠΈΡΠΊΠΎ ΠΎΡΡΠ°Π½Π°Π»ΠΎ (ΠΏΠ°ΠΌΠ΅Ρ Π·Π° ΡΡΠ΅ΠΊΠΎΠ²Π΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π½ΡΠΆΠ΄ΠΈ ) ΡΠ΅ ΠΎΡΠΈΠ΄Π΅ Π² RAM .
ΠΠΊΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° STM32F7Discovery (ΠΈΠ·Ρ Π²ΡΡΠ»ΠΈΠΌ ΡΡΠ»Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ°, Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠ΅ΠΊΠΎΠ²Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΈ ΠΈ Ρ.Π½.) ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ OpenCV Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ°ΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΊΠ°ΠΊΡΠΎ ΡΠ»Π΅Π΄Π²Π°:
text data bss dec hex filename
2876890 459208 312736 3648834 37ad42 build/base/bin/embox
ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΊΠΎΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈ ΠΊΡΠ΄Π΅ ΠΎΡΠΈΠ²Π°Ρ, ΡΠ΅ ΠΎΠ±ΡΡΠ½Ρ: Π² .text
ΠΈ .rodata
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ (Π³ΡΡΠ±ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Π΄Π°Π½Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅) ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π² .data
Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, .bss
ΠΈΠΌΠ° "Π½ΡΠ»ΠΈΡΠ°Π½ΠΈ" ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π½ΡΠΆΠ΄Π°ΡΡ ΠΎΡ ΠΌΡΡΡΠΎ (ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ "ΠΎΡΠΈΠ΄Π΅" Π² RAM).
ΠΠΎΠ±ΡΠ°ΡΠ° Π½ΠΎΠ²ΠΈΠ½Π° Π΅, ΡΠ΅ .data
/.bss
ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠ°ΡΠ½Π΅, Π½ΠΎ Ρ .text
ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ 1MiB ΠΏΠ°ΠΌΠ΅Ρ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Ρ
Π²ΡΡΠ»ΠΈ .text
ΠΊΠ°ΡΡΠΈΠ½Π°ΡΠ° ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡ SD ΠΊΠ°ΡΡΠ°ΡΠ° Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, Π½ΠΎ fruits.png ΡΠ΅ΠΆΠΈ ΠΎΠΊΠΎΠ»ΠΎ 330KiB, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΎΠ²Π° Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ .text
ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ OpenCV ΠΊΠΎΠ΄Π°.
ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΎΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ Π½Π΅ΡΠΎ - Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° Π²ΡΡΡ Ρ QSPI ΡΠ»Π°Ρ (ΡΠΎΠΉ ΠΈΠΌΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π·Π° ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΊΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° ΡΠΈΠ½Π°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΡ Π΄Π° ΠΈΠΌΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ). Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π²ΡΠ·Π½ΠΈΠΊΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ: ΠΏΡΡΠ²ΠΎ, ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° QSPI ΡΠ»Π°Ρ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π΅ Π΅ Π½Π°Π»ΠΈΡΠ½Π° Π²Π΅Π΄Π½Π°Π³Π° ΡΠ»Π΅Π΄ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ (ΡΡΡΠ±Π²Π° ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΊΠ°ΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°), ΠΈ Π²ΡΠΎΡΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° βΡΠ»Π°ΡΠ½Π΅ΡΠ΅β ΡΠ°Π·ΠΈ ΠΏΠ°ΠΌΠ΅Ρ Ρ ΠΏΠΎΠ·Π½Π°Ρ Π±ΡΡΡΠ»ΠΎΡΠ΄ΡΡ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Π² QSPI ΠΈ Π΄Π° ΡΠ΅ ΡΠ»Π°ΡΠ½Π΅ ΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ ΡΠΎΠ²Π°ΡΠ°Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ» ΡΡΠ΅Π· TFTP.
Π Π΅Π·ΡΠ»ΡΠ°Ρ
ΠΠ΄Π΅ΡΡΠ° ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ΅ ΠΊΡΠΌ Embox ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ Π³ΠΎΠ΄ΠΈΠ½Π°, Π½ΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ Π±Π΅ΡΠ΅ ΠΎΡΠ»Π°Π³Π°Π½Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ. ΠΠ΄Π½Π° ΠΎΡ ΡΡΡ Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° libstdc++ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° C++ Π² Embox Π΅ ΠΈΠ·Π²ΡΠ½ ΠΎΠ±Ρ Π²Π°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΡΠΊ ΡΠ΅ ΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ, ΡΠ΅ ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΡΠ°Π·ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π² ΡΠΎΡΠ½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° π
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π±ΡΡ Π° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈ (ΠΏΠΎΠ½Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡΡ Ρ OpenCV) ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡΡ ΡΠ΅ Π·Π°ΠΏΡΠ»Π½ΠΈ. ΠΡΠ½Π΅ΠΌΠ° 40 Π΄ΡΠ»Π³ΠΈ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ Π½Π° Π΄ΡΡΠΊΠ°ΡΠ° Π΄Π° ΡΡΡΡΠΈ Π³ΡΠ°Π½ΠΈΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΈΠ»ΡΡΡΠ° Canny. Π’ΠΎΠ²Π°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΅ ΡΠ²ΡΡΠ΄Π΅ Π΄ΡΠ»Π³ΠΎ (ΠΈΠΌΠ° ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ, ΡΠ΅ Π±ΡΠ΄Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ ΠΎΡΠ΄Π΅Π»Π½Π° ΡΡΠ°ΡΠΈΡ Π·Π° ΡΠΎΠ²Π° Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΡΡΠΏΠ΅Ρ ).
ΠΠ΅ΠΆΠ΄ΠΈΠ½Π½Π°ΡΠ° ΡΠ΅Π» ΠΎΠ±Π°ΡΠ΅ Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»Π½Π°ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° OpenCV Π½Π° STM32, ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΡΠ°Π·ΠΈ ΡΠ΅Π» Π±Π΅ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π°ΡΠ°, ΡΡΠ°!
tl;dr: ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ°
0: ΠΠ·ΡΠ΅Π³Π»Π΅ΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° Embox, ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π°:
git clone https://github.com/embox/embox && cd ./embox
1: ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π±ΡΡΡΠ»ΠΎΡΠ΄ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ "ΡΠ»Π°ΡΠ²Π°" 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:02
gateway
- Ρ
ΠΎΡΡ Π°Π΄ΡΠ΅Ρ, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, address
- Π°Π΄ΡΠ΅Ρ Π½Π° Π΄ΡΡΠΊΠ°ΡΠ°.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π±ΡΡΡΠ»ΠΎΡΠ΄ΡΡΠ°:
make
2: ΠΠ±ΠΈΡΠ°ΠΉΠ½ΠΎΡΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±ΡΡΡΠ»ΠΎΡΠ΄ΡΡΠ° (ΡΡΠΆΠ°Π»ΡΠ²Π°ΠΌ Π·Π° ΠΈΠ³ΡΠ°ΡΠ° Π½Π° Π΄ΡΠΌΠΈ) Π½Π° Π΄ΡΡΠΊΠ°ΡΠ° - ΡΡΠΊ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΊΠ°ΡΠΎ Π²ΡΡΠΊΠΎ Π΄ΡΡΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° STM32F7Discovery. ΠΠΊΠΎ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π°
3: ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° OpenCV.
make confload-platform/opencv/stm32f7discovery
make
4: ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ 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.bin
5: ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ 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.1
6: Π‘ ΠΊΠΎΠΌΠ°Π½Π΄Π° goto
ΡΡΡΠ±Π²Π° Π΄Π° "ΡΠΊΠΎΡΠΈΡΠ΅" Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° QSPI. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ Π²Π°ΡΠΈΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠ·ΠΈ Π°Π΄ΡΠ΅Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° mem 0x90000000
(Π½Π°ΡΠ°Π»Π½ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΡΠ΅ Π²ΠΏΠΈΡΠ²Π° Π²ΡΠ² Π²ΡΠΎΡΠ°ΡΠ° 32-Π±ΠΈΡΠΎΠ²Π° Π΄ΡΠΌΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ); ΡΠ΅ ΡΡΡΠ±Π²Π° ΡΡΡΠΎ Π΄Π° ΠΌΠ°ΡΠΊΠΈΡΠ°ΡΠ΅ ΡΡΠ΅ΠΊΠ° -s
, Π°Π΄ΡΠ΅ΡΡΡ Π½Π° ΡΡΠ΅ΠΊΠ° Π΅ 0x90000000, ΠΏΡΠΈΠΌΠ΅Ρ:
embox>mem 0x90000000
0x90000000: 0x20023200 0x9000c27f 0x9000c275 0x9000c275
β β
ΡΡΠΎ Π°Π΄ΡΠ΅Ρ ΡΡΠΎ Π°Π΄ΡΠ΅Ρ
ΡΡΡΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠΉ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
embox>goto -i 0x9000c27f -s 0x20023200 # Π€Π»Π°Π³ -i Π½ΡΠΆΠ΅Π½ ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΡ
< ΠΠ°ΡΠΈΠ½Π°Ρ ΠΎΡΡΡΠ΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ Π½Π΅ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°, Π° ΠΎΠ±ΡΠ°Π·Π° Ρ OpenCV >
7: Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅
embox> edges 20
ΠΈ ΡΠ΅ Π½Π°ΡΠ»Π°Π΄Π΅ΡΠ΅ Π½Π° 40-ΡΠ΅ΠΊΡΠ½Π΄Π½ΠΎΡΠΎ ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° π
ΠΠΊΠΎ Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ° - Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com