3940|6

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于MicroPython基于STM32开发串口及文件操作的优化设计 [复制链接]

  本帖最后由 shenshen927 于 2017-8-26 17:45 编辑

有这样的一个需求(我的开发板是pyb,mcu是STM32F405),有一个串口在源源不断的接收数据,数据接收速率非常高,波特率可能达到921600,我需要一直监听并接收该数据,对数据做相应的处理后,需要将这些数据以文件的形式保存在sd卡中。

针对这样的需求,我在实现的时候有以下几个方面的考虑,请教版上大牛。
1、由于串口速率较高,我应该采用while(True)死循环的方式一直读,还是采用定时器的方式定时读如果采用定时器,目前stm32f405的最小定时间隔是不是1毫秒这个定时间隔对921600的速率来说会不会造成数据拥塞最终导致串口缓冲区溢出(话说f405的串口缓冲有多大),从而存在数据丢失的可能

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

3、请问,这样的需求,如何设计最优呢


最新回复

不客气了,大家一起学习交流。   详情 回复 发表于 2017-8-28 10:08
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
已经在另外帖子回复了。不过想补充几点:

无论什么软件或者系统,尽量不要用while(1)去读取串口和其它外设,这样会影响整体效率,阻塞其它功能,除非实在没有其它办法了。

如果串口速度太高,可以考虑多MCU的使用,尽量利用mpy的长处,而避免它解释执行的弱点。

点评

另外,您说“考虑到python语言解释执行带来的延迟,太小的定时时间会影响系统效率。” 记得在另外一个帖子看过评测,mpy的执行效率相比stm32原生c的固件库来说,整数执行效率大概在二十到三十几倍,浮点运算效率大  详情 回复 发表于 2017-8-26 21:23
多MCU的话,你的意思是用其中一个MCU专门来处理串口? mpy的主要长处也就是代码量少,开发工作小了吧。 我是在想,921600这个波特率,和 几毫秒的定时读取 比较匹配?这个能否大致推算出来。  详情 回复 发表于 2017-8-26 21:15
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
dcexpert 发表于 2017-8-26 20:56
已经在另外帖子回复了。不过想补充几点:

无论什么软件或者系统,尽量不要用while(1)去读取串口和其它外 ...

多MCU的话,你的意思是用其中一个MCU专门来处理串口?
mpy的主要长处也就是代码量少,开发工作小了吧。
我是在想,921600这个波特率,和 几毫秒的定时读取 比较匹配?这个能否大致推算出来。

点评

要看你的功能要求是什么,921600的波特率,大概就是92K/s,如果数据是连续的,一秒有90K数据,大部分嵌入式MCU是直接处理不了,需要用DMA或者用更高的MCU,才有足够的性能和RAM处理。 如果波特率高,但是数据量小  详情 回复 发表于 2017-8-27 14:17
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

4
 
dcexpert 发表于 2017-8-26 20:56
已经在另外帖子回复了。不过想补充几点:

无论什么软件或者系统,尽量不要用while(1)去读取串口和其它外 ...

另外,您说“考虑到python语言解释执行带来的延迟,太小的定时时间会影响系统效率。”
记得在另外一个帖子看过评测,mpy的执行效率相比stm32原生c的固件库来说,整数执行效率大概在二十到三十几倍,浮点运算效率大概在一百零几倍。
那么,定时器的最小定时间隔不要小于多少?能否给一个推荐值呀。
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
shenshen927 发表于 2017-8-26 21:15
多MCU的话,你的意思是用其中一个MCU专门来处理串口?
mpy的主要长处也就是代码量少,开发工作小了吧。
...

要看你的功能要求是什么,921600的波特率,大概就是92K/s,如果数据是连续的,一秒有90K数据,大部分嵌入式MCU是直接处理不了,需要用DMA或者用更高的MCU,才有足够的性能和RAM处理。

如果波特率高,但是数据量小,那么MCU还是可以处理,数据会先保存到缓冲区,然后MCU进行数据处理。

mpy的好处在于不用管系统底层,在不同型号的MCU之间容易移植程序,这和代码量关系不大,mpy同样是可以做很复杂程序的。对于较大的程序,需要注意垃圾回收机制,它对运行效率有一定影响。虽然系统有自动回收机制,但是有时还是需要自己控制。

定时器的时间,需要你多比较测试一下,才能得出结果。

点评

好的,谢谢版主耐心解答,我再研究下~  详情 回复 发表于 2017-8-27 22:23
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

6
 
dcexpert 发表于 2017-8-27 14:17
要看你的功能要求是什么,921600的波特率,大概就是92K/s,如果数据是连续的,一秒有90K数据,大部分嵌入 ...

好的,谢谢版主耐心解答,我再研究下~

点评

不客气了,大家一起学习交流。  详情 回复 发表于 2017-8-28 10:08
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鐘栄囨煕閳╁啨浠︾紒顔瑰墲娣囧﹪鎮欓鍕ㄥ亾閺嶎厼绀夌憸蹇曞垝婵犳艾绠i柣妯烘▕濡粓姊虹粔鍡楀濞堟洟鏌i幘瀛樼闁哄瞼鍠栭弻鍥晝閳ь剟鎮橀柆宥嗙厱闁靛牆鎷嬮崕鏃堟煛鐏炶鈧繂顕i崼鏇炵閹肩补鈧弶妯婇梻鍌欑閹碱偊寮甸鍌滅煓闁硅揪绠戦悡鈥愁熆鐠哄彿鍫ュ几鎼淬劍鐓欓梺顓ㄧ畱閺嬨倝鏌嶇拠鑼婵﹨娅i幏鐘诲箵閹烘繂濡烽梻浣哄帶缂嶅﹦绮婚弽顒侇棨濠电偞娼欓崥瀣缚濞嗘劦鏀伴梻鍌欑閹测€趁洪敃鍌氬瀭闁规鍠氭稉宥夋煙閹澘袚闁绘挻娲熼弻宥夊煛娴e憡娈ф繛瀵稿缁犳垿鈥︾捄銊﹀枂闁告洦鍓涢ˇ顓犵磽娴d粙鍝洪柟鐟版搐閻g兘骞掗幋鏃€鐎婚梺鐟扮摠缁诲倿鈥栨径瀣╃箚闁绘劦浜滈埀顒佸灴瀹曟繄浠︽潪鎸庣☉閳规垹鈧綆浜濋悗顒勬⒑閸涘﹤濮﹂柛鐘崇墵閿濈偤宕ㄧ€涙ḿ鍘藉┑鈽嗗灥濞咃絾绂掑☉娆戠闁割偆鍠庨崝銈夋煃鐟欏嫬鐏︽鐐诧躬閺屾稒绻濋崘鈺冾槹濡ょ姷鍋涢敃銉╁箚閺冨牆顫呴柣妯诲絻椤﹪姊婚崒姘偓鎼佸磹妞嬪海鐭嗗〒姘e亾闁诡喖娼″畷鎯邦檨婵炲瓨鐗犻弻鏇熺箾瑜嶉幊鎰版倿閸忚偐绠鹃弶鍫濆⒔缁夘剚銇勯銏╂█鐎规洩缍€缁犳稑鈽夊▎鎴濆妇闂備礁澹婇崑鍛崲瀹ュ憘锝堛亹閹烘挾鍘介梺瑙勫礃濞夋盯寮稿☉銏$厸鐎光偓鐎n剙鍩屽銈庡亝缁捇宕洪埀顒併亜閹哄秷鍏屾い鈺傜叀閹娼幏宀婂妳闂佽楠搁悥濂稿蓟閿濆绠i柨婵嗘啗閹剧粯鐓熼柟鎯х摠缁€瀣煛瀹€瀣瘈鐎规洘甯掗埞鎴﹀炊閳瑰簱鍋撴繝鍕=濞达絽鎼暩缂備緡鍣崹鑸典繆閻㈢ǹ绀嬫い鏍ㄥ嚬濞煎﹪姊洪幐搴b槈閻庢凹鍙冨畷鎶藉级鐠囩偓妫冮幃鈺呮濞戞鎹曟俊鐐€栭崹鐢杆囬棃娑卞殨妞ゆ劧绠戠壕濂告煟閹邦厽缍戞繛鍫㈠枛濮婃椽妫冨☉杈€嗘繝纰樷偓铏┛闁靛洦鍔欐俊鎼佸煛閸屾瀚奸梺鑽ゅТ濞诧箓鎮¢敓鐙€鏁佹俊銈呮噺閻撴洘淇婇婵嗗惞闁活厽甯為埀顒冾潐濞叉﹢宕归崸妤冨祦婵☆垵鍋愮壕鍏间繆椤栨粌甯舵鐐茬墦濮婄粯鎷呴崫銉ㄩ梺绋款儏閿曨亜鐣烽姀锛勯檮缂佸娉曢ˇ顕€姊洪棃娑氬婵☆偅绋撶划缁樸偅閸愨晝鍘卞銈嗗姦閸嬪嫭鏅堕鐐村€垫慨妯煎亾鐎氾拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊炲銈嗗笂缁€渚€宕滈鐑嗘富闁靛牆妫楁慨褏绱掗悩鍐茬伌闁绘侗鍣f慨鈧柕鍫濇閸樻捇鏌℃径灞戒沪濠㈢懓妫濆畷婵嗩吋閸℃劒绨婚梺鍝勫€搁悘婵嬵敂椤愩倗纾奸弶鍫涘妽瀹曞瞼鈧娲樼敮鎺楋綖濠靛鏁勯柦妯侯槷婢规洟姊洪崨濠勭細闁稿孩濞婇幆灞解枎閹惧鍘遍梺鍝勬储閸斿矂鎮橀悩鐢电<闁绘瑢鍋撻柛銊ョ埣瀵濡搁埡鍌氫簽闂佺ǹ鏈粙鎴︻敂閿燂拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛銈呭閺屾盯顢曢敐鍡欘槬缂備胶濮锋繛鈧柡宀€鍠栧畷婊嗩槾閻㈩垱鐩弻娑氣偓锝冨妼閳ь剚绻堝濠氬即閻旇櫣顔曢梺缁樺姦閸撴岸鎮甸弴銏♀拺缂佸顑欓崕蹇斻亜閹存繍妯€鐎殿喖顭烽弫鎰緞婵犲嫮鏉告俊鐐€栫敮濠囨倿閿曞倸纾块柟鍓х帛閳锋垹绱撴担濮戭亞绮幒妤佺厽闊洦鏌ㄩ崫鍝勨攽閿涘嫭鏆€规洜鍠栭、娑橆潩妲屾牕鏁介梻鍌欐祰椤骞嗗畝鍕瀭闂侇剙绉撮弸浣肝旈敐鍛殲闁绘挾鍠栭獮鏍庨鈧悘顕€鏌涢悢鍝ュ弨闁哄瞼鍠栧畷娆撳Χ閸℃浼�婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻鐔兼⒒鐎靛壊妲紒鎯у⒔缁垳鎹㈠☉銏犵闁哄啠鍋撻柛銈呯Ч閺屾盯濡烽鐓庘拻闂佽桨绀佸ú顓㈠蓟閺囷紕鐤€闁哄洨鍊妷锔轰簻闁挎棁顕у▍宥夋煙椤旂瓔娈滅€规洘顨嗗鍕節娴e壊妫滈梻鍌氬€风粈渚€骞夐垾瓒佹椽鏁冮崒姘憋紱婵犮垼鍩栭崝鏇㈠及閵夆晜鐓熼柟閭﹀枛閸斿鏌嶉柨瀣伌闁诡喖缍婇獮渚€骞掗幋婵愮€虫繝鐢靛仜閹冲繘宕濆▎鎾宠摕闁绘梻鍘х粈鍕煏閸繃顥滄い蹇ユ嫹
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【有奖直播】2025是德科技数字月-数字新品来助阵
直播时间:3月19日(周三)14:00
直播奖励:小米口红充电宝、倍思充电线、是德科技十周年鼠标垫

查看 »

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