搜索
bottom↓
楼主: yrloy

【原创】最高效率使用单片机,放弃程序中的延时函数

  [复制链接]

出0入0汤圆

发表于 2011-2-10 21:16:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-10 21:30:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-10 21:40:21 | 显示全部楼层
个人比较推崇有限状态机, 可以在无os状态下简单并且高效使用mcu,只是状态机设计相对复杂。

出0入0汤圆

发表于 2011-2-10 21:52:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-10 22:58:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-11 17:05:58 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-2-11 18:58:35 | 显示全部楼层
单片机控制的都是简单的任务,一般不会太复杂,只要能完成功能,用delay很好,复杂点的都用OS了

出0入0汤圆

发表于 2011-2-11 19:12:00 | 显示全部楼层
mark,受教了

出0入0汤圆

发表于 2011-2-11 19:20:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-11 19:57:36 | 显示全部楼层
楼主的思路很健康,能更高效的利用硬件资源,适当的增加了一些程序设计的复杂性也是值得的。

出0入0汤圆

发表于 2011-2-12 11:16:20 | 显示全部楼层
记号。

出0入0汤圆

发表于 2011-2-12 11:30:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-12 14:11:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-12 22:10:45 | 显示全部楼层
好贴

出0入0汤圆

发表于 2011-2-23 15:58:56 | 显示全部楼层
类似OS的处理方式,楼主说的有道理。
个人观点呢,单片机程序是主要为了完成某项(或某些)功能而编写的,在有限资源内,能够实现其功能并稳定工作,什么编写风格都可以。

出0入0汤圆

发表于 2011-2-23 21:52:59 | 显示全部楼层
留下99.9%的资源以后可以在将来加入云计算。
鼓励大家把多的资源拿出来投入到社会主义建设中去。

出0入0汤圆

发表于 2011-2-23 23:59:28 | 显示全部楼层
我的程序满是delay,呵呵。

出0入0汤圆

发表于 2011-2-24 03:40:24 | 显示全部楼层
a state machine can be difficult to implement, especially when you have a large number of states, or co-mingling of states.

I think the best "delays" are done with a consistent and ever running system clock, aka SysTick() in CM3. that can be implemented on pretty much all mcus with a timer.

the downside is that a) it takes away one timer; and b) it has limited resolution (anything less than 1ms would be very resource constraining).

but once implemented, it is incredibly powerful and very portable.

出0入0汤圆

发表于 2011-4-3 21:22:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-3 21:41:59 | 显示全部楼层
辩证的看,还是受益的

出0入0汤圆

发表于 2011-4-11 22:02:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-4 16:35:43 | 显示全部楼层
1M的时钟,模拟串口通信,要延时104uS你怎么做

出0入0汤圆

发表于 2011-5-4 16:49:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-4 18:05:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-4 18:18:33 | 显示全部楼层
mark~

出0入0汤圆

发表于 2011-5-4 18:38:34 | 显示全部楼层
mk

出0入8汤圆

发表于 2011-5-4 19:14:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-4 19:39:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-4 22:27:25 | 显示全部楼层
mark

出0入10汤圆

发表于 2011-5-6 09:27:19 | 显示全部楼层
ding

出0入0汤圆

发表于 2011-5-6 09:43:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-7 09:22:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-7 10:17:46 | 显示全部楼层
我觉得任务调度挺好,就是不知道可靠性怎么样。

出0入0汤圆

发表于 2011-5-7 10:20:13 | 显示全部楼层
单片机就是做比较简单的事情,何必把简单的事情复杂化?
用循环,可能只要5分钟就搞好的。
用定时器什么的,说不定要五天才能好。
实时系统不看效率,只看稳定性。
程序好不容易写好了,东西都卖出去了。
发现在什么什么时候,时序会乱,能回收吗?


结论:纯口水贴

出0入0汤圆

发表于 2011-5-8 17:58:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-8 18:15:28 | 显示全部楼层
好文,期待后续

出0入0汤圆

发表于 2011-5-8 20:53:25 | 显示全部楼层
有空 回来 再好好看看

出0入0汤圆

发表于 2011-5-8 21:57:40 | 显示全部楼层
中断源驱动的状态机+主程序中轮询标记 实时性和高效性都能保证,再大的程序也能搞定。

出0入0汤圆

发表于 2011-5-8 22:06:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-8 23:20:55 | 显示全部楼层
牛逼的人,好不容易再找到的

出0入0汤圆

发表于 2011-5-8 23:39:09 | 显示全部楼层
还是比较同意楼主的看法的。

出0入0汤圆

发表于 2011-5-8 23:50:17 | 显示全部楼层
mark,考完试详细看

出0入0汤圆

发表于 2011-5-9 00:43:40 | 显示全部楼层
实时性,多任务,,这才是嵌入式目的所在!我一直想搞这个,向楼主学习!

出0入0汤圆

