$30 off During Our Annual Pro Sale. View Details »

マイコンで動く .NET 技術談義! nanoFramework

マイコンで動く .NET 技術談義! nanoFramework

2023/2/18 【オンライン】.NET Micro Frameworkはどうなった?マイコンで動く.NET技術談義!
https://algyan.connpass.com/event/273901/

MATSUOKA Takashi

February 18, 2023
Tweet

More Decks by MATSUOKA Takashi

Other Decks in Technology

Transcript

  1. .NET Micro Frameworkはどうなった?
    マイコンで動く.NET技術談義!
    - nanoFramework -
    MATSUOKA Takashi
    @matsujirushi12

    View Slide

  2. MATSUOKA Takashi
    @matsujirushi12
    2017~ MVP for Windows Development
    2020~ for Microsoft Azure
    2022~ for Internet of Things
    「e」3つ
    1991年大手メーカーに入社し、工場の自動化
    や情報システムの開発、運用に従事。2017年
    8月、Seeed株式会社設立時に転職。組み込
    みデバイスの開発環境整備やライブラリ開発
    を担当。
    去年、電子工作の書籍を出しました。買ってちょ

    View Slide

  3. マイコンで動く.NET開発・実行環境
    ◦ 源流は.NET Micro Framework
    ◦ 開発 … パソコン + Visual Studio/VSCode + .NET C#
    ◦ 実行 … マイコン (Flash <256KB, RAM <64KB)
    ライブラリは限定的
    ◦ ベースクラスライブラリのサブセット
    ◦ .NET IoTライブラリ
    オープンソース
    ◦ コア部分の最新はv1.7.4.0(2022/3/1)
    ◦ GitHub … https://github.com/nanoframework
    ◦ Discord … https://discord.gg/gCyBu8T
    ◦ リファレンスターゲット
    ◦ OrgPal PalTree
    ◦ STMicroelectronics NUCLEO64_F091RC, STM32F429I_DISCOVERY, STM32F769I_DISCOVERY
    ◦ Espressif ESP32, ESP32-S2, ESP32-C3
    ◦ NXP i.MX_RT1060_EVK
    ◦ TI CC1352R1_LAUNCHXL, CC3220SF_LAUNCHXL
    ◦ And more...
    ◦ コミュニティターゲット
    ◦ x15 boards
    https://github.com/nanoframework/nf-Community-Targets

    View Slide

  4. パソコン
    準備~デバッグ実行までの流れ
    Visual Studio
    nanoFramework
    Extension
    マイコン
    nanoCLR
    Application (nF PE)
    nanoBooter
    nanoFirmwareFlasher
    Configuration
    マイコン依存
    UART
    nF PE
    nF PE
    e.g. JTAG, DFU
    nano
    CLR
    C#
    nF PE
    nano
    Booter

    View Slide

  5. デモ
    林 宜憲
    株式会社リンシステムズ

    View Slide

  6. Deep Dive!

    View Slide

  7. CILインタプリタ
    巨大なswitch-case文
    ◦ CLR_RT_Thread::Execute_IL()
    ◦ 約2500行
    ◦ https://github.com/nanoframework/nf-
    interpreter/blob/92ae087d2c2710515009cd5d6a658
    8e341471448/src/CLR/Core/Interpreter.cpp#L982
    いくつかのオペコードは未実装

    View Slide

  8. フラッシュメモリ使用量
    マイコン
    nanoCLR
    Application (nF PE)
    nanoBooter
    Configuration
    nF PE
    nF PE
    1.8MB
    1.9MB 82KB
    174KB
    STMicroelectronics
    NUCLEO-F091RC
    Seeed Studio
    XIAO ESP32C3

    View Slide

  9. nanoCLR cmake-presets
    Seeed Studio
    XIAO ESP32C3
    STMicroelectronics
    NUCLEO-F091RC
    System.IO.FileSystem 〇
    System.Math 〇
    System.Net 〇
    System.IO.Ports 〇 〇
    Windows.Storage 〇
    System.Device.Adc 〇
    System.Device.Gpio 〇 〇
    System.Device.I2c 〇 〇
    System.Device.Pwm 〇 〇
    System.Device.Spi 〇 〇
    System.Device.Wifi 〇
    nanoFramework.ResourceManager 〇 〇
    nanoFramework.System.Collections 〇 〇
    nanoFramework.System.Text 〇 〇
    Hardware.Esp32 〇
    Hardware.Stm32 〇

    View Slide

  10. ファームウェアとライブラリの
    バージョン問題
    マイコン
    nanoCLR
    Application (nF PE)
    String System.String.Substring(int startIndex)
    ◦ https://github.com/nanoframework/CoreLibrary/blob/02509b3
    672275605ec7616040f7d747395dfa02c/nanoFramework.CoreL
    ibrary/System/String.cs#L151
    Library_corlib_native_System_String::Substring___STRING__I4( CL
    R_RT_StackFrame& stack )
    ◦ https://github.com/nanoframework/nf-
    interpreter/blob/main/src/CLR/CorLib/corlib_native_System_St
    ring.cpp#L132
    定義(C++)
    宣言(C#)
    https://github.com/nanoframework/nf-
    interpreter/blob/main/src/CLR/CorLib/corlib_native.cpp#L1480
    checksum
    https://docs.nanoframework.net/content/architecture
    /guide-version-checksums.html

    View Slide

  11. ファームウェアとライブラリの
    バージョン問題
    nanoFramework.CoreLibrary 1.12.0
    ◦ Checksum 0x004CF1CE (mscorlib v100.5.0.17)
    マイコン
    nanoCLR
    nanoFirmwareFlasher

    View Slide

  12. 辛い話
    Generics
    ◦ .NET nanoFramework doesn't support generics. We are actively working on it!
    ◦ https://github.com/nanoframework/Home/issues/782
    async/await
    ◦ 不明
    LINQ
    ◦ 不明

    View Slide