17インチカローラ ルミオン全グレードWEDS ウェッズスポーツ SA-20R ブルーライトクローム 7.5Jx17Bluearth エース AE50 215/45R17

ここでは MicroPython でインラインアセンブラを書く方法を学びます。

注記: これは上級者向けのチュートリアルです。マイクロコントローラとアセンブル言語について既に知っている方を対象としています。

MicroPython にはインラインアセンブラがあります。アセンブリ言語のルーチンを Python 関数として書いて、普通の Python 関数と同様に呼び出せます。

7.5Jx17Bluearth SA-20R エース ウェッズスポーツ 17インチカローラ ルミオン全グレードWEDS ウェッズスポーツ 215/45R17 ブルーライトクローム ブルーライトクローム AE50

インラインアセンブラ関数は特殊な関数デコレータで示します。最も単純な例から始めてみましょう。

@micropython.asm_thumb
def fun():
 movw(r0, 42)


この入力はスクリプトからでも REPL からでもかまいません TOYO WINTER TRANPATH TX ウィンタートランパス 2018年製 スタッドレス スタッドレスタイヤ 225/50R18 RAYS GRAM LIGHTS 57FXX CJ SPEC 18 X 8 +38 5穴 114.3 ブリヂストン PLAYZ プレイズ PX サマータイヤ 215/50R17 RAYS HOMURA A5S 17 X 7.5 +42 5穴 114.3。この関数は引数をとらず、数値 42 を返します。 r0 はレジスタで、関数が返るときのこのレジスタの値が戻り値になります。MicroPython は、常に r0 を整数として解釈し、それを呼び出し元の整数オブジェクトに変換します。

print(fun()) を実行すると、42 が印字されるでしょう。

10.2. ペリフェラルへのアクセス

もう少し複雑な例として、LED を点灯してみましょう:

@micropython.asm_thumb
def led_on():
 movwt(r0, stm.GPIOA)
 movw(r1, 1 << 13)
 strh(r1, [r0, stm.GPIO_BSRRL])


このコードでは新しい概念をいくつか使います: