打印

唉,这么简单的问题搞这么复杂来忽悠菜鸟……

[复制链接]
楼主: 刘前辈
手机看帖
扫描二维码
随时随地手机跟帖
121
Cortex-M0| | 2011-8-30 06:58 | 只看该作者 回帖奖励 |倒序浏览
关中断的方法大家都知道。
我想知道的的是除了关中断和循环读,还有没有其它方法。
流行音乐 发表于 2011-8-29 21:07


最基本最经典的就以上这两种方法。
但使用不当,依然会犯错。
1. 关中断法。
前面所说的都是关总中断,一般用用还行,但在某些实时性很高的场合,给你关了一会儿总中断,会漏了某些突发事件,因此,推荐只关影响改变count计数的中断,停止count计数,这样,其他实时性很高的突发事件,可继续响应中断。

2. 关中断法在绝大多数情况下,是行之有效的简单又省事,代码量又少的优选方案。
但是,对某些计数频率很高的有实时性要求的 计数/定时器 而言,关一次中断又是至命的杯具-------会漏计N个计数数据,因此,循环读出对比确认法应运而生,但对计数频率很高的 计数/定时器 ,将高低数据一次性全部读出后再对比,又行不通,因为计数频率太快,当你一个字节数据都没读完,count计数值已经改变,第二次读出的数据永远和第一次读出的数据不相等,根本没法工作。后来人们又想出,分两次读,先读高字节,再读低字节,最后仅比较高字节内容是否改变(是否有进位),没改变就当读入的count计数值有效,否则再重来一次,这样,彻底解决了高速count的读出问题。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
highgear + 1
122
Cortex-M0| | 2011-8-30 07:05 | 只看该作者
尊重声明:

以上内容来源于二姨家图书馆馆长老T叔那本垫屁股的书,被俺从中抽了一张出来,上面正好写着121楼内容,不是俺发明的,更不是什么“第一”“填补空白”的高科技东东~~~

使用特权

评论回复
123
t.jm| | 2011-8-30 08:27 | 只看该作者
这个问题大家都基本认同一点,关中断肯定是最行之有效的方法!
只是还侥幸于有没有其它更好的方法,似乎循环读是大家认可的另一个方法,而我认为循环读很明显在某些情况下也是有BUG的,循环读实质就是闪电击中你一次不会死,非连续击中N次都不死,只有连续击中两次才会死,所以要写个测试程序保证能连续两次击中也是做得到的。

之前我有个观点,硬件问题硬件解决,就是关中断,大家又认为关中断影响中断响应,我就引用数据讨论这个细节:
“Cortex-M3的中断延迟只有12个时钟周期(ARM7需要24-42个周期);Cortex-M3还使用尾链技术,使得背靠背(back-to-back)中断的响应只需要6个时钟周期(ARM7需要大于30个周期)。”

先假定关中断方法导致4个指令周期的中断延时,下面就容易计算,对Cortex-M3不关中断运行于12M与关中断运行于(12+4)M的中断响应是一样的,对于ARM7不关中断运行于24M与关中断运行于(24+4)M的中断响应是一样的。也就是说硬件解决仅仅是提高一点点时钟频率就解决了,完美而又绝无BUG。
关中断也可通过软件手法保证中断延迟尽量地小,代码换空间读取关键数据时频繁开关中断就行了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
highgear + 1
124
wen86sv| | 2011-8-30 08:41 | 只看该作者
你这程序复杂了点

使用特权

评论回复
125
Cortex-M0| | 2011-8-30 09:26 | 只看该作者
这个问题大家都基本认同一点,关中断肯定是最行之有效的方法!
只是还侥幸于有没有其它更好的方法,似乎循环读是大家认可的另一个方法,而我认为循环读很明显在某些情况下也是有BUG的,循环读实质就是闪电击中你一次 ...
t.jm 发表于 2011-8-30 08:27



硬件问题硬件解决,这话说的好,赞一个~~~

但关中断本身不是硬件解决之方法,只是象马路上的红绿灯,碰到红灯停,让绿灯优先通过,但不管车速多快,理论上总影响通行率,因此,人们想出了立交通行之法,取消红绿灯控制,前面所说的高速计数/定时器高低位分二次读出,然后再检测高位有没有变化之法,是没有办法的方法,硬件的不足只能用软件来弥补,后期的产品很多都在里面集成了影像寄存器,只要读一个字节,另一个字节自动装入影像寄存器中,等你第二次读,这样,依靠硬件手段,彻底解决高速计数/定时器值不能用常规方**确读出之问题。

使用特权

评论回复
126
t.jm| | 2011-8-30 09:34 | 只看该作者
本帖最后由 t.jm 于 2011-8-30 09:37 编辑

125# Cortex-M0
啊!我是指关中断影响了中断响应,其实提高一点点主频就解决了!
对ARM7只需24M->28M或48M->56M,就那么一点点。
再说了,不是每次中断都发生在关中断期间,采用加权数字衡量性能,56M关中断的响应速度比48M不关中断要快的。
频率完全属硬件范畴吧!
再说ARM产品中断响应技术的发展也说明了这一点,硬件上的改善才是对最能提高中断响应速度的。

