OpenCV Π½Π° STM32F7-Discovery

OpenCV Π½Π° STM32F7-Discovery Аз съм Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Embox, ΠΈ Π² Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ успях Π΄Π° стартирам OpenCV Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠ° STM32746G.

Ако ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ β€žOpenCV Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠ° STM32β€œ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ сС интСрСсуват ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠΈ STM32 ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ.
Има няколко Π²ΠΈΠ΄Π΅Π°, ΠΊΠΎΠΈΡ‚ΠΎ спорСд заглавията Π±ΠΈ трябвало Π΄Π° дСмонстрират Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ (във всички Π²ΠΈΠ΄Π΅Π°, ΠΊΠΎΠΈΡ‚ΠΎ съм Π²ΠΈΠΆΠ΄Π°Π») Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠ°Ρ‚Π° STM32 сС ΠΏΡ€Π°Π²ΠΈ само ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΊΠ°ΠΌΠ΅Ρ€Π°Ρ‚Π° ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π½Π° Π΅ΠΊΡ€Π°Π½Π°, Π° самата ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ става ΠΈΠ»ΠΈ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎ-ΠΌΠΎΡ‰Π½ΠΈ ΠΏΠ»Π°Ρ‚ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Raspberry Pi).

Π—Π°Ρ‰ΠΎ Π΅ слоТСн Ρ‚ΠΎΠ·ΠΈ процСс?

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Ρ‚ΡŠΡ€ΡΠ΅Π½ΠΈΡΡ‚Π° сС обяснява с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ OpenCV Π΅ Π½Π°ΠΉ-популярната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΎ Π·Ρ€Π΅Π½ΠΈΠ΅, Π° слСдоватСлно ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ са Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ с нСя, ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС стартира ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° дСсктоп, Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ улСснява процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Но Π·Π°Ρ‰ΠΎ всС ΠΎΡ‰Π΅ няма популярни Π³ΠΎΡ‚ΠΎΠ²ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ?

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° OpenCV Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΏΠ»Π°Ρ‚ΠΊΠΈ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с Π΄Π²Π΅ особСности:

  • Ако ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎΡ€ΠΈ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, тя просто Π½Π΅ Ρ‰Π΅ сС ΠΏΠΎΠ±Π΅Ρ€Π΅ Π² Ρ„Π»Π°Ρˆ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΡΡŠΡ‰Π°Ρ‚Π° STM32F7Discovery (Π΄ΠΎΡ€ΠΈ Π±Π΅Π· Π΄Π° сС ΠΎΡ‚Ρ‡ΠΈΡ‚Π° ОБ) ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ голям ΠΊΠΎΠ΄ (няколко ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° инструкции)
  • Π‘Π°ΠΌΠ°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΅ написана Π½Π° C++, слСдоватСлно
    • НСобходима Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° C++ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ (ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Ρ‚.Π½.)
    • Няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° LibC/Posix, която ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π² ОБ Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми β€” Π½ΡƒΠΆΠ½Π° Π΅ стандартна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° C++ ΠΈ стандартна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° шаблони STL (vector ΠΈ Ρ‚.Π½.)

ΠŸΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Embox

ΠšΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, ΠΏΡ€Π΅Π΄ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, Π΅ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° я ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ я Π΅ замислил Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚. Π’ нашия случай ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Ρ‚ΠΎΠ²Π° Π½Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ β€” ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС намСрят Π½Π° GitHub, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° сС сглобява ΠΏΠΎΠ΄ 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, Π½ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС Π³ΠΎΠ²ΠΎΡ€ΠΈ Π² Π΄Ρ€ΡƒΠ³Π° статия πŸ™‚

Π‘Π»Π΅Π΄ ΠΊΡ€Π°Ρ‚ΠΊΠΎ изясняванС Π² какъв Ρ‚ΠΎΡ‡Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° Ρ€ΡŠΠ±ΠΎΠ²Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

OpenCV Π½Π° STM32F7-Discovery

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

OpenCV Π½Π° STM32F7-Discovery

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° STM32F7Discovery

На 32F746GDISCOVERY ΠΈΠΌΠ° няколко Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΈ сСкции Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅

  1. 320KiB ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚
  2. 1MiB Ρ„Π»Π°Ρˆ ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° ΠΎΠ±Ρ€Π°Π·Π°
  3. 8MiB SDRAM
  4. 16MiB QSPI NAND Ρ„Π»Π°Ρˆ
  5. ΠŸΠΎΡ€Ρ‚ Π·Π° 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 Π½Π° STM32F7-Discovery

ВсС ΠΏΠ°ΠΊ, ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π°Ρ‚Π° Ρ†Π΅Π» бСшС ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ½Π°Ρ‚Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° стартиранС Π½Π° 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 β€” адрСс Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠ°Ρ‚Π°.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π±ΡƒΡƒΡ‚Π»ΠΎΡƒΠ΄Π΅Ρ€Π°:

    Π½Π°ΠΏΡ€Π°Π²ΠΈ

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 Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, Π·Π° Π΄Π° сС забранят ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡΡ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° инициализацията Π½Π° систСмата

7: ЗапускамС

    embox> edges 20

ΠΈ сС наслаТдавамС Π½Π° 40-сСкундно Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†ΠΈ πŸ™‚

Ако Π½Π΅Ρ‰ΠΎ Π½Π΅ Π²ΡŠΡ€Π²ΠΈ ΠΏΠΎ ΠΏΠ»Π°Π½ β€” ΠΏΠΈΡˆΠ΅Ρ‚Π΅ issue Π² Π½Π°ΡˆΠ΅Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΈΠ»ΠΈ Π² mailing list-a embox-devel@googlegroups.com, ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster