OpenCV ืื•ื™ืฃ STM32F7-Discovery ืื™ืš ื‘ื™ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคื•ืŸ ื“ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ืขืžื‘ืึธืงืก, ืื•ืŸ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ืš ื•ื•ืขืœ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื•ื•ื™ ืื™ืš ื’ืขืจืื˜ืŸ ืฆื• ืœื•ื™ืคืŸ OpenCV ืื•ื™ืฃ ื“ื™ STM32746G ื‘ืจืขื˜.

ืื•ื™ื‘ ืื™ืจ ืึทืจื™ื™ึทืŸ ืขืคึผืขืก ื•ื•ื™ "OpenCV ืื•ื™ืฃ STM32 ื‘ืจืขื˜" ืื™ืŸ ืึท ื–ื•ื›ืŸ ืžืึธื˜ืึธืจ, ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืึท ื‘ื™ืกืœ ืžืขื ื˜ืฉืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื ื™ืฆืŸ ื“ืขื ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืื•ื™ืฃ STM32 ื‘ืึธืจื“ื– ืึธื“ืขืจ ืื ื“ืขืจืข ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจืก.
ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ื•ื•ื™ื“ื™ืืก ื•ื•ืึธืก, ืื•ื™ื‘ ืžืฉืคื˜ืŸ ืœื•ื™ื˜ ื“ืขื ื ืึธืžืขืŸ, ื–ืึธืœ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ื•ื•ืึธืก ืื™ื– ื“ืืจืฃ, ืึธื‘ืขืจ ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ (ืื™ืŸ ืึทืœืข ื“ื™ ื•ื•ื™ื“ื™ืืก ื•ื•ืึธืก ืื™ืš ื’ืขื–ืขืŸ) ืื•ื™ืฃ ื“ื™ STM32 ื‘ืจืขื˜, ื‘ืœื•ื™ื– ื“ื™ ื‘ื™ืœื“ ืื™ื– ื‘ืืงื•ืžืขืŸ ืคื•ืŸ ื“ื™ ืึทืคึผืึทืจืึทื˜ ืื•ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ื’ืขื•ื•ื™ื–ืŸ ืื•ื™ืฃ ื“ืขื ืขืงืจืึทืŸ, ืื•ืŸ ื“ื™ ื‘ื™ืœื“ ืคึผืจืึทืกืขืกื™ื ื’ ื–ื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขื˜ืืŸ ืึธื“ืขืจ ืื•ื™ืฃ ืึท ืจืขื’ื•ืœืขืจ ืงืึธืžืคึผื™ื•ื˜ืขืจ, ืึธื“ืขืจ ืื•ื™ืฃ ืžืขืจ ืฉื˜ืึทืจืง ื‘ืึธืจื“ื– (ืœืžืฉืœ, Raspberry Pi).

ืคืืจื•ื•ืืก ืื™ื– ืขืก ืฉื•ื•ืขืจ?

ื“ื™ ืคึผืึธืคึผื•ืœืึทืจื™ื˜ืขื˜ ืคื•ืŸ ื–ื•ื›ืŸ ืคึฟืจืื’ืŸ ืื™ื– ื“ืขืจืงืœืขืจื˜ ื“ื•ืจืš ื“ื™ ืคืึทืงื˜ ืึทื– OpenCV ืื™ื– ื“ื™ ืžืขืจืกื˜ ืคืึธืœืงืก ืงืึธืžืคึผื™ื•ื˜ืขืจ ื–ืขืื•ื ื’ ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ื•ื•ืึธืก ืžื™ื˜ืœ ืึทื– ืžืขืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื–ืขื ืขืŸ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ืขืก, ืื•ืŸ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืœื•ื™ืคืŸ ื“ืขืกืงื˜ืึทืคึผ-ื’ืจื™ื™ื˜ ืงืึธื“ ืื•ื™ืฃ ืึท ืžื™ืงืจืึธืงืึธื ื˜ืจืึธืœืœืขืจ ื–ื™ื™ืขืจ ืกื™ืžืคึผืœืึทืคื™ื™ื– ื“ื™ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคึผืจืึธืฆืขืก. ืึธื‘ืขืจ ื•ื•ืึธืก ื–ืขื ืขืŸ ื ืึธืš ืงื™ื™ืŸ ืคืึธืœืงืก ืคืึทืจื˜ื™ืง ืจืขืกืึทืคึผื™ื– ืคึฟืึทืจ ืกืึทืœื•ื•ื™ื ื’ ื“ืขื ืคึผืจืึธื‘ืœืขื?

