在嵌入式軟體開發中,比如微控制器的程式,我們一定會寫到乙個大的死迴圈的程式,也就是輪詢io口,通常用
while(1)
來實現大迴圈,程式就會在while(1)中不斷的迴圈執行一些任務,但是,任務與任務之間如果存在延時,就會大大的削弱整個架構的實時性,雖然現在的高階微控制器arm已經具有了多執行緒的機制,但是避免不了的依然是要寫死迴圈,也就是說,表面上看到程式是一起在跑的,其實是把時間切成若干份,然後進行排程,在linux核心中,fork一條程序需要排程,do_thread也需要進行排程。
最近在工作上遇到乙個這樣的問題,串列埠協議要求比如等到io口為低電平,資料才能傳送。關於這個問題,沒別的方法,按照那個架構來說只能死等while(等到io口低電平輸出),但是這樣就會遇到乙個問題,如果一直死等,萬一io沒有低電平輸出,那麼就會發生丟包的可能以及其他任務會被直接影響到執行,畢竟微控制器一般採用的架構都是順序執行的,但是看到有工程師做這樣的處理,我也就學過來了,讓while做超時處理,一旦在一定的時間內等待不到低電平輸出,那麼就讓這個迴圈退出,這樣就不會影響到其它任務的執行了,也降低了丟包了,但還是會有丟包,只能慢慢除錯了,要是有高手看到麻煩教我一下,最近我們公司也是因為這個問題卡了很久,表示傷不起,我們來看一下是怎麼實現的。
//做io口超時等待
while(1)
else //沒有的話就做超時處理,time_count是乙個定時器裡的乙個全域性變數計數器
}}
C 開發技巧 如何防止程式多次執行
最近發現很多人在論壇中問到如何防止程式被多次執行的問題的,如 所以這裡就記錄下來,希望給遇到同樣問題的朋友有所參考的,同時也是對自己的乙個積累。在介紹具體實現 之前,我們必須明確解決這個問題的思路是什麼的?下面只要分享我的乙個思考的這個問題的方式 當我們點選乙個exe檔案時,此時該exe程式將會執行...
嵌入式開發中堆疊溢位導致程式異常退出
在嵌入式開發中,曾遇到程式出現莫名其妙的錯誤導致程式無法執行,各種折騰之後,終於確定是由棧溢位導致程式掛掉。例如,有一次,定義了乙個函式 my func1,struct a param1,struct b param2 在主程序中呼叫該函式,一切ok,但是在子執行緒中呼叫該函式時,程式卻出現了段錯誤...
Delphi中如何防止執行乙個應用程式的多個例項
吳淑華 01 5 31 下午 01 56 54 實際應用中,程式設計人員有時希望某一時刻只執行應用程式的單個例項。或許是因為應用程式需要訪問專用的特殊資源,如訪問數據機或是cd rom驅動器,或許是因為應用程式需占用大量的系統資源,為保證其工作正常只能執行單一例項。無論何種原因,如果在執行第二個例項...