使用特权

评论回复
127
Cortex-M0| | 2011-8-30 10:00 | 只看该作者
提高主频只能改善提高程序的平均总执行时间,加权数字衡量总性能,但不能改善某些实时性要求很高的瞬间突发事件,这些事件通常都是用硬件来做,靠中断响应来读取和装载,因此,提高一点主频只能改善加快一点中断响应时间,对整个系统全局来讲,影响不大。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
highgear + 1
128
highgear| | 2011-8-30 21:39 | 只看该作者
就多字节变量被中断干扰的问题而言,关中断无疑是最行之有效的方法,对于中断来说,最多仅几个周期的延迟。如果认为这几个周期的延迟会影响或错过一个或几个中断,比如低档cpu中的高速计数器中断,我认为这种应用应该采用硬件的解决方案(例如使用带有capture与shadow register功能的计数器的cpu)而不是压榨cpu到极致的软件方案,否则隐患很多。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Cortex-M0 + 1
129
Cortex-M0| | 2011-8-31 07:47 | 只看该作者
highgear老师正解!

学习了~~~

使用特权

评论回复
130
garyluris| | 2011-8-31 07:52 | 只看该作者
怎么忽悠了?

使用特权

评论回复
131
刘前辈|  楼主 | 2011-8-31 09:21 | 只看该作者
本帖最后由 刘前辈 于 2011-8-31 09:32 编辑

所长和几位高手忽悠菜鸟呢? 关总中断会错过实时高优先级中断?
哈哈,你当Intel都和你那么层次?
别忘了,一个中断请求信号是记录型信号,如果短时间内CPU因为忙于其他事务处理不能及时响应挂起的中断,中断申请信号一直存在!看看uc/OS 256级嵌套中断是怎么回事?小于256个中断申请新号可以挂在那里排队等候CPU处理,一个也不会错过。(别理解成一个当前ISR执行期间只能产生一个中断。那是菜鸟。)

任何CPU都有推迟处理瞬时涌来的多个中断申请信号的过载能力。以51这么低级的处理器为例,虽然只有2级嵌套,但是每一级嵌套上都有一个同级队列,CPU可以自动给实时申请的信号排队,即使常用的5个硬件中断在一个正在处理的ISR中同时到达,CPU也将他们自动排队,顺序处理。嵌套5个没关系啦。根本不会错过!

除非在第一个中断申请信号还未得到CPU处理,第二个又到达(最易理解的,例如串口通信的情景)——那你的ISR在玩什么呢,几ms,几千条语句完不成一个接收数据处理?

倒反而像 :DPTR=count; 这么几条语句的关中断会影响和错过实时信号处理,——你以为实时信号是即时消失的?你的实时ISR比DPTR=count还快?仅一条语句?——核反应堆也没那么快耶。

     学了半天单片机,连硬实时的时限是什么概念都不知道呢。哈哈,所长前几年还知道一点,还硬实时,软实时地讲过一套概念,遗憾的就是没讲出来如何处理。
    李庆的“信誉追补”讲得很清楚。难怪让1952 取笑出论坛。
       “700ms 呀……”  700ms 怎么啦,7S照样追补。不知道吧!所长都不知道,其他就别装懂了。
       过去所长还能和HOT平起坐,如今所长和HOT大叔之间的差距越来越大了。……还倒退了,年龄问题?……



、、

使用特权

评论回复
132
t.jm| | 2011-8-31 09:31 | 只看该作者
131# 刘前辈
刘前辈是属于看到点皮毛就以为真只花豹都看到了的人!
别人说的高数计数器中断是: 在中断屏蔽期间能产生2次以上的中断的!

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
highgear + 1
Cortex-M0 + 1
133
ayb_ice| | 2011-8-31 09:32 | 只看该作者
我早说过了,XXX此人并没有什么实际项目经验

使用特权

评论回复
134
zslxzlyf| | 2011-8-31 09:40 | 只看该作者
菜鸟来过

使用特权

评论回复
135
Cortex-M0| | 2011-8-31 10:07 | 只看该作者
这年头,半瓶子水的总是晃晃响,水越满越没声音,像老爷子这种自认只有高中生水平的电工,发个贴子要仔细核对数遍,怕写错误导菜鸟,但时常还有考虑不周写错的地方,春哥发贴俺看他从没写过有深度的,只是一些理论性的指点,换回超级低的失误率,常在河边走,哪有不湿鞋?

像LZ大力推荐的二姨家第一高手,这次主推250开发板,听说PCB打了 7次样,现在还不满意,还要改~~~  :L

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
highgear + 1
136
刘前辈|  楼主 | 2011-8-31 13:05 | 只看该作者
M0斑竹说的太对了!前辈发的帖子稍微有点漏洞,就让M0和所长兴奋得手舞足蹈,互相加分鼓励。一前一后,一上一下,形状恰似狼狈。
     比如上面前辈写的“任何CPU都有处理过载能力……”明显的漏洞,应该是“任何处理器……”当时没改,想想让M0和所长再兴奋一下,看看狼狈是怎样上下摞起来跑的,也没什么不好。欣赏……

