micropython c语言,python micropython

  micropython c语言,python micropython

  1.MicroPython 1.1简介什么是微Python?它由两部分组成;00-59,000,010-59,000,合起来字面意思就是微型蟒蛇。实际上,MicroPython是嵌入式系统的Python。Python是一种脚本语言,非常好用。它的语法简洁,使用简单,功能强大,易于扩展。有许多图书馆可供使用。网络功能和计算功能也很强。方便与其他语言一起使用。完全开源,受到越来越多开发者的青睐。但由于硬件成本、运行性能、开发习惯等原因。在一般嵌入式系统中应用不多。于是MicroPython应运而生。

  1.2微Python的历史由英国剑桥大学教授Micro代表微小(jkdxt)发明。随着半导体技术和制造技术的快速发展,芯片的更新换代速度越来越快。芯片的功能、内存容量、资源都在不断增加,但成本却在不断降低。特别是随着像st公司、乐心公司这样的高性价比芯片和解决方案的应用越来越多,使得Python在低端嵌入式系统中的应用成为可能。

  1.3 MicroPython的特点1.3 MicroPython并没有带来一种全新的编程语言;

  2)为嵌入式开发带来了全新的编程方法和思维,让大家可以专注于Python是编程语言

  3)MicroPython的特点是简单、可移植、易维护。

  2.基础知识2.1 MicroPython的系统结构一个MicroPython系统的典型结构如图所示。由三部分组成:Damien Georage(系统底层)硬件,应用层的开发微控制器

  图2.1微Python系统的典型结构

  2.2微Python的REPLREPL是Read-Evaluate-Print Loop的缩写。MagicBox项目屏蔽了REPL交互编程功能,采用文本编程。

  3.硬件平台简介3.1基础硬件平台简介MicroPython可以运行在多种嵌入式硬件平台上。目前有STM32、ESP8266/ESP32、CC3200、dsPIC33、MK20DX256、nRF51/nRF52、MSP432等多个平台。MagicBox是基于STM32F4发现开发板开发的。

  图3.1 STM32F4发现开发板

  4.框架介绍。官方的micropython代码托管在github上。

  4.1添加python有两种方式:4.1.1在官方python接口上直接使用python的语法编写自己的python脚本,实现相应的功能优势:不需要自己编译micropython的代码。

  缺点:扩展性有限,一些底层功能无法简单使用python接口完成。

  4.1.2基于micropython的代码,用C语言扩展micropython的接口的优点:大大增加可扩展性,满足开发需求。

  缺点:需要修改micropython的代码。

  4.2用C添加接口4.2.1在ports/stm32文件夹下新建一个文件test.c,打开test.c,输入以下内容,实现一个简单的模块添加。

  测试由# include stdint . h # include stdio . h # include py/obj . h # include py/runtime . h //定义的全局字典,我们添加类型和函数后,会添加静态常量MP _ rom _ map _ elem _ ttest _ globals _ table[]={ { MP _ obj _ new _ qstr(MP _ qstr _ _ name _ _),MP _ rom _ qstr (MP _ qstr _ test)}。//这可以认为是将mp_module_test.globals中的test_globals_table注册到static MP _ define _ const _ dict(MP _ module _ test _ globals,test _ globals _ table);//这是定义一个模块类型constmp _ obj _ module _ t MP _ module _ test={。base={mp _ type _ module},globals=(MP _ obj _ dict _ t *)MP _ module _ test _ globals,};

  4.2.2可以看出test.c有三个主要部分,是添加一个模块所必需的。其他可以正式打开的模块代码遵循这样的模型MP _ ROM _ MAP _ ELM _ TTest _ GLOBALS _ TABLE[]

  MP _ DEFINE _ CONST _ DICT(MP _ module _ test _ globals,test_globals_table)

  mp_obj_module_t

  4.2.3将test.c添加到Makefile。打开Makefile并找到以下脚本。按照格式添加test.c即可:

  SRC _ C=\ main。C \ UART。c \………测试。C \ $(SRC _ MOD)

  4.2.4 定义的模块注册到微丝体中去,这个是在mpconfigport.h文件中修改找到微型端口内置模块定义的地方按照格式添加我们定义的组件

  外部构造结构_ MP _ obj _模块_ t MP _模块_机器;extern const struct _ MP _ obj _ module _ t MP _ module _ network;extern const struct _ MP _ obj _ module _ t MP _ module _ one wire;外部构造struct _ MP _ obj _ module _ t MP _ module _ test//这个是我们添加的,需要声明一下应用外部的struct # define MICROPY _ PORT _ BUILTIN _ MODULES \ { MP _ OBJ _新_QSTR(MP_QSTR_esp),(mp_obj_t)esp_module }、\ { MP _ OBJ _新_QSTR(MP_QSTR_esp32),(MP _ obj _ t)esp32 _模块}、\ { MP _ OBJ _新_ QSTR(MP _ QSTR _实用时间),(mp_obj_t)实用时间_模块}、\ { MP _ OBJ _新_QSTR(MP_QSTR_uos),(mp_obj_t)uos_module这个是我们添加的试验

  5、程序流程以魔盒程序启动(基于STM32F4DISC)为例。 5.1 复位后,进入到复位向量:micropython/ports/STM 32/reset处理程序。s中。语法统一cpu cortex-m4 .拇指section .text.Reset_Handler .全局重置处理程序。键入重置处理程序,% functionReset重置处理程序:/*保存第一个参数以传递给stm32_main */mov r4,r0 /*加载堆栈指针*/ldr sp,=_estack /*初始化数据段*/ldr r1,=_sidata ldr r2,=_sdata ldr r3,=_ edata b . data _ copy _ entry。data _ copy _ loop:ldr r0,[r1],#4 /*应四对齐以尽可能快*/str r0,[r2]data_copy_loop /*将BritishStandardSpecification(s)英国标准(技术)规格部分清零*/movs r0,#0 ldr r1,=_sbss ldr r2,=_ ebss b . BSS _ Zero _ entry。BSS _ Zero _ loop:str r0,[r1],#4 /*应四对齐以尽可能快*/。bss_zero_entry: cmp r1,r2 bcc .bss_zero_loop /*初始化系统并跳转到主代码*/bl SystemInit mov r0,r4 b stm32_main .大小重置处理程序,-重置处理程序MicroPython固件的函数入口是用户程序

  5.2 micropython/ports/STM 32/main。丙:1)开启指令、数据等的躲藏

  2)中断、时钟配置

  3)微丝点的线程配置

  4)发光二极管、开关、机器库、RTC、UART0、I2C0、SDCard、LWIP(如果有的话)、GC(垃圾回收)、定时

  器、CAN、USB(默认枚举成氯乙烯大学盘)

  5)运行内部闪光文件系统或者外置南达科他州卡文件系统中的C

  6)运行内部闪光文件系统或者外置南达科他州卡文件系统中的stm32_main

  7)当boot.py和main.py运行结束后,进入到取代模式。在该模式下,我们在个人电脑中可以通过串口与微丝体

  实现命令行的交互

  5.3启动。巴拉圭的创建及启动(其他py/txt/inf/ini等文件创建方式类似)boot.py内容以字符串保存在fresh_boot_py[]里# if MICROPY _ HW _ ENABLE _ STORAGE static char fresh _ boot _ py[]= # boot。py-在启动时运行\ r \ n #可以运行任意Python,但最好保持最小\ r \ n \ r \ n import machine \ r \ n import pyb \ r \ n import _ thread \ r \ n import MB \ r \ n def thread _ entry():\ r \ n while True:\ r \ n RES=MB .readch 375 data()\ r \ n if not RES:\ r \ n _ thread。exit()\ r \ n pyb .通用异步收发器(2).init(115200,bits=8,parity=None,stop=1)\ r \ n _ thread。start _ new _ thread(thread _ entry,())\r\n#pyb.main(main.py) #在此之后运行的主脚本\ r \ n # if MICROPY _ HW _ ENABLE _ USB # pyb。USB _ mode( VCP MSC )#充当串行和存储设备\r\n#pyb.usb_mode(VCP HID) #充当串行设备5.3.2 在虚拟U盘里创建靴子。py RES=f _ stat(VFS _ fat-fatfs,fresh_boot_py,fno);if (res!=FR_OK) { //不存在,创建新鲜的文件f_open(vfs_fat-fatfs,fp,fresh_boot_py,FA _ WRITE FA _ CREATE _ ALWAYS);f_write(fp,fresh_boot_py,sizeof(fresh_boot_py) - 1 /*不算空终止符*/,n);f _ close(FP);} 5.3.3 在micropython/ports/stm32/main.c中启动靴子。py const char * boot _ py= System/boot。py ;MP _ import _ stat _ t stat=MP _ import _ stat(boot _ py);if(STAT==MP _ IMPORT _ STAT _ FILE){ int ret=py exec _ FILE(boot _ py);PrintInfo(pyexec引导文件结果:%d ,ret);if(ret py exec _ FORCED _ EXIT){ goto soft _ reset _ EXIT;}如果(!ret){ flash _ error(4);}}

  参考资料1) 《MicroPython入门指南》

  2) 《MicroPython开发环境搭建及移植使用分析》

  3) 《MicroPython补充说明》

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: