OpenCV Π½Π° STM32F7-Discovery

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

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

Π—Π°Ρ‰ΠΎ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ?

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° OpenCV Π²ΡŠΡ€Ρ…Ρƒ ΠΌΠ°Π»ΠΊΠΈ шаловС Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

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

ΠŸΡ€Π΅Π½Π°ΡΡΠ½Π΅ към Embox

ΠšΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° прСнСсСтС ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ към ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, Π΄ΠΎΠ±Ρ€Π° идСя Π΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° я ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π² която Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ са я ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠ»ΠΈ. Π’ нашия случай няма ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Ρ‚ΠΎΠ²Π° - изходният ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π½Π° githabe, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄ 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 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 Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² сборку ΠΈ Ρ‚.ΠΏ.>

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° стартиратС някакъв ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ стандартнитС, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π½ΠΈ ΠΎΡ‚ самитС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Π½Π° вашия сайт. Π°Π· ΠΈΠ·Π±ΠΈΡ€Π°ΠΌ Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ canny.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° бъдС Π»Π΅ΠΊΠΎ прСнаписан, Π·Π° Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π°. Π’Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° направя Ρ‚ΠΎΠ²Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ. функция imshow() ΠΌΠΎΠΆΠ΅ Π΄Π° рисува изобраТСния Ρ‡Ρ€Π΅Π· интСрфСйситС QT, GTK ΠΈ Windows, ΠΊΠΎΠΈΡ‚ΠΎ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ няма Π΄Π° ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Ρ‚ Π² конфигурацията Π·Π° STM32. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ QT ΠΌΠΎΠΆΠ΅ Π΄Π° сС изпълнява ΠΈ Π½Π° STM32F7Discovery, Π½ΠΎ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС обсъдСно Π² Π΄Ρ€ΡƒΠ³Π° статия πŸ™‚

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

OpenCV Π½Π° STM32F7-Discovery

ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π° снимка

OpenCV Π½Π° STM32F7-Discovery

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

Π Π°Π±ΠΎΡ‚ΠΈ Π½Π° STM32F7Discovery

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

  1. 320KiB RAM
  2. 1MiB Ρ„Π»Π°Ρˆ Π·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
  3. 8MiB SDRAM
  4. 16MiB QSPI NAND Ρ„Π»Π°Ρˆ
  5. слот Π·Π° 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 Π½Π° 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 - адрСс Π½Π° Π΄ΡŠΡΠΊΠ°Ρ‚Π°.

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

    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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€