发表于 2011-5-9 08:26:47 | 显示全部楼层
中断源(SysStick)驱动的任务(状态机)标志,主程序中轮询各个任务标是否就绪,采用有优先级地轮询,当任务时间超过SysStick片时间时,将任务划分为小于(SysStick)的简单任务【毕竟没有哪个任务需要连续运行这么久,要是真有了,必须调整SysStick】。

以般的问题就能解决。

不知道我表述清楚没有,感觉和LZ的第二种思想差不多,这种伪os,不需要堆栈,纯C就能搞定。

出0入0汤圆

发表于 2011-5-9 09:12:42 | 显示全部楼层
时间触发嵌入式系统设计模式 8051系列微控制器开发可靠应用
我觉得这本书不错。
楼主看得Demo Code 可能大部分仅仅Demo而已,实际项目未必如此

出0入0汤圆

发表于 2011-5-9 12:50:54 | 显示全部楼层
楼主写的挺好的

出0入0汤圆

发表于 2011-5-9 13:10:48 | 显示全部楼层
纯粹顶贴!
写得还是可以的,不过现在没几个人会用delay()了吧,除了一些对cpu使用率超低的场合!

出0入0汤圆

发表于 2011-5-10 10:52:27 | 显示全部楼层
有道理,我要好好学习一下!

出0入0汤圆

发表于 2011-5-12 08:14:24 | 显示全部楼层
jh

出0入0汤圆

发表于 2011-5-12 08:43:46 | 显示全部楼层
只会穿插delay的飘过  顶了

出0入0汤圆

发表于 2011-7-5 23:23:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-6 10:25:14 | 显示全部楼层
mark===

出0入0汤圆

发表于 2011-8-12 14:28:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-15 11:00:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-17 20:44:10 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-8-21 15:25:43 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-21 16:09:10 | 显示全部楼层
其实早就放弃了空等待延时了。

出0入0汤圆

发表于 2011-11-6 00:59:35 | 显示全部楼层
mark

出0入476汤圆

发表于 2011-11-6 08:44:51 | 显示全部楼层
有的时候,真是没办法。实际上对一些简单任务用delay也无可厚非,只是程序写的利用率不高而已。不过我认为程序的好和坏有时不是以写程序的技巧有多好来判断,而是这段程序的可靠和稳定放在第一位的。

出0入0汤圆

发表于 2011-11-6 08:54:32 | 显示全部楼层
留下

出0入0汤圆

发表于 2011-11-6 08:58:05 | 显示全部楼层
这是无言知识,只能领会,不能言谈!

出0入0汤圆

发表于 2011-11-6 11:16:30 | 显示全部楼层
mark......

出0入0汤圆

发表于 2011-11-6 11:25:27 | 显示全部楼层
空等待延时  很多仅仅是教程什么使用  实际很少这么用

出0入0汤圆

发表于 2011-11-6 13:21:47 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-12-9 12:44:59 | 显示全部楼层
我认为cpu效率还要看单片机的外设资源,我用过一款单片机叫cc1110,内含一个叫“DMA”( Direct Memory Access)的模块,不占用cpu资源可以将数据包实现搬运,比如串口、无线通讯等,等256个以内字节发送或接收完毕后产生中断,这样可节约了很多时间咯!
达到了楼主所说的意思。

出0入0汤圆

发表于 2011-12-9 13:10:04 | 显示全部楼层
想法不错。但实际应用中这种情况不一定有用。

试想,我们用单片机都干什么活,就明白这种为实现CPU的高效率而所付出的开支是多么无价值了。

举个例子:我在单位,为了实现网络的最大化利用,一边办公,一边开视频聊天,还在看大片,应该是很好的利用方法了。但领导看到了,会说:“上班时间不要干与工作无关的事”。我是在干工作,只不过是利用了电脑的高性能,让它多干了一点。你说,这是好事还是坏事??

当然,如果我一边干工作,一边下载,领导看不到下载,会说我工作辛劳。——这是最好的结果了。我想楼主的想法应该是这种情况。不过,我们又会有多少东西需要下载??

出0入0汤圆

发表于 2011-12-18 22:19:03 | 显示全部楼层
等楼主的连载

出0入0汤圆

发表于 2012-2-10 09:51:17 | 显示全部楼层
楼主说的有理有据,令人信服。期待连载

出0入0汤圆

发表于 2012-2-10 10:34:23 | 显示全部楼层
一直用NOP的路过.只能说楼主没做过硬件或产品.假如你的产品要<20uA的工作电流 不知你怎么做?
简单点说,看到外面治安单车用的双闪灯不?你能打整机电流做到<100uA不?(不说20uA好了)

出0入0汤圆

