|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
探討一個(gè)問題,定時(shí)定量捕捉事件。有一定難度,別輕視。 |
| 作者:gtw 欄目:單片機(jī) |
要求:在檢測(cè)滿足m時(shí)間內(nèi)發(fā)生n次動(dòng)作的事件。定時(shí)定量,動(dòng)態(tài)檢測(cè)。 如何實(shí)現(xiàn)?從第一次動(dòng)作開始計(jì)時(shí),計(jì)滿m時(shí)間后或動(dòng)作次數(shù)不足n則將時(shí)間從第二次動(dòng)作為起始算起。 注意,計(jì)滿m時(shí)間后,可能發(fā)生i(i<n)次動(dòng)作,每個(gè)動(dòng)作發(fā)生的時(shí)間都可能被用于重新計(jì)算時(shí)間域。 有沒有比較好的方法實(shí)現(xiàn)? 如果使用n個(gè)計(jì)時(shí)器來保存n次時(shí)間的起始時(shí)間的話,太浪費(fèi)RAM了,排除,不要。 其他方法呢?希望各位不吝賜教。 * - 本貼最后修改時(shí)間:2006-4-15 9:47:53 修改者:gtw |
| 2樓: | >>參與討論 |
| 作者: xwj 于 2006/4/14 18:29:00 發(fā)布:
保存每一次動(dòng)作的時(shí)間,然后再作判斷 |
|
| 3樓: | >>參與討論 |
| 作者: gtw 于 2006/4/14 19:01:00 發(fā)布:
呵呵,如我題中,費(fèi)RAM啊。 |
|
| 4樓: | >>參與討論 |
| 作者: taoest 于 2006/4/15 11:07:00 發(fā)布:
高通 用類似高通的算法 嘗試一下。 bit input=0,OUTPUT=0; int m,n; int measureValue=m; int timeStated=0; while(tickcount()) { measureValue--; if(measureValue<0)measureValue=0; if(input==1) OUTPUT+=m/n; if(timeStated<m)timeStated++; else { if(OUTPUT>=m) OUTPUT=1; else OUTPUT=0; } doSomeThing(); } //以上為偽代碼 // m,n要取合適的值,使M/N為整數(shù); //tickcount() 為延時(shí)程序,一個(gè)時(shí)間單位。 |
|
| 5樓: | >>參與討論 |
| 作者: yewuyi 于 2006/4/15 11:35:00 發(fā)布:
計(jì)滿m時(shí)間后動(dòng)作次數(shù)足n要如何辦??? |
|
| 6樓: | >>參與討論 |
| 作者: gtw 于 2006/4/15 13:31:00 發(fā)布:
研究中 計(jì)滿m時(shí)間后動(dòng)作次數(shù)足n要如何辦??? 計(jì)滿m時(shí)間內(nèi)動(dòng)作次數(shù)足n,就完成了實(shí)時(shí)檢測(cè)啊……ye大哥 |
|
| 7樓: | >>參與討論 |
| 作者: dengm 于 2006/4/15 13:59:00 發(fā)布:
增量 |
|
| 8樓: | >>參與討論 |
| 作者: gtw 于 2006/4/15 14:11:00 發(fā)布:
即使是增量 即使是增量,假如兩次事件相隔較長(zhǎng),這個(gè)增量仍有可能達(dá)到最大值啊。 |
|
| 9樓: | >>參與討論 |
| 作者: gtw 于 2006/4/15 14:31:00 發(fā)布:
taoest兄,問題的麻煩之處在于 taoest兄,問題的麻煩之處在于假如從第一次事件開始m分鐘后未滿n次事件,本次檢測(cè)并未結(jié)束,m時(shí)間段是動(dòng)態(tài)的,即0~m時(shí)間內(nèi)沒有滿足n次事件則檢查1~m+1內(nèi)是否滿足,如此等等 否則不會(huì)這么難了 * - 本貼最后修改時(shí)間:2006-4-15 14:33:43 修改者:gtw |
|
| 10樓: | >>參與討論 |
| 作者: hjf8031 于 2006/4/15 14:37:00 發(fā)布:
to:gtw 這個(gè)問題不錯(cuò)! 1. 從純理論的角度感覺省不了RAM.搞編碼不知能不能行得通? 2. 在你的應(yīng)用中應(yīng)該有一點(diǎn)規(guī)律吧?那怕是一點(diǎn)點(diǎn),可以搞搞模糊算法. |
|
| 11樓: | >>參與討論 |
| 作者: gtw 于 2006/4/15 15:10:00 發(fā)布:
to:hjf8031 實(shí)際上 應(yīng)該講,如果用編碼的方法,編碼越細(xì),效果越好,但占用RAM越多。編碼少,則中間會(huì)漏數(shù)……難題。 事件的發(fā)生完全是隨機(jī)的,目前除了用大RAM,我還沒想到其他好方法。 這應(yīng)該是個(gè)高通的問題,但如何實(shí)時(shí)檢測(cè)不漏數(shù),還不大容易。 |
|
| 12樓: | >>參與討論 |
| 作者: xwj 于 2006/4/15 16:45:00 發(fā)布:
m多大?n多大? |
|
| 13樓: | >>參與討論 |
| 作者: gtw 于 2006/4/15 16:59:00 發(fā)布:
比方說 比方說,n在1~100次,m在1~10000個(gè)檢測(cè)周期 但是,主要是,我們能不能找一種通用的方法? |
|
| 14樓: | >>參與討論 |
| 作者: dengm 于 2006/4/16 9:26:00 發(fā)布:
變長(zhǎng) n在1~100次,m在1~10000 RAM 要求最大 應(yīng)在 n=100, m=10000 時(shí) m/n = 100 7 bits 增量 bits format 0 -- 127 0 + 7 bits 0xxxxxxx 128 -- 1023 10 + 10 bits 10xxxxxx xxxx 1024 --16383 11 + 14 bits 11xxxxxx xxxxxxxx 77 個(gè) 128 + 23個(gè) 24 時(shí): 77 * 1.5 + 23 = 139 bytes 為RAM最大值 * - 本貼最后修改時(shí)間:2006-4-16 10:53:32 修改者:dengm |
|
| 15樓: | >>參與討論 |
| 作者: taoest 于 2006/4/17 11:03:00 發(fā)布:
動(dòng)態(tài) 我給的程序是動(dòng)態(tài)的,請(qǐng)問你看了沒有? |
|
| 16樓: | >>參與討論 |
| 作者: gtw 于 2006/4/17 15:48:00 發(fā)布:
可能是沒能理解taoest兄的意思 用類似高通的算法 嘗試一下。 bit input=0,OUTPUT=0; int m,n; int measureValue=m; int timeStated=0; int eventRcord = 0x0000; // 增加該量,用于記錄 while(tickcount()) { // measureValue作用僅為組成一個(gè)m時(shí)長(zhǎng)的時(shí)鐘?該時(shí)鐘可一直運(yùn)行 measureValue--; if(measureValue<0)measureValue=0; ---->?:measureValue=m,沒什么意義 if(input==1) eventRcord+=m/n; // 檢測(cè)到一次事件,并記錄 if(timeStated<m){ timeStated++; // 該時(shí)鐘啟動(dòng)后運(yùn)行滿m時(shí)長(zhǎng)后即停止 }else{ // timeStated運(yùn)行完允許輸出 if(eventRcord>=m) // 但eventRecord不能只加不減啊 OUTPUT=1; else OUTPUT=0; // 當(dāng)前時(shí)間前m時(shí)長(zhǎng)內(nèi)不足n次事件,eventRcord應(yīng)當(dāng)減去一個(gè)量 } doSomeThing(); } //以上為偽代碼 // m,n要取合適的值,使M/N為整數(shù); //tickcount() 為延時(shí)程序,一個(gè)時(shí)間單位。 |
|
| 17樓: | >>參與討論 |
| 作者: taoest 于 2006/4/21 18:30:00 發(fā)布:
程序有誤 不好意思,程序有點(diǎn)錯(cuò)誤 用類似高通的算法 嘗試一下。 bit input=0,OUTPUT=0; int m,n; int measureValue=m; int timeStated=0; while(tickcount()) { measureValue--; if(measureValue<0)measureValue=0; if(input==1) measureValue+=m/n; //這行改過 if(timeStated<m)timeStated++; //這個(gè)判斷可能是多余的,因?yàn)閙easure VALUE本來就有這個(gè)功能。 else { if(measureValue>=m) OUTPUT=1;//這行改過 else OUTPUT=0; } doSomeThing(); } //以上為偽代碼 // m,n要取合適的值,使M/N為整數(shù); //tickcount() 為延時(shí)程序,一個(gè)時(shí)間單位。 |
|
| 18樓: | >>參與討論 |
| 作者: gtw 于 2006/4/22 12:24:00 發(fā)布:
研究中…… |
|
| 19樓: | >>參與討論 |
| 作者: gtw 于 2006/4/23 8:37:00 發(fā)布:
是的,這種算法可近似解決該問題 但主要是事件發(fā)生或撤銷的時(shí)間與系統(tǒng)流逝的時(shí)間不一致,不能完全定量。 你說的對(duì),要么用老辦法解決,要么改變動(dòng)作輸出方式 |
|
| 20樓: | >>參與討論 |
| 作者: gtw 于 2006/4/23 9:14:00 發(fā)布:
我提出的定時(shí)定量看來與高通還是有區(qū)別的 可以看一下附件的演示 左邊的out指示是高通算法,右邊的是記錄時(shí)間 |
|
| 21樓: | >>參與討論 |
| 作者: dengm 于 2006/4/24 8:34:00 發(fā)布:
n在1~100次,m在1~10000個(gè)檢測(cè)周期時(shí),峰值用多少ram能接受? |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |