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 からでもかまいません スタッドレスタイヤ ダンロップ ウインターマックス01 WM01 185/65R15 88Q & ライツレー ゼファイス エックス タイヤホイール4本セット 185/65-15 DUNLOP WINTER MAXX 01 WM01 NITTO ニットー NT555 G2 サマータイヤ 215/50R17 MANARAY EUROSPEED BL10 ホイールセット 4本 17インチ 17 X 7 +40 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])


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