新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 查詢主從機中斷同步的方法

        查詢主從機中斷同步的方法

        作者: 時間:2012-08-25 來源:網絡 收藏

        while(!flag)若中斷標志flag不為1,意味著還沒有響應中斷,于是一直不停查詢
        響應中斷之后,flag會變為1,退出循環
        然后立即將flag清0,接著馬上跳轉到goto語句指定的地方,用這個來同步。
        即:在約定的時間內進行不斷查詢,查詢的單位時間很短,放棄了一個短時間的效果顯示來實現長時間的

        過程描述如下:
        上電后,主機,從機各自跑相同的效果,由于晶振的原因,會導致執行速度不同。在短時間內這樣的速度差異難以被人察覺,但是這樣的差異性是一個累加的過程,在運行了很久之后,各個不同的機器之間的差異就很明顯了。

        因此我們要在差異累加到不能忽略之前,對每個機器進行同步化處理。現在只是一條連線,從主機的IO口到各個從機的外中斷口。
        即:我們只能用外部中斷來實現同步調整。

        根據我在另一篇文章http://www.51hei.com/mcu/1168.html中的介紹可知外中斷信號是在每一個機器周期都會由硬件自動查詢的,所以,一旦有“同時的”中斷信號傳到各個不同速度的從機的中斷口的時候,各個機子都會在第一時間內響應這個中斷,,此時各個機器之間的絕對時間差異就只有一個機器周期的差異,設為Td。

        假設機器1的晶振實際工作頻率為16.001MHz
        機器周期為T1=12/(16.001*E6)

        機器2的晶振實際工作頻率為16.0009MHz
        機器周期為T2=12/(16.0009*E6)

        他們之間的差異Td=T2-T1=(12/16000900)-(12/16001000)=7.488531279295044*(e-7)=1.1046869434089*(e-9)S

        理論上我們能夠用視覺發現有不同步的差異時間為10毫秒級別,即
        1*(e-2)
        所以在這個不可避免的差異累計到我們能夠用眼睛覺得到時,需要累加
        n=1*(e-2)/1.1046869434089*(e-9)=9052338次
        而我們進行同步的時間間隔是1分鐘,那么我們依*視覺發現機子不同步的時候,同步系統已經運行了150872.3小時,約等于6286天,大概為17年!

        因此只使用一條數據線來實現同步是可行的。我們需要這樣的主機:

        循環運行6個效果函數,每個效果函數運行10次。最后一個效果函數例外,它要為同步服務,因此它的單次循環時間應當比較短暫,為了可以看到明顯效果可以多循環幾次,例如循環20次。
        在運行最后一個效果函數的第20次的中間發送一次信號,發送同步信號之后延時一定時間進入事先約定的同步效果。這個一定時間是指信號傳輸時間,被從機識別、響應的時間總和。可以用試驗方法測試取得。
        方法如下:主機與從機器使用前一段相同的程序,運行完相同程序后,主機在發送中斷信號,而從機開始用計數器計數(建議計數器初值為00,這樣好算一些),響應中斷后停止計數器。讀取當時的計數器值,就可以得到稍微準確的中斷響應時間。Ti=(12/f)*n,f為晶振頻率,n為所讀取的計數器值。獲得這個時間之后就可以使用匯編語言來進行主機的延時,這樣的效果應該是最好了。

        因此我們需要這樣的從機:
        無論是較主機快的從機,還是較主機慢的從機,都必須在主機發送中斷信號之前進入循環查詢狀態,這樣才能一起進入同步效果。因此,從機不運行最后一個效果的第20次,而在運行完第19次之后都進入循環查詢狀態,這樣雖然會有暫時的不同步現象,但是我們可以把最后一個效果的單詞循環做得很短暫,這樣就可以用短暫的不同步換取長時間的同步。

        因此我們需要這樣的--最后一個效果函數:
        單次循環時間盡量短,但是最好要大于2倍的Ti,與其他效果函數不一樣,應當循環多次,如20次



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 枣阳市| 师宗县| 建昌县| 尤溪县| 永修县| 宝山区| 侯马市| 东安县| 石阡县| 洛川县| 顺义区| 通化县| 海林市| 东辽县| 临猗县| 邢台县| 林西县| 调兵山市| 清徐县| 崇明县| 左贡县| 信宜市| 大丰市| 奉新县| 关岭| 图木舒克市| 广元市| 扬中市| 塔城市| 许昌县| 英吉沙县| 汉阴县| 奉贤区| 马山县| 阿勒泰市| 胶南市| 五华县| 三原县| 霸州市| 乌兰浩特市| 武汉市|