内联汇编
是不是有点意外,MicroPython也支持内联汇编,就是在Python代码中可以直接嵌入汇编代码。这在很多语言中都是支持的,比如C、C++、Pascal、Delphi等等,主要的目的是为了性能,在一些函数或内存操作的时候,可以有效的减少指令和指令周期,从而提高性能。但是,获得性能的代价就是牺牲部分可移植性。在一些编译语言中,内嵌的汇编代码使用的就是汇编指令,而在Python或Java这种虚拟机环境中,实际上是经过了封装后的指令。
MicroPython包含一个内联汇编器,支持汇编代码编写的函数,并且可以像调用普通python函数一样去调用它们。下面是具体的一些用法。
返回一个值
MicroPython的内联汇编函数需要一个特殊的函数装饰器micropython.asm_thumb
来装饰:
@micropython.asm_thumb
def fun():
movw(r0, 42)
要快速尝试一下,可以在脚本或REPL
中输入上面的内容。该函数不带参数,返回一个数字42。r0
是一个寄存器,函数返回时该寄存器中的值就是返回的值。 MicroPython将r0
解释为整数,并将其转换为调用者的整数对象。
运行 print(fun())
会看到打印出42。
访问外围设备
下面是一个稍复杂些的示例,打开 LED:
@micropython.asm_thumb
def led_on(