Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

マイコンで動く.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

Slide 4

Slide 4 text

パソコン 準備~デバッグ実行までの流れ 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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Deep Dive!

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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 〇

Slide 10

Slide 10 text

ファームウェアとライブラリの バージョン問題 マイコン 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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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