10.2 TFLM ่ฟ่กๆถไธๆจกๅๅตๅ ฅ
ๆฌ้ถๆฎตๆถต็ไธค้กนๅ ๅฎน๏ผๅฐ TensorFlow Lite Micro (TFLM) ่ฟ่กๆถ้ๆๅฐ Q2390 / IQ2390 MCU ๅบไปถไธญ๏ผไปฅๅๅฐ้ขๅ ๆๅปบ็ int8 ๆจกๅ๏ผๅจ็ฌฌ 1 ้ถๆฎต็ๆ๏ผ็ดๆฅๅตๅ ฅๅบไปถ้ๅใๅ ถไธญๅ ๆฌๅจ SDLLVM/RISC-V ไธๆ้็ใไธๆๅฏ่ง็ C++ ่ฟ่กๆถ่ฎพ็ฝฎใ##10.2.1 ๆฆ่ฟฐ ้ๆๅ ๅซไบไธชไธๅ้จๅ๏ผ
- ่ทๅ TFLM ๆบ็ โ TFLM ๆบ็ ๆช้ไปๅบๆไพ๏ผnot vendored๏ผ๏ผๅฟ ้กปๆๅจ่ทๅ
- ๆฃๆฅๆจกๅๅนถ้ช่ฏ็ฎๅญๆฏๆ โ ไปๆจกๅไธญๆๅ็ฎๅญ็ฑปๅ๏ผๅนถ็กฎ่ฎค TFLM ๆฏๆ่ฟไบ็ฎๅญ
- ้ ็ฝฎ LLVM libc++ โ SDLLVM ้ป่ฎคไธ้ ็ฝฎ libc++๏ผ้่ฆ่ฟ่ก 5 ้กน็นๅฎไฟฎๅค
- ๅๅปบๆจ็ๆจกๅ โ ๆๅปบๅ
ๅซๅตๅ
ฅๅผๆจกๅ C ๆฐ็ปใๆจ็ๆกๆถ๏ผ
tflite_infer.cc๏ผใKconfig ๅคดๆไปถๅ CMakeLists.txt ็ๆจกๅ - ้ๆๅฐๅบไปถๆๅปบไธญ โ ๅจ
main.cไธญ่ฐ็จtflite_infer_run()๏ผๅนถๅจ CMake ไธญๆณจๅ่ฏฅๆจกๅ
##10.2.2. ็ฌฌ 1 ้จๅ โ ่ทๅ TFLite Micro ๆบ็
่ทฏๅพ็บฆๅฎ๏ผ ๅจๆฌ้ถๆฎตไธญ๏ผTFLM ๆจกๅๆกฉๆไปถ๏ผ<wasp_proc>ๆ MCU ๅบไปถๅทฅไฝๅบ็ๆ น็ฎๅฝ๏ผๅณๅ ๅซzephyr/ใmodules/ใconfig/็ญ็็ฎๅฝใๅกๅบ็ฐๆญคๅค๏ผ่ฏทๆฟๆขไธบๆจ็ๅฎ้ ่ทฏๅพ๏ผไพๅฆ/path/to/your_workspace/wasp_proc๏ผใ
CMakeLists.txtใKconfig๏ผไฝไบ wasp_proc/zephyr/zephyr/modules/tflite-micro/๏ผไฝๅฎ้
็ C++ ๆบ็ ๆ ๅนถไธๅญๅจ๏ผๅฟ
้กปๆๅจๅ
้ใ
tflite-micro ้กน็ฎๅจ west ๆธ
ๅ๏ผzephyr/zephyr/submanifests/optional.yaml๏ผไธญๅฎไนไบ optional ็ป๏ผ่ Zephyr ่ช่บซ็ west.yml ้่ฟ group-filter: [-optional] ๆพๅผ็ฆ็จไบ่ฏฅ็ปใ่ฟๆๅณ็ west update tflite-micro ๅฐๆ ๆณๅทฅไฝ๏ผ่ฏทๆน็จ git cloneใ
10.2.2.1. ๅ ้ๆบ็
ๅจ Docker ๆๅปบๅฎนๅจๅ ๏ผ10.2.2.2. ้ช่ฏ
10.2.3. ็ฌฌ 2 ้จๅ โ ๆฃๆฅๆจกๅๅนถ้ช่ฏ็ฎๅญๆฏๆ
ๅจ็ผๅไปปไฝๅบไปถไปฃ็ ไนๅ๏ผๆไปฌ้่ฆไปๆจกๅไธญ่ทๅไธค้กนไฟกๆฏ๏ผ- ๆจกๅไฝฟ็จไบๅชไบ็ฎๅญ โ TFLM ่ฟ่กๆถ่ฆๆฑๅจ่ฟ่กๆจ็ไนๅๆพๅผๆณจๅๆจกๅไฝฟ็จ็ๆฏไธช็ฎๅญใๅฆๆ็ผบๅฐไปปไฝ็ฎๅญ๏ผๅบไปถๅฐๅจๅฏๅจๆถๅ ๆ ๆณ่งฃๆ็ฎๅญ่ๆฅ้ใๆญคๆญฅ้ชคๅฏ็กฎๅฎๆจกๅๆ้็็กฎๅ็ฎๅญ้ๅ๏ผไปฅไพฟๆจๅจ ็ฌฌ 5 ้จๅ ไธญ้ๆๆจ็ๆกๆถๆถ็ฅ้้่ฆๆณจๅๅชไบ็ฎๅญใ
- ่พๅ ฅ/่พๅบ้ๅๅๆฐ๏ผscale + zero_point๏ผโ ๅฆๆๆจกๅ้็จ int8 ้ๅ๏ผๅๆตฎ็น่พๅ ฅๅจไผ ้็ปๆจ็ๆกๆถไนๅๅฟ ้กป้ขๅ ้ๅไธบ int8ใ
10.2.3.1. ้้กน A โ flatc๏ผๅฎๆดๆๆ่งฃ็ โ ๆจ่๏ผ
ไฝฟ็จ TFLM schema ๅฐๆจกๅไบ่ฟๅถ่งฃ็ ไธบไบบ็ฑปๅฏ่ฏป็ JSONใๅฏ่ทๅพ๏ผๆๆๅผ ้็็ฎๅญ็ฑปๅใๅผ ้ๅ็งฐใๅฝข็ถๅ้ๅๅๆฐใ
ๆญฅ้ชค 1 โ ่ฟ่ก flatc ่งฃ็ ๆจกๅ๏ผ
cnn1d_minimal_int8.jsonใ
ๆญฅ้ชค 2 โ ไป JSON ไธญๆๅ็ฎๅญๅ่กจ๏ผ
10.2.3.2. ้้กน B โ tf.lite.Interpreter๏ผไป
้ๅๅๆฐ๏ผๆ ้ flatc๏ผ
ๅจ flatc ไธๅฏ็จๆถไฝฟ็จใๅฏ่ทๅพ่พๅ
ฅ/่พๅบ้ๅๅๆฐ๏ผscaleใzero_point๏ผใไธไผๆด้ฒ็ฎๅญ็ฑปๅ โ ่ฏทไฝฟ็จ้้กน A ่ทๅ็ฎๅญๅ่กจใ
tf.lite.Interpreterไธไผๆด้ฒ็ฎๅญ็ฑปๅ โ ่ฏทไฝฟ็จ้้กน A๏ผflatc๏ผ่ทๅ็ฎๅญๅ่กจใ
10.2.3.3. ๆญค TFLM ๆๅปบๆฏๆ็ๆๆ็ฎๅญ
TFLM ๆๆฏๆ็ฎๅญ็ๆๅจๆฅๆบๆฏmicro_mutable_op_resolver.h โ ่ฏฅๆไปถไธญๅฃฐๆ็ๆฏไธช Add*() ๆนๆณ้ฝๅฏนๅบๆไธ่ฝฝ็็กฎๅไฟฎ่ฎข็ๆฌๆๆฏๆ็ไธไธช็ฎๅญใ
zephyr_20240627 ็ๅฎๆดๆฏๆ็ฎๅญๅ่กจ โ ๅ
ฑ 114 ไธช็ฎๅญ๏ผ
ๆฏไธช็ฎๅญๅฏนๅบ็ resolver ๆนๆณไธบAdd+ ็ฎๅญๅ็งฐ โ ไพๅฆConv2DโAddConv2D()๏ผFullyConnectedโAddFullyConnected()ใ
10.2.3.4. ๅ่ โ ็คบไพๆจกๅๅทฒ็กฎ่ฎค็็ฎๅญ
cnn1d_minimal_int8.tflite ไธญ็ๆๆ็ฎๅญใๅฏนๅบ็ TFLM ๅ
ๆ ธๆไปถไปฅๅ resolver ๆนๆณ๏ผ
ๅฆๆๆไธช็ฎๅญๆชๆณจๅ๏ผๆจๅฐ็ๅฐไปฅไธ้่ฏฏไนไธ๏ผ
็ผ่ฏๆถ๏ผๆนๆณๅ็งฐ้่ฏฏๆ็ผบๅคฑ๏ผ๏ผ
AllocateTensors() ้ถๆฎต๏ผ็ฎๅญๆชๆณจๅ๏ผ๏ผ
10.2.4. ็ฌฌ 3 ้จๅ โ ้ ็ฝฎ LLVM libc++๏ผ5 ๆญฅไฟฎๅค๏ผ
10.2.4.1. ้ป่ฎคๆนๆณไธบไฝๅคฑ่ดฅ
่ฆไฝฟ็จ TFLM๏ผไปฅ C++ ็ผๅ๏ผ๏ผZephyr ้่ฆ C++ ๆ ๅๅบใ่ช็ถ็่ตท็นๆฏๅฏ็จCONFIG_LIBCXX_LIBCPP=yใ็ถ่ๅจ SDLLVM ไธ๏ผ่ฟไผ่งฆๅไธๆก็ ดๅๆๅปบ็ Kconfig ไพ่ต้พใ่ฏฅๆ
้ไผ่กจ็ฐไธบไธไธชๅฎๅ
จไธ็ธๅ
ณ็ๅ
ๆ ธๆไปถไธญ็้่ฏฏ๏ผ
10.2.4.2. 4 ๆญฅไฟฎๅค
10.2.4.2.1. ๆญฅ้ชค 1 โ ไป TFLM Kconfig ไธญ็งป้ค select REQUIRES_FULL_LIBCPP
ๆไปถ๏ผzephyr/zephyr/modules/tflite-micro/Kconfig
ไป config TENSORFLOW_LITE_MICRO ๅ
้จ็งป้ค select REQUIRES_FULL_LIBCPP ่ฟไธ่กใ่ฟๆฏไพ่ต็บง่็ๆ นๆบ โ ็งป้คๅฎๅฏ้ฒๆญข Zephyr ๅจ SDLLVM ไธ่งฆๅๅทฒๆๅ็ REQUIRES_FULL_LIBC ่ทฏๅพใ
10.2.4.2.2. ๆญฅ้ชค 2 โ ไฝฟ็จ EXTERNAL_MODULE_LIBCPP๏ผ่้ EXTERNAL_LIBCPP
ๆญคๅคๆ ้ๆไฝ โ ่ฏฅ่ฎพ็ฝฎๅ
ๅซๅจ็ฌฌ 2.4.4 ่ๅๅปบ็ๆฐๆไปถไธญใ
10.2.4.2.3. ๆญฅ้ชค 3 โ ้่ฟ -I ่้ -isystem ๆณจๅ
ฅ libc++ ๅ
ๅซ่ทฏๅพ
ๆญคๅคๆ ้ๆไฝ โ ่ฏฅ่ฐ็จๆฏ็ฌฌ 2.4.3 ่ไธญๆทปๅ ็ๅฎๆดไปฃ็ ๅ็ไธ้จๅใ
-I ็ฎๅฝไผๅ
ไบไปปไฝ -isystem ็ฎๅฝ่ขซๆ็ดขใ้่ฟไปฅ -I BEFORE ๆนๅผๆณจๅ
ฅ libc++ ๅคดๆไปถ๏ผclang ไผ้ฆๅ
ๆพๅฐ libc++ ่ช่บซ็ <stdio.h>/<string.h> ๅ
่ฃ
ๅคดๆไปถ๏ผๅฎไปฌๅ้่ฟ #include_next ้พๆฅๅฐ musl โ ่ฟๆญฃๆฏ C++ ็ฟป่ฏๅๅ
็ๆญฃ็กฎ่งฃๆ้กบๅบใ
10.2.4.2.4. ๆญฅ้ชค 4 โ ไฝฟ็จ -DNDEBUG ็ผ่ฏ C++ ็ฟป่ฏๅๅ
ๆญคๅคๆ ้ๆไฝ โ ่ฏฅๆ ๅฟๆฏ็ฌฌ 2.4.3 ่ไธญๆทปๅ ็ๅฎๆดไปฃ็ ๅ็ไธ้จๅใ
musl ็ assert() ๅฎไผๅฑๅผไธบ __assert_fail()๏ผ่ picolibc ๅนถไธๆไพ่ฏฅๅฝๆฐใ-DNDEBUG ไผๅจ C++ ็ฟป่ฏๅๅ
ไธญ็ผ่ฏๆๆๆ assert ่ฐ็จใๅ
ถไฝ็จ่ๅด้ๅฎไธบ $<$<COMPILE_LANGUAGE:CXX>:-DNDEBUG>๏ผๅ ๆญค C ไปฃ็ ไธๅๅฝฑๅใ
10.2.4.3. ๅฎๆด็ CMake ้ ็ฝฎไปฃ็ ๅ
ๆไปถ๏ผmodules/hal/qcom/core/config/CMakeLists.txt๏ผๅทฒๆๆไปถ โ ๅจๆซๅฐพๆทปๅ ๆญคๅฎๆดไปฃ็ ๅ๏ผใ่ฏฅไปฃ็ ๅไปฅ CONFIG_EXTERNAL_MODULE_LIBCPP ไธบๆกไปถ๏ผๅ ๆญคไป
ๅจๅๅนถ TFLM Kconfig ็ๆฎตๆถๆไผ็ๆใ
10.2.4.4. shikra_lpaicp_tflite.conf
10.2.4.4.1. ๆญฅ้ชค 1 โ ๅๅปบ shikra_lpaicp_tflite.conf
ๅจ zephyr/kernel/config/shikra_lpaicp_tflite.conf ๅๅปบๆฐๆไปถ๏ผ
10.2.4.4.2. ๆญฅ้ชค 2 โ ๅจ config.yml ไธญๆณจๅ่ฏฅๆไปถ
ๆไปถ๏ผzephyr/kernel/config/config.yml๏ผๅทฒๆๆไปถ โ ๆทปๅ ไธไธชๆฐๆก็ฎ๏ผ๏ผ
ไธบไปไนไฝฟ็จๅ็ฌ็ๆไปถ๏ผ่ไธๆฏๆทปๅ ๅฐshikra_lpaicp.conf๏ผ ็ฐๆๆก็ฎไฝฟ็จๆญฃๅ่กจ่พพๅผ(^|shikra_)lpaicp_.*๏ผๅฎๅๆถๅน้ ็กฌไปถ็ฎๆ ๏ผSHIKRA_LPAICP_TEST๏ผๅไฝฟ็จ Zephyr-SDK GCC ็ QEMU ไปฟ็ๅไฝใๅฐ TFLM ็นๅฎไบ SDLLVM ็ libc++ ้ ็ฝฎๆทปๅ ๅฐshikra_lpaicp.confไผ็ ดๅๅบไบ GCC ็ QEMU ๆๅปบใ่ๅดๆด็ช็ๆญฃๅ่กจ่พพๅผshikra_lpaicp_.*ไป ๅน้ ็กฌไปถ็ฎๆ ใ
10.2.5. ็ฌฌ 4 ้จๅ โ ๅๅปบๆจ็ๆจกๅ
10.2.5.1. ๆญฅ้ชค 1 โ ็ๆ src/model_data.cpp ๅ src/input_data.cpp
้ฆๅ ๅๅปบๆจกๅ็ฎๅฝ๏ผ็ถๅๅฐ็ฌฌ 1 ้ถๆฎต็ๆ็ๆจกๅๅ่พๅ ฅๆไปถ่ฝฌๆขไธบ C ๅญ่ๆฐ็ปใ่ฏทๅจๅ ๅซ็ฌฌ 1 ้ถๆฎตๆบๆไปถ็็ฎๅฝไธญ่ฟ่ก่ฟไบๅฝไปคใ<wasp_proc> ๆฟๆขไธบๆจ็ wasp_proc MCU ไปฃ็ ๅบ่ทฏๅพใ
็ๆ็ๆไปถๅฆไธๆ็คบ๏ผ
ๆจกๅๆฐ็ปไธ็alignas(8)๏ผ TFLM ็ FlatBuffers ่งฃๆๅจ่ฆๆฑๆจกๅๅญ่ๆฐ็ป่ณๅฐๆ 4 ๅญ่ๅฏน้ฝใๆ ่ฎบ้พๆฅๅจๅฐ่ฏฅ็ฌฆๅทๆพ็ฝฎๅจไฝๅค๏ผalignas(8)้ฝ่ฝไฟ่ฏๆปก่ถณ่ฟไธ่ฆๆฑใ
10.2.5.2. ๆญฅ้ชค 2 โ ๅๅปบ inc/tflite_infer.h
ๆไปถ๏ผmodules/hal/qcom/core/tflite_infer/inc/tflite_infer.h๏ผๆฐๆไปถ๏ผใ
10.2.5.2.1. ่ฐๆด TFLI_ARENA_KB
TFLI_ARENA_KB ่ฎพ็ฝฎๅผ ้ arena ็ๅคงๅฐ โ ่ฟๆฏ TFLM ็จไบ่พๅ
ฅ/่พๅบๅผ ้ใๅฑ้ดไธญ้ดๆฟๆดป็ผๅฒๅบๅๅ
ถๅ
้จๅ้
ๅจๅ
ๆฐๆฎ็่ฟ็ปญๅ
ๅญๅใๅฎๅจ tflite_infer_run() ๅผๅงๆถ้่ฟ k_malloc ไป็ณป็ปๅ ไธญๅ้
ใ
ๅๅผไธๅฝๆถไผๅบ็ฐ็้ฎ้ข๏ผ
่ฟไธค็งๆ
้้ฝไผๅฏผ่ด
tflite_infer_run() ๆๅ่ฟๅ โ g_tfli_batches ไฟๆไธบ 0๏ผๆๆๅปถ่ฟๅ
จๅฑๅ้ไฟๆๅ
ถๅๅงๅผใ
ๅฆไฝ็กฎๅฎๅ้็ๅผ โ ไฝฟ็จ g_tfli_arena_used ่ฟ่กๆต้๏ผ
- ๅฐ
TFLI_ARENA_KB่ฎพ็ฝฎไธบไธไธชๅ ่ฃ็ๅๅงๅผ๏ผไพๅฆ32๏ผโ ่ถณๅคๅคงไปฅไฟ่ฏAllocateTensors()ๆๅใ - ๆๅปบใ็งๅใๅฏๅจ๏ผๅนถๅจ T32 ไธญ่ฟ่ก
read_tflite_infer.cmmใ - ็กฎ่ฎค
g_tfli_status == 0ไธg_tfli_batches >= 1ใ - ไป T32 Var.View ็ชๅฃ่ฏปๅ
g_tfli_arena_usedโ ่ฟๆฏ TFLM ๆ้็็กฎๅๅญ่ๆฐใ - ่ฎก็ฎๆๅฐๅฎๅ จๅผๅนถๆดๆฐๅคดๆไปถ๏ผ
- ้ๆฐๆๅปบๅนถ้ๆฐ็งๅใ้ช่ฏ
g_tfli_arena_usedไปๅฐไบg_tfli_arena_sizeใ
ๅ่ๆจกๅ็้ ็ฝฎๅผ๏ผTFLI_ARENA_KB = 4๏ผ4,096 ๅญ่๏ผใ่ฟๆฏๅ่ไปฃ็ ๅบไธญcnn1d_minimal_int8.tfliteๆไฝฟ็จ็ๅผใๆๅ่ฟ่กๅ๏ผ่ฏทๅจ็ฎๆ ่ฎพๅคไธๆต้g_tfli_arena_used๏ผไปฅ็กฎ่ฎคๆจ็ๆจกๅ็ไฝฟ็จๆ ๅตใ
TFLI_ARENA_KB ๅฏน RAM ็ๅฝฑๅ๏ผ
arena ๅจ่ฟ่กๆถไป็ณป็ปๅ ไธญๅ้
โ ๅฎไธไผ็ดๆฅๅขๅ ้ๆ้ๅๅคงๅฐใไฝๆฏ๏ผๅ ็ๅๅค็ผๅฒๅบ๏ผkheap_buf__system_heap๏ผๆฏไธไธช้ๆ้พๆฅๆฎต๏ผๅ
ถๅคงๅฐ็ฑ CONFIG_HEAP_MEM_POOL_SIZE ๅณๅฎ๏ผๅจ shikra_lpaicp.conf ไธญ่ฎพ็ฝฎไธบ 32768๏ผใไป
ๅๅฐ TFLI_ARENA_KB ๅนถไธไผๅๅฐ้ๆ RAMใ่ฅ่ฆๅๆถ้ๆ RAM๏ผ่ฟ้็ธๅบ้ไฝ CONFIG_HEAP_MEM_POOL_SIZE โ ็กฎไฟๆฐ็ๅคงๅฐ่ฝๅค่ฆ็ TFLI_ARENA_KB * 1024 + 16 ไปฅๅๅ
ถไปๆๆ k_malloc ่ฐ็จๆน็้ๆฑใ
10.2.5.3. ๆญฅ้ชค 3 โ ๅๅปบ CMakeLists.txt
ๆไปถ๏ผmodules/hal/qcom/core/tflite_infer/CMakeLists.txt๏ผๆฐๆไปถ๏ผใไปฅ CONFIG_TENSORFLOW_LITE_MICRO ไธบๆกไปถใ
10.2.5.4. ๆญฅ้ชค 4 โ ๅๅปบ src/tflite_infer.cc
ๆไปถ๏ผmodules/hal/qcom/core/tflite_infer/src/tflite_infer.cc๏ผๆฐๆไปถ๏ผใๆฏไธชๆนๆฌก่ฟ่ก TFLI_ITERS ๆฌก่ฎกๆถ็ Invoke() ่ฐ็จ๏ผๅจไธๆฌก้ข็ญไนๅ๏ผ๏ผ็ถๅๅฐๆฏๆนๆฌกไปฅๅพฎ็งใQTMR tick ๅ CPU ๅจๆ่กจ็คบ็ๆๅฐ/ๅนณๅ/ๆๅคงๅปถ่ฟๅๅธๅฐ g_tfli_* volatile ๅ
จๅฑๅ้ไธญใ
ๅ ณไบ__attribute__((retain))็่ฏดๆ๏ผg_tfli_arena_sizeๅg_tfli_itersไป ๅจๅๅงๅๆถๅๅ ฅ๏ผๅบไปถไปฃ็ ไปไธ่ฏปๅๅฎไปฌใๅฆๆๆฒกๆ__attribute__((retain))๏ผๅณไฝฟๅฎไปฌๆฏvolatile๏ผ้พๆฅๅจ็--gc-sections่ฟ็จไนไผๆๆ ๅฃฐๆฏๅฐไธขๅผๅฎไปฌ็ ELF ๆฎต โvolatileๅฏ้ฒๆญข็ผ่ฏๅจๅฐๅ ถไผๅๆ๏ผไฝๆ ๆณ้ฒๆญข้พๆฅๅจ GCใretainๅฑๆงไผๅฐ่ฏฅๆฎตๆ ่ฎฐไธบๅง็ปๅญๆดป๏ผไป่็กฎไฟ่ฟไบ็ฌฆๅทๅฏน T32 ไฟๆๅฏ่งใ
10.2.6. ็ฌฌ 5 ้จๅ โ ้ๆๅฐๅบไปถๆๅปบไธญ
10.2.6.1. ๆญฅ้ชค 1 โ ๅฐ tflite_infer_run() ้ๆๅฐ main.c ไธญ
ๆไปถ๏ผmodules/hal/qcom/core/main/src/main.c
ๆพ็ฝฎไฝ็ฝฎ๏ผtflite_infer_run()ๆพๅจCONFIG_QC_CLK_READYไปฃ็ ๅไนๅใๅฆๆ่ฏฅไปฃ็ ๅไธๅญๅจ๏ผๅๅฐๅ ถ็ดๆฅๆพๅจๅๅง็LOG_INF/printk่กไนๅ๏ผๆๆ็ธๅใ
10.2.6.2. ๆญฅ้ชค 2 โ ๅจ CMake ไธญๆณจๅ่ฏฅๆจกๅ
ๆไปถ๏ผmodules/hal/qcom/core/config/CMakeLists.txt๏ผๅทฒๆๆไปถ โ ๅจ add_subdirectory_ifdef ไปฃ็ ๅๆซๅฐพๆทปๅ ไธ่ก๏ผ๏ผ
add_subdirectory_ifdef ่กไนๅ๏ผ
10.2.7. RAM ่ฏดๆ
ๅจๆทปๅ TFLM ไนๅ๏ผShikra LPAICP ๅบไปถๅคง็บฆๆ 40 KB ็็ฉบ้ฒ RAMใTFLM ็้ๆไปฃ็ ๅ ็จ๏ผ3 ไธช็ฎๅญๅญ้็บฆ 25 KB๏ผใๆจกๅๆฐๆฎ๏ผ็บฆ 2 KB๏ผไปฅๅๅ ๅ้ ๅฏ่ฝไผไฝฟ้ๅๆฅ่ฟ 3 MB ็ไธ้ใ ๅฆๆๆๅปบๅคฑ่ดฅๅนถๅบ็ฐ๏ผzephyr/kernel/config/config.yml ไธญๆณจ้ๆ log.conf๏ผ
log.conf ไผๅฏ็จ Zephyr ็ๅปถ่ฟๆฅๅฟๅญ็ณป็ป๏ผไธไธช 16 KB ็็ฏๅฝข็ผๅฒๅบไปฅๅไธไธชๅ
ทๆ 4 KB ๆ ็ไธ็จๅๅฐ็บฟ็จ๏ผๅ
ฑๅ ็จ็บฆ 20 KB ้ๆ RAMใ็ฑไบๆญคๅบไปถไฝฟ็จ T32 RAM ๆงๅถๅฐ่ฟ่ก่พๅบ๏ผๆ UART๏ผ๏ผๅปถ่ฟๆฅๅฟ็บฟ็จๆฒกๆ่พๅบ่ทฏๅพใๅฐๅ
ถๆณจ้ๆๅฏๅๆถ็บฆ 20 KB๏ผๅๆถ shikra_lpaicp.conf ไธญ็ CONFIG_LOG_MODE_MINIMAL=y ไปไฟๆ็ๆใ
10.2.8. Kconfig ๆ ๅฟๅ่
ไธบ TFLM ้ๆ่ๆทปๅ ๆไฟฎๆน็ๆๆ Kconfig ็ฌฆๅท๏ผ
ๆจ็ๆกๆถๅๆฐ๏ผ
TFLI_ARENA_KBใTFLI_ITERSใTFLI_BATCH_SLEEP_MS๏ผๆฏ inc/tflite_infer.h ไธญ็ #define ๅธธ้ใ็ดๆฅ็ผ่พ่ฏฅๆไปถๅณๅฏ่ฟ่ก่ฐๆด๏ผๆ ้้ๆฐ็ผ่ฏๅ
ถไปไปปไฝๆไปถใๆๅ
ณ arena ๅคงๅฐ็กฎๅฎๆญฅ้ชค๏ผ่ฏทๅ้
็ฌฌ 2.5.2.1 ่ใ
