栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

为micropython启用文件系统(4)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为micropython启用文件系统(4)

为micropython启用文件系统(4)

文章目录
  • 为micropython启用文件系统(4)
    • 还是不能导入模块?
    • 后记

还是不能导入模块?

中间遇到了各种问题,最后调到这种程度了。经过测试,都已经可以通过open()函数读SD卡上的readme.txt文件了,为啥还是不能import hello.py ?

网上搜搜python 的“OSError:2”,对应是“没有这样的文件或目录”,但是直接在repl打开SD卡中同hello.py同目录下的readme.txt是OK的啊。而且通过打桩分析发现,在执行import hello时,也执行了SD卡的读操作,并且也读了hello.py文件

再在micropython的源码里找,看是谁打印了“OSError:2”,啥也没找到。

这个时候又注意到main.c中的mp_lexer_new_from_file()函数,从字面上看,这个函数就是从文件中读取内容的。下个printf打个桩试试。果不其然,在import时调用了这个函数。


还好,不是fatfs和sd卡的问题,这里的OSError是代码里的mp_raise_OSError(MP_ENOENT)抛出来的。这个函数也是OSError,有门路。

再全局搜一下,看一个有效的mp_lexer_new_from_file()是怎么实现的。

D:_git_reposmicropython_sumicropython-1.16pylexer.c:
735 #if MICROPY_READER_POSIX || MICROPY_READER_VFS
736
737: mp_lexer_t *mp_lexer_new_from_file(const char *filename) {
738 mp_reader_t reader;
739 mp_reader_new_file(&reader, filename);

所有的板级port的实现都是返回空。但是py/lexer.c 中竟然有标准实现,需要要打开“MICROPY_READER_VFS”宏而已。赶紧关掉假的mp_lexer_new_from_file(),配置对应的宏开关,用真的实现替换上。

在lexer.c文件中,所有代码都要求打开MICROPY_ENABLE_COMPILER。我原来的移植没加上,现在在 ports/mm32/mportconfig.h 文件中加上:

#define MICROPY_READER_VFS             (1) 
#define MICROPY_ENABLE_COMPILER        (1) 

问题解决了。

后记

经过各种查阅资料、代码和尝试,好不容易调通了,急急忙忙出差到深圳支持展会和拜访客户。临回上海的晚上,好不容易静下心来复盘,打算记录开发过程的时候,有一些过程已经记不住了,比较可惜。后面会再移植到别的芯片上,到时再参考这里的思路,从零开始再实践一次。以后做成标准操作流程,就别想太多了。只有等到以后有空分析代码时,才会看到内部的原理。只能说,这次调试各种尝试,也是被逼急了一通找,再加上有点运道,走的弯路很少。顺藤摸瓜追代码的过程非常有价值,不断接近真相的感觉很好,这也是我最想记录的过程。

接下来的工作,就剩下usb的部分了。micropython内部集成tinyusb,所以做法跟fatfs类似。但是我要实现通过usb msd访问sd卡,这样就不需要每次都把SD卡拔下来,插到读卡器上拖拽文件了。这个功能也简单,甚至同micropython也没啥关系,全部是硬件操作,准备一个初始化函数和一个中断服务程序就好。需要考虑的是,看能不能把cdc uart也搞起来。。。

  • END
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/280248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号