发表于 2012-2-10 23:17:20 | 显示全部楼层
lz如果你用单片机开发多了就知道了.
我们使用单片机要求的就不是要效率问题,主循环干些对时间无关紧要的,随便死等待只要满足要求就行了.
然后中断才是一些比较关键的我们需要完成的,这就是前后台系统.
如果我们把单片机效率看那么严重那么就直接上arm9,11那不是更好.
所以只要满足我们要求就可以了,单片机并不是计算机,他要的更是要完成什么,稳定才是第一,有时候啥频率都是为了适应systick才会去考虑,甚至为了适应串口的波特率而选用特定频率的晶振.
当然,楼主的思想也有人实现了,比如最简单的,"protothread",uip的作者在协议栈里面实现了,这个中文名叫协程.

另外,一些很短的延迟有时候单片机通过中断来延迟是很吃力的(改中断频率或者频繁进入中断都是不可取的),直接while简单而又实在.

出0入0汤圆

发表于 2012-2-11 00:31:25 | 显示全部楼层
谢谢了

出0入0汤圆

发表于 2012-2-11 09:25:10 | 显示全部楼层
楼主的思路适用于数十或数百us级的延时或任务
一些短暂的延时,比如I2C时序的1~几uS延时,还是空转来得合适

出0入0汤圆

发表于 2012-2-11 09:30:13 | 显示全部楼层
一般都是小东西,大了当然不行

出0入0汤圆

发表于 2012-2-11 13:22:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-11 13:37:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-7 21:39:12 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-3-7 23:06:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-7 23:21:13 | 显示全部楼层
mark一下!

出0入0汤圆

发表于 2012-3-8 09:41:34 | 显示全部楼层
实际很少这么用

出0入0汤圆

发表于 2012-3-8 09:49:24 | 显示全部楼层
楼主是用心研究了

出0入0汤圆

发表于 2012-3-8 09:53:03 | 显示全部楼层
很不错的思想

出0入0汤圆

发表于 2012-3-8 09:53:08 | 显示全部楼层
值得学习

出0入0汤圆

发表于 2012-3-8 10:28:51 | 显示全部楼层
回复【276楼】xslff  
mark
-----------------------------------------------------------------------

出0入0汤圆

发表于 2012-3-8 12:25:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-8 19:58:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-8 20:11:31 | 显示全部楼层
学习!

出0入0汤圆

发表于 2012-3-11 08:59:25 | 显示全部楼层
mark 必须的

出0入0汤圆

发表于 2012-3-11 19:41:12 | 显示全部楼层
mark 必须的

出0入0汤圆

发表于 2012-5-22 16:28:02 | 显示全部楼层
这是.......

出0入0汤圆

发表于 2012-5-22 21:53:32 | 显示全部楼层
用protothread,就能解决问题。

出0入0汤圆

发表于 2012-5-23 13:28:13 | 显示全部楼层
很好,很强大

出0入296汤圆

发表于 2012-5-23 15:02:03 | 显示全部楼层
又看到一个对裸机多任务以及调度器感兴趣的兄弟。赞一个。楼主第二种方法应该是独立过得的,应该给与肯定的态度,虽然这已经是一种行业内常见的做法,论坛里有不少好的例子。本质上,这是一种全状态机开发的模式,尽管楼主似乎还没有意识到。希望大家积极提问,楼主的对处理器时间就是资源的认识还是很到位的。希望楼主不要把合作式调度器和状态机割裂来看,否则就是买椟还株了。

出0入0汤圆

发表于 2012-5-30 07:24:35 来自手机 | 显示全部楼层
学习一下!!!!!!!

出0入0汤圆

发表于 2012-5-30 07:54:22 | 显示全部楼层
高手,期待!!!

出0入0汤圆

发表于 2012-6-3 18:10:28 | 显示全部楼层
楼主!你好;看过你的帖子--很有见的!水平也不浅,想请你帮写一个C程序:一根小木棍从生产线流入,要经过选别(完整无缺陷)---到定位涂漆---烘干---包装等工序,你看用什么方式编程好!!!

出0入0汤圆

发表于 2012-8-8 16:49:20 | 显示全部楼层
状态机+定时器。够用了。公司里的产品产品还是需要多任务运行的。死延时也只会用于与低速外设通讯的时候。╮(╯_╰)╭

出0入0汤圆

发表于 2012-8-31 18:57:38 | 显示全部楼层
嗯,有助于大幅提高单片机利用效率,支持一下。

出0入0汤圆

发表于 2013-6-28 11:46:40 | 显示全部楼层
cool                                                                                       

出0入0汤圆

发表于 2013-6-28 21:04:10 | 显示全部楼层
论坛有精华帖,好像是"基于时间片轮询的协作式多任务操作"对低端8位机相当好用

出0入0汤圆

发表于 2013-6-28 21:59:18 | 显示全部楼层
楼主厉害!
我去年才想到这一个点子,然后在 DSP 上实现了这个系统,开发效率高 10 倍以上!
但 AVR 的开发工具内嵌汇编很麻烦,我也拿它没办法。
楼主为什么没有出现了呢,3 年多过去了,进展得怎么样了?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 07:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表