嵌入式軟體非同步程式設計 同步還是非同步?

2021-07-29 22:54:23 字數 975 閱讀 5067

非同步並不總是提高效率的,那什麼時候用同步,什麼時候用非同步呢?

mingdu.zhengatgmaildotcom

非同步要解決的是cpu和i/o速度差異的問題,所以非同步適合i/o遠慢於cpu的情況,如果i/o僅稍慢於cpu或速度相當,那麼非同步並不會提高效能。

採用非同步模式會有進出狀態機或事件排程的開銷,而同步模式沒有這些開銷,使用輪詢式同步操作i/o的額外開銷幾乎為0。

如果cpu比i/o快兩個數量級以上,那麼非同步比同步更好。比如某個系統cpu是100mhz,有個10mhz的spi裝置,假設spi裝置以字(16bit)為單位收發資料,那麼每收發乙個字大約需要160個cpu時鐘,這種情況下,使用非同步更佳。160個時鐘中或許有60個被用在進出狀態機或事件排程的開銷中,多出來的100個時鐘可以去做其它事情或者休眠以節約電能。

如果cpu僅比i/o快乙個數量級,那麼同步比非同步更好。比如某個系統cpu是50mhz,有個50mhz的spi裝置,假設spi裝置以位元組為單位收發資料,那麼每收發乙個位元組大約需要8個cpu時鐘,8個時鐘還不夠進出乙個函式呢,這種情況下,使用同步更佳。如果使用非同步模式,那麼進出狀態機的開銷假設是60個時鐘的話,那麼非同步模式反而比同步模式消耗了更多的時鐘。

如果cpu和i/o的速度比在乙個數量級和兩個數量級之間,那麼使用同步或非同步,其效果都差不多。如果一定要一決雌雄的話,就要分析非同步模式引入了多少額外的開銷,以及每個i/o請求占用多少時鐘。還是扔硬幣吧。

硬體加速器可以批量處理i/o,cpu僅需要按批次處理,而不是按位元組處理,dma就是一種典型的硬體加速器。比如某個系統cpu是50mhz,有個50mhz的spi裝置,假設spi裝置借助dma每次收發20位元組,那麼一次i/o請求需要160個時鐘。dma進一步擴大了cpu和i/o請求的速度差,把原先適合用同步方式操作的i/o變成了適合非同步方式的i/o。還有一種硬體加速器是fifo,借助fifo可以一次操作多個資料。

總而言之,同步還是非同步並不絕對,要看哪個能節省更多的時鐘。

嵌入式Linux非同步通知方式

版本 日期作者 說明v1 2020 韋東山摘自 嵌入式linux應用開發完全手冊 功能介紹 應用程式設計 應用程式要做的事情有這幾件 編寫訊號處理函式 static void sig func int sig 註冊訊號處理函式 signal sigio,sig func 開啟驅動 fd open a...

嵌入式程式設計

1 interrupt double compute area double radis 1 isr不能返回乙個值。2 isr不能傳遞引數。3 在許多處理器中浮點是不可重入的。4 printf 經常有重入和效能上的問題,所以一般不使用printf 2.volatile 1 volatile的語法和c...

嵌入式程式設計

對於簡單的應用程式,輪詢 許多時候也被稱作超級迴圈 實現起來比較簡單,而且非常適合簡單任務 見圖4.4 不過,當應用程式變得複雜或者對處理能力的要求更高時,輪詢就不合適了。例如,當乙個程序占用時間過長,其他模組在這段時間內就不會收到處理器的任何服務。即便不需要任何處理,處理器也得一直執行輪詢程式,這...