查看: 2576|回复: 1

[其他] MicroPython 如何嵌入汇编

[复制链接]
  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-9-6 10:58:39 | 显示全部楼层 |阅读模式
    分享到:
    MicroPython 包涵可内联的汇编,允许用户使用汇编语言作为 Python 的子程序,且你可以像正常使用函数般使用它们。

    1、返回值

    内联汇编函数用特定的函数装饰器标示。我们从最简单的例子下手:
    1. @micropython.asm_thumb
    2.     def fun():
    3.     movw(r0, 42)
    复制代码
    你可以在脚本或是解释器里边使用该函数。该函数没有任何参数且返回数值42 。r0 是一个寄存器,其中的数值在函数返回值返回时被更改。MicroPython 一直将 r0视为一个整数并将其作为整数变量供使用者调用。
    如果使用了命令 print(fun( )) 将能看到数值42被打印出来。

    2、汇编语言基础

    稍微复杂一些些,我们尝试点亮一盏灯:
    1. @micropython.asm_thumb
    2.     def led_on():
    3.     movwt(r0, stm.GPIOA)
    4.     movw(r1, 1 << 13)
    5.     strh(r1, [r0, stm.GPIO_BSRRL])
    复制代码
    上述代码使用了一些新的概念
    游客,如果您要查看本帖隐藏内容请回复
    3、接受参数

    内联汇编语言最多可以接收四个参数。一旦被使用,必须为 r0,r1,r2,r3 的寄存器或其里边的调用内容。以下是使用了这些参数的函数:
    1. @micropython.asm_thumb
    2.     def asm_add(r0, r1):
    3.     add(r0, r0, r1)
    复制代码
    这里使用了 r0=r0+r1 的计算。由于将结果放入了 r0 中,故其为返回结果。尝试运行asm(1,2),将能得到 3 的返回值。

    4、循环

    我们可以分配 label(my_label)的标号,然后使用 b(my_label) 跳转到该分支,或者用 bgt(my_lable)进行有条件的跳转。下面例程使绿色的 LED 灯闪烁,闪烁次数存放在 r0 里边
    1. @micropython.asm_thumbdef flash_led(r0):
    2.     # get the GPIOA address in r1
    3.     movwt(r1, stm.GPIOA)
    4.     # get the bit mask for PA14 (the pin LED #2 is on)
    5.     movw(r2, 1 << 14)
    6.     b(loop_entry)
    7.     label(loop1)
    8.     # turn LED on
    9.     strh(r2, [r1, stm.GPIO_BSRRL])
    10.     # delay for a bit
    11.     movwt(r4, 5599900)
    12.     label(delay_on)
    13.     sub(r4, r4, 1)
    14.     cmp(r4, 0)
    15.     bgt(delay_on)
    16.     # turn LED off
    17.     strh(r2, [r1, stm.GPIO_BSRRH])
    18.     # delay for a bit
    19.     movwt(r4, 5599900)
    20.     label(delay_off)
    21.     sub(r4, r4, 1)
    22.     cmp(r4, 0)
    23.     bgt(delay_off)
    24.     # loop r0 times
    25.     sub(r0, r0, 1)
    26.     label(loop_entry)
    27.     cmp(r0, 0)
    28.     bgt(loop1)
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-14 03:09
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2018-3-14 20:45:59 | 显示全部楼层
    如果您要查看本帖隐藏内容请回复
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-27 03:44 , Processed in 0.132921 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.