5529|4

111

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

micropython的USB通讯代码及遇到的问题 [复制链接]

 
本帖最后由 allankliu 于 2016-4-23 06:50 编辑

USB通讯代码

先贡献代码。由于PyBoard缺省通讯口是USB VCP/CDC,所以蛮实用的,不必再转接USB串口IC。但要避免与REPL争夺USB CDC通讯。

在与micropython反复“搏斗”后,总算把USB串口打印代码做成了:
  1. # main.py -- put your code here!
  2. import pyb
  3. import select

  4. def pass_through(usb, uart):
  5.     usb.setinterrupt(-1)
  6.     led = pyb.LED(1)
  7.     i = 0
  8.     while True:
  9.         usb.write(hex(i))
  10.         usb.write(chr(i))
  11.         usb.write('\t')
  12.         i = (i+1)%256
  13.         led.toggle()
  14.         pyb.delay(100)

  15. pass_through(pyb.USB_VCP(), pyb.UART(1, 9600))
复制代码

本例基于官网的pass_through例子修改的。可以以9600bps慢速向USB_VCP循环打印HEX和对应的ASCII字符。在TeraTerm中制表符也可以定位等等,所以以后如果移植curses包就可以构建一个VT100终端。



问题

发现PyBoard不成熟的一面:写入用户代码后重启后,boot.py和main.py会经常性地丢失、重启



写入main.py后,按下硬件复位按键后的现象:

  • boot.py中出现乱码;
  • 频繁性的重置main.py,即使main.py证实是可以运行的。



最离谱的事情就是boot.py内容被修改成乱码了。因为乱码之后micropython无法运行,估计内部文件系统出问题。可以直接把官网上的boot.py贴回去。boot.py实际就一句话:import pyb。



官方文档micropython.pdf中提到一个例子,UART/USB桥接。USB/UART可以互联互通。可以基于此例子更新到通用的代码。


修改了代码后,发现出现了其他网友出现的NameError。推测是缺乏import pyb而导致的错误,但NameError异常未能够在终端完整打印出来。这种现象我之前也发现过,micropython有“暂停”的现象,估计和内部的垃圾回收算法有关。或者直接堆栈或者堆出错了。


Ctrl+D可以软重启系统,正常的话可以直接运行用户代码,并可以截获部分系统抛出的用户带出错信息。但是经常性崩溃。

感想

出于调试的需要,这段代码写的完全是按照C语言风格写的。尤其是usb.write()那里连基本的格式化字符都未使用,无法体现micropython的优越性。

蛮担心大型程序是否能够运行在micropython上。接下来要测试其支持多模块的特性。按理应该可以,因为已经有WiPy等系统支持LoRa和其他通讯模块,不可能是在同一个文件中。就是不知道还回遇到多少坑。




最新回复

汇总在此: 【MicroPython】——by allankliu https://bbs.eeworld.com.cn/forum ... 2739&fromuid=536508  详情 回复 发表于 2016-6-17 11:30
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
文件系统问题基本都是因为没有安全退出磁盘。希望官方后续的版本可以改进这个问题。

点评

多谢回复。我的确没有安全退出的习惯。基本直接按下RESET按键了。 感觉调试便利性上还是不如mbed等传统手段。也可能还没有摸到窍门。按说在UNIX上可以仿真算法,但是一旦真出了Bug,还真不知道如何定位。只有反复  详情 回复 发表于 2016-4-23 06:53
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
dcexpert 发表于 2016-4-22 20:14
文件系统问题基本都是因为没有安全退出磁盘。希望官方后续的版本可以改进这个问题。

多谢回复。我的确没有安全退出的习惯。基本直接按下RESET按键了。

感觉调试便利性上还是不如mbed等传统手段。也可能还没有摸到窍门。按说在UNIX上可以仿真算法,但是一旦真出了Bug,还真不知道如何定位。只有反复地烧写。

点评

基本只能用print在关键位置输出调试信息。好像Linux下的开发者,包括嵌入式的,都不喜欢用仿真器。 我一般是用一个文本编辑器,编辑文件后存盘,然后ctrl+D软复位,然后import。就是不知道这样会不会对flash损耗  详情 回复 发表于 2016-4-23 10:01
 
 
 

回复

1万

帖子

25

TA的资源

版主

4
 
本帖最后由 dcexpert 于 2016-4-23 10:23 编辑
allankliu 发表于 2016-4-23 06:53
多谢回复。我的确没有安全退出的习惯。基本直接按下RESET按键了。

感觉调试便利性上还是不如mbed等传 ...

基本只能用print在关键位置输出调试信息。好像Linux下的开发者,包括嵌入式的,都不喜欢用仿真器。即使有仿真软件也都比较难用。

我一般是用一个文本编辑器,编辑文件后存盘,然后ctrl+D软复位,然后import运行。就是不知道这样会不会对flash损耗比较大?很多flash只有1W次的写入次数。而且这个PYFLASH磁盘很可能没有做存储空间负载均衡的。
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

5
 
汇总在此:
【MicroPython】——by allankliu
https://bbs.eeworld.com.cn/forum ... 2739&fromuid=536508
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表