完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
原先一直在ARM架构下编写Cpython,先来说说ARM架构优缺点:
1、系统资源足够,虽然python的性能不怎样,但完全不用担心运行效率,愉快的编写逻辑就可以了 2、有现成的操作系统,所以一些比如联网,维护等工作不用操心 3、硬件成本高,IO不够充足,对硬件底层一些控制力不够好,这也是我想换平台的原因 ESP32这款芯片不多做介绍了,网上资料很多,主要是低功耗,低成本,还自带WIFI和蓝牙,完全符合我项目的要求。 micropython是一个固件(小系统),其语言是Python的精简版,经过优化可在微控制器和受限环境中运行,最初支持的是pyboard这个硬件平台,后来作者把这个固件不断更新,得以支持不同单片机芯片,例如STM32,ESP8266,ESP32等等 连接UART,板子启动看到信息,首先是bootload,ESP-IDF信息,随即进入熟悉的python命令行模式 从cpy移植到mpy很轻松,语言基本不变,mpy支持的基本模块也挺多的,比如json之类,只要重写联网、IO控制这一块代码,这些mpy官方接口文档都有很好的说明,对照用就可以了,社区也有很多案例,这就是开源的好处,我只用了一天就把项目移植好了,用的开发工具是mu-editor,支持文件管理。但是接下的事情让我很痛苦。。。爆内存了 然后分析原因,ESP官方称设计RAM有520K,除去系统需要留给mpy可用的最多100多K了,实际项目运行后空余内存不足20K,但项目有个超大的Dict表用来存储采集的数据,运行到这里内存就不足了,一般python程序员不太会关心硬件内存问题,至于什么heap,stack区的区别,还有如何把常量编译后存储在flash rom上以节省内存,这些也都是我后面把项目改成arduino后才慢慢明白的 又花了一天时间尝试区优化mpy的程序,甚至于在运行时把采集数据直接写入本地文本,都以失败告终,这个项目用UART1这个口采集数据(UART0被系统占用作为调试用了,esp32有3个UART可用)在项目中使用了两组硬件定时器(1个从serial缓存收集数据,一个处理和存数数据),为什么要用machine Timer这个是因为速度快,之前python中直接使用Thread,while是不行的,本身现在mpy硬件都不支持多线程,很容易跑程序跑死。 继续查阅资料,MicroPython官方文档有说明,RAM优化方案 1、使用mpy-cross产生mpy文件 2、把程序编译到固件,都尝试后发现改善不多,所以只能暂时放弃,最近已经把项目移植到了arduino上,在同样的硬件平台,运行良好。 近期发现: 原来ESP32有一款带SPIRAM的(8M,16M…),就是扩展了外部RAM,而且MicroPython官方固件已经支持了SPIRAM的使用,具体型号是:ESP32WROVER 但手上没有这款芯片,等到了以后再做测试吧。 |
|
|
|
只有小组成员才能发言,加入小组>>
3308 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 15:23 , Processed in 1.065452 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号