3784|4

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MicroPython中如何C++中的定时器一样循环调用 [复制链接]

 MicroPython中如何向C++中的定时器一样,定时循环调用?
一般使用较多的只有 while(true)这种方法么?

最新回复

串口速率太高,如果不能及时处理数据会造成丢失的,串口缓冲区的大小目前未知,没有看到文档说明,可能要去看看代码了。 再mpy中,串口没有回掉函数,只能通过查询方式查看是否有数据。 定时器的最小间隔是小于1ms的,但是考虑到python语言解释执行带来的延迟,太小的定时时间会影响系统效率。 文件方便,mpy还是很方便的。建议你先分开测试每个功能,看看能不能达到你的要求,最后在合起来测试。mpy对实时性非常高的应用可能不合适,或者需要单独写一个底层模块去处理。 目前mpy已经支持线程了(从1.9.1版本开始),使用起来和普通的RTOS非常相似。  详情 回复 发表于 2017-8-26 20:12
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

推荐
 
你指的是定时器中断吗?可以这样做:

  1. from pyb import Timer
  2. tim = Timer(1, freq=1)
  3. tim.callback(lambda t: pyb.LED(1).toggle())
复制代码

更复杂就定义一个函数:
  1. def fun(t):
  2.     pyb.LED(1).toggle()
  3. tim.callback(fun)
复制代码



点评

其实我是有这样的一个需求,有一个串口在源源不断的接收数据,数据接收速率非常高,波特率可能达到921600,我需要一直监听并接收该数据,对数据做相应的处理后,需要将这些数据以文件的形式保存在sd卡中。 针对这样  详情 回复 发表于 2017-8-26 16:53
tim = Timer(1, freq=1) 问题: 第一个参数1,指的是真实的物理硬时钟是么?如果是这样,那这个取值应该和时钟树中的时钟有一一对应的关系吧,这个编号可就不是随便填写的了。 第二个参数,freq=1,是1ms吧?  详情 回复 发表于 2017-8-26 14:00
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
dcexpert 发表于 2017-8-25 21:41
你指的是定时器中断吗?可以这样做:

[code]from pyb import Timer
tim = Timer(1 ...

tim = Timer(1, freq=1)
问题:
第一个参数1,指的是真实的物理硬时钟是么?如果是这样,那这个取值应该和时钟树中的时钟有一一对应的关系吧,这个编号可就不是随便填写的了。
第二个参数,freq=1,是1ms吧?

def fun(t)
这个参数t,代码里面没有用到,是不是可以定义成无参的函数呢?

谢谢版主。
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

4
 
本帖最后由 shenshen927 于 2017-8-26 16:57 编辑
dcexpert 发表于 2017-8-25 21:41
你指的是定时器中断吗?可以这样做:

[code]from pyb import Timer
tim = Timer(1 ...

其实我是有这样的一个需求(我的开发板是pyb,mcu是STM32F405),有一个串口在源源不断的接收数据,数据接收速率非常高,波特率可能达到921600,我需要一直监听并接收该数据,对数据做相应的处理后,需要将这些数据以文件的形式保存在sd卡中。
针对这样的需求,我在实现的时候有以下几个方面的考虑:
1、由于串口速率较高,我应该采用while(True)死循环的方式一直读,还是采用定时器的方式定时读如果采用定时器,目前stm32f405的最小定时间隔是不是1毫秒这个定时间隔对921600的速率来说会不会造成数据拥塞最终导致串口缓冲区溢出(话说f405的串口缓冲有多大),从而存在数据丢失的可能

2、由于我收到数据后,需要做相应的解析处理并存储为文件,这部分操作 放到上面说的循环里面做合适么对于上位机编程来讲,一般文件IO的处理都是比较慢的,嵌入式方面在不上系统的前提下也没有线程的概念吧,因此如果这部分操作放在接收数据的循环里面执行,会不会因为文件存储而造成阻塞串口接收或者阻塞其它功能的执行

3、请问,这样的需求,如何设计最优呢谢谢版主大大。


点评

串口速率太高,如果不能及时处理数据会造成丢失的,串口缓冲区的大小目前未知,没有看到文档说明,可能要去看看代码了。 再mpy中,串口没有回掉函数,只能通过查询方式查看是否有数据。 定时器的最小间隔是小  详情 回复 发表于 2017-8-26 20:12
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
shenshen927 发表于 2017-8-26 16:53
其实我是有这样的一个需求(我的开发板是pyb,mcu是STM32F405),有一个串口在源源不断的接收数据,数据 ...

串口速率太高,如果不能及时处理数据会造成丢失的,串口缓冲区的大小目前未知,没有看到文档说明,可能要去看看代码了。

再mpy中,串口没有回掉函数,只能通过查询方式查看是否有数据。

定时器的最小间隔是小于1ms的,但是考虑到python语言解释执行带来的延迟,太小的定时时间会影响系统效率。

文件方便,mpy还是很方便的。建议你先分开测试每个功能,看看能不能达到你的要求,最后在合起来测试。mpy对实时性非常高的应用可能不合适,或者需要单独写一个底层模块去处理。

目前mpy已经支持线程了(从1.9.1版本开始),使用起来和普通的RTOS非常相似。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表