ื“ื™ ืคึผืจืึธื‘ืœืขื ืคื•ืŸ ื ื™ืฆืŸ OpenCV ืื•ื™ืฃ ืงืœื™ื™ืŸ ืฉืึธืœื– ืื™ื– ืฉื™ื™ืš ืฆื• ืฆื•ื•ื™ื™ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ:

  • ืื•ื™ื‘ ืื™ืจ ืฆื•ื ื•ื™ืคืฉื˜ืขืœื  ื“ื™ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืืคื™ืœื• ืžื™ื˜ ืึท ืžื™ื ื™ืžืึทืœ ื’ืึทื ื’ ืคื•ืŸ ืžืึทื“ื–ืฉื•ืœื–, ืขืก ืคืฉื•ื˜ ื•ื•ืขื˜ ื ื™ืฉื˜ ืคึผืึทืกื™ืง ืื™ืŸ ื“ื™ ื‘ืœื™ืฅ ื–ื›ึผืจื•ืŸ ืคื•ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ STM32F7Discovery (ืืคื™ืœื• ืึธืŸ ื’ืขื ื•ืžืขืŸ ื“ื™ ืึทืก) ืจืขื›ื˜ ืฆื• ืึท ื–ื™ื™ืขืจ ื’ืจื•ื™ืก ืงืึธื“ (ืขื˜ืœืขื›ืข ืžืขื’ืื‘ื™ื™ื˜ ืคื•ืŸ ื™ื ืกื˜ืจืึทืงืฉืึทื ื–)
  • ื“ื™ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ื–ื™ืš ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ C ++, ื•ื•ืึธืก ืžื™ื˜ืœ
    • ื“ืึทืจืคึฟืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ positive ืจื•ื ื˜ื™ืžืข (ื™ืงืกืขืคึผืฉืึทื ื–, ืืื–"ื• ื•)
    • ืงืœื™ื™ืŸ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ LibC / Posix, ื•ื•ืึธืก ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ืึทืก ืคึฟืึทืจ ืขืžื‘ืขื“ื™ื“ ืกื™ืกื˜ืขืžืขืŸ - ืื™ืจ ื“ืึทืจืคึฟืŸ ืึท ื ืึธืจืžืึทืœ ืคึผืœื•ืก ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืื•ืŸ ืึท ื ืึธืจืžืึทืœ STL ืžื•ืกื˜ืขืจ ื‘ื™ื‘ืœื™ืึธื˜ืขืง (ื•ื•ืขืงื˜ืึธืจ, ืืื–"ื• ื•)

ืคึผืึธืจื˜ื™ื ื’ ืฆื• ืขืžื‘ืึธืงืก

ื•ื•ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ืื™ื™ื“ืขืจ ื˜ืจืึทื ืกืคึผืึธืจื˜ื™ื ื’ ืงื™ื™ืŸ ืžื’ื™ืœื” ืฆื• ื“ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื, ืขืก ืื™ื– ืึท ื’ื•ื˜ืข ื’ืขื“ืึทื ืง ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื‘ื•ื™ืขืŸ ืขืก ืื™ืŸ ื“ื™ ืคืึธืจืขื ื•ื•ืึธืก ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื”ืึธื‘ืŸ ื‘ื“ืขื” ืขืก. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ ืžื™ื˜ ื“ืขื - ื“ื™ ืžืงื•ืจ ืงืึธื“ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื•ื™ืฃ ื’ื™ื˜ื”ื•ื‘, ื“ื™ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืื™ื– ื’ืขื‘ื•ื™ื˜ ืื•ื ื˜ืขืจ GNU/Linux ืžื™ื˜ ื“ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืงืžืึทืงืข.

ื“ื™ ื’ื•ื˜ืข ื ื™ื™ึทืขืก ืื™ื– ืึทื– 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 MiB ืคื•ืŸ ืงืึธื“ ืื™ื– ื ืึธืš ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ, ืึธื‘ืขืจ ืฉื•ื™ืŸ ื’ื™ื˜ ื”ืึธืคืขื ื•ื ื’ ืคึฟืึทืจ ื”ืฆืœื—ื”.

ืœื•ื™ืคืŸ ืื™ืŸ ื“ื™ ืขืžื•ืœืึทื˜ืึธืจ

ืขืก ืื™ื– ืคื™ืœ ื’ืจื™ื ื’ืขืจ ืฆื• ื“ื™ื‘ื•ื’ ืื•ื™ืฃ ื“ื™ ืขืžื•ืœืึทื˜ืึธืจ, ืึทื–ื•ื™ ืขืจืฉื˜ืขืจ ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ื“ื™ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืึทืจื‘ืขื˜ ืื•ื™ืฃ ืงืขืžื•. ื•ื•ื™ ืึทืŸ ืขืžื™ืึทืœื™ื™ื˜ื™ื“ ืคึผืœืึทื˜ืคืึธืจืžืข, ืื™ืš ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื™ื ื˜ืขื’ืจืึทื˜ืึธืจ / ืงืคึผ, ื•ื•ื™ื™ึทืœ ืขืจืฉื˜ืขืจ, ืขืก ืื™ื– ืื•ื™ืš ARM, ืื•ืŸ ืฆื•ื•ื™ื™ื˜ื ืก, ืขืžื‘ืึธืงืก ืฉื˜ื™ืฆื˜ ื’ืจืึทืคื™ืงืก ืจืขื–ื•ืœื˜ืึทื˜ ืคึฟืึทืจ ื“ืขื ืคึผืœืึทื˜ืคืึธืจืžืข.

ืขืžื‘ืึธืงืก ื”ืื˜ ืึท ืžืขืงืึทื ื™ื–ืึทื ืคึฟืึทืจ ื‘ื ื™ืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืœื™ื™ื‘ืจืขืจื™ื–, ื ื™ืฆืŸ ืขืก, ืžื™ืจ ืœื™ื™ื’ืŸ 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, ืึธื‘ืขืจ ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ืกืงืึทืกื˜ ืื™ืŸ ืืŸ ืื ื“ืขืจ ืึทืจื˜ื™ืงืœ ๐Ÿ™‚

ื ืึธืš ืึท ืงื•ืจืฅ ืงืœืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ื•ื•ืึธืก ืคึฟืึธืจืžืึทื˜ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ื‘ืจืขื’ ื“ืขื˜ืขืงื˜ืึธืจ ืื™ื– ืกื˜ืึธืจื“, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ื‘ื™ืœื“.

OpenCV ืื•ื™ืฃ STM32F7-Discovery

ืึธืจื™ื’ื™ื ืขืœ ื‘ื™ืœื“

OpenCV ืื•ื™ืฃ STM32F7-Discovery

ื˜ืึทื›ืœืขืก

ืคืœื™ืกื ื“ื™ืง ืื•ื™ืฃ STM32F7Discovery

ืื•ื™ืฃ 32F746GDISCOVERY ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ื™ื™ึทื–ื ื•ื•ืึทืจื’ ื–ื›ึผืจื•ืŸ ืกืขืงืฉืึทื ื– ื•ื•ืึธืก ืžื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืื™ื™ืŸ ื•ื•ืขื’ ืึธื“ืขืจ ืื ื“ืขืจืŸ

  1. 320KB ื‘ืึทืจืึทืŸ
  2. 1MiB ื‘ืœื™ืฅ ืคึฟืึทืจ ื‘ื™ืœื“
  3. 8MiB SDRAM
  4. 16MiB QSPI NAND ืคืœืึทืฉ
  5. ืžื™ืงืจืึธืกื“ ืงืึธืจื˜ ืฉืคึผืขืœื˜ืœ

ืึท ืกื“ ืงืึธืจื˜ ืงืขื ืขืŸ ื•ื•ืขืจืŸ ื’ืขื ื•ืฆื˜ ืฆื• ืงืจืึธื ื‘ื™ืœื“ืขืจ, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืงืึธื ื˜ืขืงืกื˜ ืคื•ืŸ ืคืœื™ืกื ื“ื™ืง ืึท ืžื™ื ื™ืžืึทืœ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื–ื™ื™ืขืจ ื ื•ืฆื™ืง.
ื“ืขืจ ืึทืจื•ื™ืกื•ื•ื™ื™ึทื–ืŸ ื”ืื˜ ืึท ื”ืึทื›ืœืึธื˜ืข ืคื•ืŸ โ€‹โ€‹480 ร— 272, ื•ื•ืึธืก ืžื™ื˜ืœ ืึทื– ื“ื™ ืคืจืึทืžืขื‘ื•ืคืขืจ ื–ื›ึผืจื•ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ 522 ื‘ื™ื˜ืขืก ืื™ืŸ ืึท ื˜ื™ืคืขื ื™ืฉ ืคื•ืŸ 240 ื‘ื™ืฅ, ื“.ื”. ื“ืึธืก ืื™ื– ืžืขืจ ื•ื•ื™ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื‘ืึทืจืึทืŸ, ืึทื–ื•ื™ ื“ื™ ืคืจืึทืžืขื‘ื•ืคืขืจ ืื•ืŸ ื“ื™ ืงื•ืคึผืข (ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคืืจืœืื ื’ื˜, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืคึฟืึทืจ OpenCV, ืฆื• ืงืจืึธื ื“ืึทื˜ืŸ ืคึฟืึทืจ ื‘ื™ืœื“ืขืจ ืื•ืŸ ืึทื’ื–ื™ืœื™ืขืจื™ ืกื˜ืจืึทืงื˜ืฉืขืจื–) ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœื™ื’ืŸ ืื™ืŸ SDRAM, ืึทืœืฅ ืึทื ื“ืขืจืฉ (ื–ื™ืงืึธืจืŸ ืคึฟืึทืจ ืกื˜ืึทืงืก ืื•ืŸ ืื ื“ืขืจืข ืกื™ืกื˜ืขื ื“ืึทืจืฃ ) ื•ื•ืขื˜ ื’ื™ื™ืŸ ืฆื• ื‘ืึทืจืึทืŸ.

ืื•ื™ื‘ ืžื™ืจ ื ืขืžืขืŸ ื“ื™ ืžื™ื ื™ืžื•ื ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึฟืึทืจ STM32F7Discovery (ื•ื•ืึทืจืคืŸ ืื•ื™ืก ื“ื™ ื’ืื ืฆืข ื ืขืฅ, ืึทืœืข ืงืึทืžืึทื ื“ื–, ืžืึทื›ืŸ ืกื˜ืึทืงืก ื•ื•ื™ ืงืœื™ื™ืŸ ื•ื•ื™ ืžืขื’ืœืขืš, ืืื–"ื• ื•) ืื•ืŸ ืœื™ื™ื’ืŸ OpenCV ืžื™ื˜ ื‘ื™ื™ืฉืคื™ืœืŸ ื“ืึธืจื˜, ื“ื™ ืคืืจืœืื ื’ื˜ ื–ื›ึผืจื•ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื•ื•ื™ ื’ื™ื™ื˜:

   text    data     bss     dec     hex filename
2876890  459208  312736 3648834  37ad42 build/base/bin/embox

ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืขืจ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ื•ื•ืึธืก ืกืขืงืฉืึทื ื– ื’ื™ื™ืŸ ื•ื•ื•, ืื™ืš ื•ื•ืขื˜ ื“ืขืจืงืœืขืจืŸ: ืื™ืŸ .text ะธ .rodata ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืื•ืŸ ืงืึทื ืกื˜ืึทื ืฅ (ื‘ืขืขืจืขืš ื’ืขืจืขื“ื˜, ืœื™ื™ืขื ืขืŸ ื‘ืœื•ื™ื– ื“ืึทื˜ืŸ) ืœื™ื’ืŸ ืื™ืŸ .data ื“ื™ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืžื™ื•ื˜ืึทื‘ืึทืœ, .bss ืขืก ื–ืขื ืขืŸ "ื ื•ืœื“" ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ื•ื•ืึธืก, ืคื•ื ื“ืขืกื˜ื•ื•ืขื’ืŸ, ื“ืึทืจืคึฟืŸ ืึท ืคึผืœืึทืฅ (ื“ืขื ืึธืคึผื˜ื™ื™ืœื•ื ื’ ื•ื•ืขื˜ "ื’ื™ื™ืŸ" ืฆื• ื‘ืึทืจืึทืŸ).

ื“ื™ ื’ื•ื˜ืข ื ื™ื™ึทืขืก ืื™ื– ืึทื– .data/.bss ื–ืึธืœ ืคึผืึทืกื™ืง, ืึธื‘ืขืจ ืžื™ื˜ .text ื“ื™ ืฆืจื” ืื™ื– ืึทื– ืขืก ืื™ื– ื‘ืœื•ื™ื– 1MiB ืคื•ืŸ ื–ื›ึผืจื•ืŸ ืคึฟืึทืจ ื“ื™ ื‘ื™ืœื“. ืž'ืงืขืŸ ืืจื•ื™ืกื•ื•ืืจืคืŸ .text ื“ื™ ื‘ื™ืœื“ ืคื•ืŸ ื“ืขื ื‘ื™ื™ืฉืคึผื™ืœ ืื•ืŸ ืœื™ื™ืขื ืขืŸ ืขืก, ืœืžืฉืœ, ืคึฟื•ืŸ ื“ื™ ืกื“ ืงืึธืจื˜ ืื™ืŸ ื–ื›ึผืจื•ืŸ ืื™ืŸ ืกื˜ืึทืจื˜ืึทืคึผ, ืึธื‘ืขืจ fruits.png ื•ื•ื™ื™ื– ื•ื•ืขื’ืŸ 330KiB, ืึทื–ื•ื™ ื“ืึธืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืกืึธืœื•ื•ืข ื“ื™ ืคึผืจืึธื‘ืœืขื: ืจื•ื‘ึฟ .text ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ื“ื™ OpenCV ืงืึธื“.

ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืขืก ืื™ื– ื‘ืœื•ื™ื– ืื™ื™ืŸ ื–ืึทืš ืœื™ื ืงืก - ืœืึธื•ื“ื™ื ื’ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืงืึธื“ ืื•ื™ืฃ ืึท QSPI ื‘ืœื™ืฅ (ืขืก ื”ืื˜ ืึท ืกืคึผืขืฆื™ืขืœ ืžืึธื“ืข ืคื•ืŸ โ€‹โ€‹ืึธืคึผืขืจืึทืฆื™ืข ืคึฟืึทืจ ืžืึทืคึผื™ื ื’ ื–ื›ึผืจื•ืŸ ืฆื• ื“ื™ ืกื™ืกื˜ืขื ื•ื™ื˜ืึธื‘ื•ืก, ืึทื–ื•ื™ ืึทื– ื“ืขืจ ืคึผืจืึทืกืขืกืขืจ ืงืขื ืขืŸ ืฆื•ื˜ืจื™ื˜ ื“ื™ ื“ืึทื˜ืŸ ื’ืœื™ื™ึทืš). ืื™ืŸ ื“ืขื ืคืึทืœ, ืึท ืคึผืจืึธื‘ืœืขื ืขืจื™ื™ื–ืึทื–: ืขืจืฉื˜ืขืจ, ื“ื™ ื–ื™ืงืึธืจืŸ ืคื•ืŸ ืึท QSPI ื‘ืœื™ืฅ ืคืึธืจ ืื™ื– ื ื™ืฉื˜ ื‘ื ื™ืžืฆื ืžื™ื“ ื ืึธืš ืจื™ื‘ืึธืึธื˜ ื“ื™ ืžื™ื˜ืœ (ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื™ื ื™ืฉืึทืœื™ื™ื– ื“ื™ ื–ื›ึผืจื•ืŸ-ืžืึทืคึผื˜ ืžืึธื“ืข ืกืขืคึผืขืจืึทื˜ืœื™), ืื•ืŸ ืฆื•ื•ื™ื™ื˜ื ืก, ืื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ "ืคืœืึทืฉ" ื“ืขื ื–ื›ึผืจื•ืŸ ืžื™ื˜. ืึท ื‘ืึทืงืึทื ื˜ ื‘ืึธืึธื˜ืœืึธืึทื“ืขืจ.

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืขืก ืื™ื– ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืึทืœืข ื“ื™ ืงืึธื“ ืื™ืŸ QSPI, ืื•ืŸ ืคืœืึทืฉ ืขืก ืžื™ื˜ ืึท ื–ื™ืš-ื’ืขืฉืจื™ื‘ืŸ ืœืึธื•ื“ืขืจ ื•ื•ืึธืก ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ื‘ื™ื™ื ืขืจื™ ื“ื•ืจืš TFTP.

ื˜ืึทื›ืœืขืก

ื“ืขืจ ื’ืขื“ืึทื ืง ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืฆื• ืขืžื‘ืึธืงืก ืื™ื– ืืจื•ื™ืก ืžื™ื˜ ื•ื•ืขื’ืŸ ืึท ื™ืึธืจ ืฆื•ืจื™ืง, ืึธื‘ืขืจ ืื™ื‘ืขืจ ืื•ืŸ ืื™ื‘ืขืจ ื•ื•ื™ื“ืขืจ ืขืก ืื™ื– ืคึผืึธื•ืกื˜ืคึผืึธื•ื ื“ ืจืขื›ื˜ ืฆื• ืคืึทืจืฉื™ื“ืŸ ืกื™ื‘ื•ืช. ืื™ื™ื ืขืจ ืคื•ืŸ ื–ื™ื™ ืื™ื– ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ libstdc ++ ืื•ืŸ ื“ื™ ื ืึธืจืžืึทืœ ืžื•ืกื˜ืขืจ ื‘ื™ื‘ืœื™ืึธื˜ืขืง. ื“ื™ ืคึผืจืึธื‘ืœืขื ืคื•ืŸ C ++ ืฉื˜ื™ืฆืŸ ืื™ืŸ ืขืžื‘ืึธืงืก ืื™ื– ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืึทื–ื•ื™ ื“ืึธ ืื™ืš ื ืึธืจ ื–ืึธื’ืŸ ืึทื– ืžื™ืจ ื’ืขืจืื˜ืŸ ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื“ืขื ืฉื˜ื™ืฆืŸ ืื™ืŸ ื“ื™ ืจืขื›ื˜ ืกื•ืžืข ืคึฟืึทืจ ื“ืขื ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืฆื• ืึทืจื‘ืขื˜ืŸ ๐Ÿ™‚

ืื™ืŸ ื“ื™ ืกื•ืฃ, ื“ื™ ืคืจืื‘ืœืขืžืขืŸ ื–ืขื ืขืŸ ื‘ืึทืงื•ืžืขืŸ (ืœืคึผื—ื•ืช ื’ืขื ื•ื’ ืคึฟืึทืจ ื“ื™ OpenCV ื‘ื™ื™ืฉืคึผื™ืœ ืฆื• ืึทืจื‘ืขื˜ืŸ), ืื•ืŸ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ื’ืขืœืืคืŸ. ืขืก ื ืขืžื˜ 40 ืœืึทื ื’ ืกืขืงื•ื ื“ืขืก ืคึฟืึทืจ ื“ื™ ื‘ืจืขื˜ ืฆื• ื–ื•ื›ืŸ ืคึฟืึทืจ ื‘ืึทื•ื ื“ืจื™ื– ื ื™ืฆืŸ ื“ื™ ืงืึทื ื™ ืคื™ืœื˜ืขืจ. ื“ืึธืก ืื™ื–, ืคื•ืŸ ืงื•ืจืก, ืฆื• ืœืึทื ื’ (ืขืก ื–ืขื ืขืŸ ืงืึทื ืกื™ื“ืขืจื™ื™ืฉืึทื ื– ื•ื•ื™ ืฆื• ืึทืคึผื˜ืึทืžื™ื™ื– ื“ืขื ืขื ื™ืŸ, ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืžืขื’ืœืขืš ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืึทืจื˜ื™ืงืœ ื•ื•ืขื’ืŸ ื“ืขื ืื™ืŸ ืคืึทืœ ืคื•ืŸ ื”ืฆืœื—ื”).

OpenCV ืื•ื™ืฃ STM32F7-Discovery

ืึธื‘ืขืจ, ื“ื™ ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืฆื™ืœ ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืคึผืจืึธื•ื˜ืึทื˜ื™ื™ืคึผ ื•ื•ืึธืก ื•ื•ืขื˜ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืคื•ื ื“ืึทืžืขื ื˜ืึทืœ ืžืขื’ืœืขื›ืงื™ื™ื˜ ืคื•ืŸ ืœื•ื™ืคืŸ OpenCV ืื•ื™ืฃ STM32, ืจื™ืกืคึผืขืงื˜ื™ื•ื•ืœื™, ื“ืขื ืฆื™ืœ ืื™ื– ืึทื˜ืฉื™ื•ื•ื“, ื”ื•ืจืึท!

tl;dr: ืฉืจื™ื˜ ื“ื•ืจืš ืฉืจื™ื˜ ื™ื ืกื˜ืจืึทืงืฉืึทื ื–

0: ืืจืืคืงืืคื™ืข ืขืžื‘ืึธืงืก ืงื•ื•ืืœืŸ, ื•ื•ื™ ื“ืึธืก:

    git clone https://github.com/embox/embox && cd ./embox

1: ืœืึธืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ืึทืกืขืžื‘ืึทืœ ืึท ื‘ืึธืึธื˜ืœืึธืึทื“ืขืจ ื•ื•ืึธืก ื•ื•ืขื˜ "ื‘ืœื™ืฆืŸ" ืึท QSPI ื‘ืœื™ืฅ ืคืึธืจ.

    make confload-arm/stm32f7cube

ืื™ืฆื˜ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ื ืขืฅ, ื•ื•ื™ื™ึทืœ. ืžื™ืจ ื•ื•ืขืœืŸ ืฆื•ืคึฟืขืœื™ืงืขืจ ื“ื™ ื‘ื™ืœื“ ื“ื•ืจืš TFTP. ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ื‘ืจืขื˜ ืื•ืŸ ื‘ืึทืœืขื‘ืึธืก IP ืึทื“ืจืขืกืขืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ื“ื™ conf/rootfs/ื ืขื˜ื•ื•ืึธืจืง.

ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ:

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/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

ืื•ื™ืฃ ืขืžื‘ืึธืงืก (ื“"ื” ืื™ืŸ ื“ื™ ื‘ืึธืึธื˜ืœืึธืึทื“ืขืจ), ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื•ื™ืกืคื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ (ืžื™ืจ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ื“ืขืจ ืกืขืจื•ื•ืขืจ ื”ืื˜ ื“ื™ ืึทื“ืจืขืก 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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’