时间触发嵌入式系统可以红外解码吗?
最近正在研究时间触发嵌入式系统,看了半天书,没有搞懂怎么样在不增加中断的情况下进行红外解码?从论坛上看到的与红外解码有关的程序大都采用中断的方式测量,而《时间触发嵌入式系统设计模式 8051系列微控制器开发可靠应用》书中提到的是:"每个控制器一个中断的原则"(227页),也就是说不能够采用中断的方式进行红外解码,不知道有没有高人知道应该怎么解决此问题??? 我觉得你这么想有些形而上学,中断并不是处理事件的唯一途径,如果单任务或者任务不多,轮询法处理就可以了 你可以不用中断就完成红外解码吗?再说我这是学习先进的经验吗!有什么不对?
提醒一下楼上:你有没有看过这本书,他的意思就是提倡用轮询法法来完成所有任务,我这样做怎么就形而上学了? 红外解码最好用中断吧,要不需要多高的Tick呀? 对!正为这事头疼,时标太短的话,占用cpu的资源太多,根本就不能干别的事了,但是在书的第17章里,提到的混合式调度器里说:允许调度一个抢占式任务,原本以为可以通过第二个中断解决问题,可是仔细一看相关代码却发现:原来在main函数中添加了一个抢占式任务,而非不可控的外来信号,所以怀疑书中介绍的方法大概只能适用于可预测状态的运行,对于突发的,无规律的信号输入则无能为力,不知是否为这种方法的缺陷?
如果用任务方式来测量红外信号,时标必须小于1ms,要不然就不能正确测量最小脉宽了,我发问的目的就是想问一下有没有除了中断以外更好的方法,其实还是非常喜欢这种用合作式调度器工作的方法,它在解决复杂问题时能够提供相当便捷的方案,而不用"总是重新发明轮子".
我在以前的方案中用的是常见的超级循环的方式,意识到这种方法确实对一些要求严格的商业设计不适用,特别是调整参数时,真是牵一发而动全身,自从看到本论坛上介绍的这本书后才如梦初醒,然后有查寻了别人关于红外解码的相关源代码后发现:大都采用中断,或查询的方法(其实程序就是在那里傻等),相对一个真正好的程序来说差的太远,由此可以看出真正的高手都是隐而不现的,看见的大都是初学者的作品,原谅我说的这么直接,如有冒犯请多多包含!!
还有就是:在高端的处理器中,或者在操作系统中是怎样完成红外解码的?如果没人回答的话就需要进一步学习了! 我尝试过的单片机解码方法是接收到红外触发INT中断,然后进入轮询状态解码。用定时器测量脉宽,解码成功后再对数据进行处理 设置一个高频的定时中断来轮询,只做高、低电平计时(计中断数),然后把信息传递给高层的任务级来解码。 jdh99 :一般来说常用的解码方式就是这种,我也正打算这样试试,不过我的想法是:在红外信号触发中断后,启动计数器,然后在下次中断时获取上次中断以来的计数器值,由此来判断脉冲的宽度,也就得到了诸如:引导码,高电平码和低电平码,这样做的好处是不会占用太多CPU的时间,不影响别的任务,如果总是处在轮询状态,别的任务会失去响应,虽然总的红外解码时间本身并不太长
zhiwei :这也是个办法,但是这个高频中断的时间间隔是多少?如果没有猜错的话应该在0.5ms左右,太短的话会不会影响别的任务的执行(我记得书上说的好像是所有任务的执行时间要控制在两次时标间隔之间,不然会造成任务"抖动",当然对实时性要求不高的应用来说是可以接受的),还有就是如果时标间隔太短的话,会不会占用太多的cpu资源?
我现在用的是STC的单片机,号称是1T的速度,如果采用12M晶振,设置时标0.5ms的话,那么在时标间隔中最多可以执行6000条指令,这样看来如果任务分配得当,还是有可能完成全部调度任务的,至于行不行还要实际试试再说 回复【4楼】xishirujin
对!正为这事头疼,时标太短的话,占用cpu的资源太多,根本就不能干别的事了,但是在书的第17章里,提到的混合式调度器里说:允许调度一个抢占式任务,原本以为可以通过第二个中断解决问题,可是仔细一看相关代码却发现:原来在main函数中添加了一个抢占式任务,而非不可控的外来信号,所以怀疑书中介绍的方法大概只能适用于可预测状态的运行,对于突发的,无规律的信号输入则无能为力,不知是否为这种方法的缺陷?
如果用任务方式来测量红外信号,时标必须小于1ms,要不然就不能正确测量最小脉宽了,我发问的目的就是想问一下有没有除了中断以外更好的方法,其实还是非常喜欢这种用合作式调度器工作的方法,它在解决复杂问题时能够提供相当便捷的方案,而不用"总是重新发明轮子".
我在以前的方案中用的是常见的超级循环的方式,意识到这种方法确实对一些要求严格的商业设计不适用,特别是调整参数时,真是牵一发而动全身,自从看到本论坛......
-----------------------------------------------------------------------
什么样的OS都可以。
红外信号可以使用中断+回调的模式,中断发生的时候分析数据,解析出数据后通过回调模式传给上层模块的buffer。
上层软件处理这个buffer的实时性就要求很低了,使用os的任务,用比较低的ticks就行了。 “还有就是:在高端的处理器中,或者在操作系统中是怎样完成红外解码的?如果没人回答的话就需要进一步学习了!”
电脑中的硬盘,接口等外围都有专用芯片接口,处理好数据放在寄存器中等待OS调用,从没见过用CPU去管理硬盘的磁头和转速吧 我说的高端处理器并不是指的像电脑这样的处理器,而是指在嵌入式领域里的处理器,如:ARM等;
其实在PC中也是由多个嵌入式系协同完成工作的,真要是解码的话还是会碰到这个问题的,只不过在某一个嵌入式子模块接收完成后再放在寄存器中等待OS调用 我来挖下坟。
作者只使用一个时标中断的原则是基于可预测这个出发点的,因为使用了其它中断就有可能打乱原来的规划而不可预测了。 longquan 发表于 2010-10-27 14:51 static/image/common/back.gif
“还有就是:在高端的处理器中,或者在操作系统中是怎样完成红外解码的?如果没人回答的话就需要进一步学习了! ...
在dvd中,有一个专门的协处理器来处理按键和红外解码
页:
[1]