python解释器实现及其嵌入式应用:认识Micro Python

micropython是Damien George发明的运行在MCU之上的python,项目主页为
https://github.com/micropython/micropython

本文对micropython做了简单介绍,然后在Linux平台下运行测试。

一、Micro Python语法特点:

完整支持Python 3.4 语法
1. 完整的Python词法分析器, 解析器,编译器,虚拟机和运行时。
2. 包含命令行接口,可离线运行。
3. Python 字节码由内置虚拟机编译运行.
4. 有效的内部存储算法,能带来高效的内存利用率。整数变量存储在内存堆中,而不是栈中。
5. 使用Python decorators特性,函数可以被编译成原生机器码,虽然这一特性会带来大约2倍的内存消耗,但也使python有更快的执行速度。
6. 函数编译可设置使用底层整数代替python内建对象作为数字使用。有些代码的运行效率可以媲美c的效率,并且可以被python直接调用,适合做时间紧迫性,运算复杂度高的应用。
7. 通过内联汇编功能,应用可以完全接入底层运行时,内联汇编器也可以像普通的python函数一样调用。
8. 基于简单和快速标记的内存垃圾回收算法,运行周期少于4ms,许多函数都可以避免使用栈内存段,因此也不需要垃圾回收功能。

二、代码结构:

Major components in this repository:

  • py/ – the core Python implementation, including compiler, runtime, and core library.
  • unix/ – a version of MicroPython that runs on Unix.
  • stmhal/ – a version of MicroPython that runs on the PyBoard and similar STM32 boards (using ST’s Cube HAL drivers).
  • minimal/ – a minimal MicroPython port. Start with this if you want to port MicroPython to another microcontroller.
  • tests/ – test framework and test scripts.
  • docs/ – user documentation in Sphinx reStructuredText format.

Additional components:

  • bare-arm/ – a bare minimum version of MicroPython for ARM MCUs. Used mostly to control code size.
  • teensy/ – a version of MicroPython that runs on the Teensy 3.1 (preliminary but functional).
  • pic16bit/ – a version of MicroPython for 16-bit PIC microcontrollers.
  • cc3200/ – a version of MicroPython that runs on the CC3200 from TI.
  • esp8266/ – an experimental port for ESP8266 WiFi modules.
  • tools/ – various tools, including the pyboard.py module.
  • examples/ – a few example Python scripts.
  • mpy_cross/ – cross compiler for micropython

三、硬件平台

讯为itop exynos4412核心板(SCP)。

3.1 核心板工艺

工艺 八层盲埋孔设计,沉金工艺

3.2 基本参数
CPU三星Exynos4412,四核Cortex-A9,主频为1.6GHz
内存2GB 双通道 DDR3
存储16GB [独家支持]
PMIC选用三星自家电源管理芯片,高效节能!具有9路DC/DC和28路LDO输出电源 经千百万部手机实践检验,与三星4412处理器匹配最佳
USB HOST板载USB3503,引出高性能HSIC,实现3路USB HOST输出
扩展引出脚多达320个,满足用户各类扩展需求
3.3 运行温度
温度在-20℃到70℃范围的高低温运行测试中运行良好
3.4 其它
视频编解码支持MPEG-4/MPEG2、H.264/H263、VC-1、DivX的视频编解码1080p@30fps
图形加速支持2D,3D图形加速ARM Mali-400 MP Core
存储支持SD/MMC/SDIO接口存储卡,最高支持32GB
硬件编解码支持JPEG硬件编解码,最大支持8192×8192分辨率
电磁屏蔽罩接口预留电磁屏蔽罩接口以及四个加固螺孔
供电支持5V电压供电
特点该核心板已经把4412处理器最难实现部分全部承担,可帮助用户轻松实现高端四核产品级设计!
3.5 应用范围
应用范围家居控制平台、智能家居平台、健身器械操作平台、美容器械操作平台、医疗器械操作平台、智能仪表、仪器、触摸屏控制器、导航设备、车载DVD;智能广告控制终端、排队系统、广告机、楼宇对机、分机以及管理机等

四、在Linux平台上编译使用

进入minimal/,执行

$ make
$ make run
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
stty raw opost -echo
build/firmware.elf
MicroPython v1.8.6-156-gadf3cb5-dirty on 2016-12-23; minimal with exynos4412
Type "help()" for more information.
>>> 

五、交叉编译

新建项目myproject,执行

$ make CROSS=1
/home/camus/arm-2014.05/arm-none-linux-gnueabi/libc/usr/include/gnu/stubs.h:10:29: fatal error: gnu/stubs-hard.h: No such file or directory
 # include <gnu/stubs-hard.h>

看这个文件名,是浮点计算的问题,估计是编译选项不对。参照uboot的编译开关: http://blog.csdn.net/abcamus/article/details/54023051

最终Makefile中添加

LIB_PATH = -L /home/camus/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/ -lgcc
CFLAGS_CORTEX_V7 = -mthumb -march=armv7-a -mabi=aapcs-linux -msoft-float
CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 $(CFLAGS_CORTEX_V7) $(COPT)

然后在main.c中添加了raise函数(参照uboot)

int raise(int signum)
{
    printf("raise: Signal # %d caught\n", signum);
    return 0;
}

再执行

$ make CROSS=1

顺利生成bin文件,接着就可以上板子测试了。

六、OSX上编译

在OSX环境下进到unix目录直接编译通不过,暂时修改mpconfigport.mk文件,把以下几行宏赋值为0:

# btree module using Berkeley DB 1.xx
MICROPY_PY_BTREE = 0
# ussl module requires axtls
MICROPY_PY_USSL = 0
MICROPY_SSL_AXTLS = 0
MICROPY_SSL_MBEDTLS = 0

这是由于Apple公司弃用了openssl加密库导致的。可以参考下面这段homebrew说明解决

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include
For pkg-config to find this software you may need to set:
    PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig

然后make就在unix目录下生成了micropython文件,执行

屏幕快照 2017-03-13 22.53.32.png

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶玄青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值