至于HOT的250开发板,比起M0的最烂小车可是强多了。因为至少别人现在此板上做过实验以后,才推出来的。比起那些连自己还没有实验通过,就推给坛友的大忽悠做法,信誉可是高多了。
    有个问题前辈一直没好意思说:考虑到M0是在帮俺忙的时候出的忽悠:
    M0说中颖单片机可以代替Intel8052,在上面玩RTX51——FULL没问题。哈哈,你玩一个给我看看?如此有身份的人……


、、

使用特权

评论回复
137
Cortex-M0| | 2011-8-31 16:50 | 只看该作者
本帖最后由 Cortex-M0 于 2011-8-31 16:53 编辑

刘前辈说的太对了~~~

菜农大叔的250开发板,确实比最烂小车强多了。
菜农大叔的ARM芯片比烂51不知先进多少倍。因此,对得起这250

这个烂小车只是某些盆友想看俺笑话,只充许出100大洋,要搞出别人成本在300大洋以上才能搞定的自平衡小车。

因此,为了配合某些盆友看俺笑话,不但自已不做实验,并且还免费赠送给21ic网友50套小车,扩大影响,这种大忽悠的做法,俺最喜欢做啦,做不出俺信誉扫地,别说看俺笑话的某些盆友有多开心,您刘前辈不是一样也开心吗?

给二姨的网友们,当个开心果,其实也不错哈~~~

举点例子,先让看戏的盆友笑的开心点:
1. 匠人加个4个微调电阻,经历九九八十一难,才让小车站起来了。
   连二姨家理论专家,highgear老师解说倒立摆原理时,提出要用一个微调电阻,调节到小车稳定站立。
   俺原设计上面一个微调电阻都没加!能让小车站起来吗?这是好戏之一。

2. 有盆友提出,精确的采样需要精确的定时,这个烂小车上面晶振都不加一个,咋行?咋能让小车站起来?
   确实,为了压缩成本,满足零件总价不超出100大洋的目标,俺偷工减料连个晶振都省了,没有晶振的精确定时采样,能让小车站起来吗?这是好戏之二。

3. 还有好多好多好戏呢,慢慢看吧。。。。


因此,大大的忽悠一下,给网友们看看笑话,工作之余放松放松,笑一笑,当个开心果,不是很好吗?

使用特权

评论回复
138
刘前辈|  楼主 | 2011-8-31 18:10 | 只看该作者
M0版主终于说出了小车真相,支持诚信!
前几天收到一个大二学生的短消息,发誓不惜经历100次失败,第101次也一定要让小车站起来!当时是123jj主持。俺一再告诫他,这是个大忽悠,你花那个时间不合算;——就差没说你失败1000次小车也站不起来。他说坚决支持123jj的辛苦。不知顶了123jj多少次,“坚决顶……”弄得我好像给他的积极性拆台似地。

      M0终于让真相大白,我相信这位大二学生现在能理解我的意思了,实际上他拿到小车套件一开始就做不下去。我对所有拿到小车套件正在动手的盆友说一句,你不会比所长、123jj、M0、HOTPOWER 等这样的高手更厉害,他们没有让小车站起来,别人更不行……

使用特权

评论回复
139
刘前辈|  楼主 | 2011-8-31 18:41 | 只看该作者
本帖最后由 刘前辈 于 2011-8-31 18:48 编辑

LZ贴了3种方法,按照M0的说法,都有缺陷。
没事,再给你贴几个无懈可击的4、5、6种方法,不需要中断的方法。

取笑那些高手,一种方法也写不出来。“LZ一看就没有实际经验……”你看这位高手连这么简单的问题都解决不了,他有实践经验……?

送各位一句话,你不会比所长、M0这样的高手更厉害,所以,SmartPower这道例题就别期望尝试了,——正如小车套件实验一样。

提示一下所长,当年我上“农民讲习所”时,看了所长的裸奔“邮箱程序”,甚是敬佩。自认为这辈子只能望所长之项背,叹之不及了。

邮箱概念和消息传递……? 消息传递是不采用共享变量而进行双方通信和同步操作的,……你教了盆友邮箱和消息传递,如何应用可没有强调过,“要给人一杯水,自己先要有一桶水。”     LZ关于“一朝成名”版主带来的SmartPower写的程序,真是太精彩了,竟然还可以用消息传递机制解决!
          且看下面 LZ怎么玩消息传递解决方法,……;且慢……,最好还是先给所长点时间,在学生之前写一个邮箱方案什么的,都这么提示了,还一个都写不出来?让学生连写出4个5个,然后背后指指点点,贬低一气。恐怕有点自我贬低所长形象吧……
        所长不是总追着前辈要PK?给你机会啦,让你先来……一晚上,够了吧。

、、

使用特权

评论回复
140
tjl128| | 2011-8-31 19:29 | 只看该作者
到底要表达啥啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则