對於所有任務,無論在何種情況下,任務的執行時間 t 都應該小於時間間隔。即如果任務不能在規定的時段內完成,就中止該任務,尤其是對於以查詢方式執行的中斷程式。
比如,這樣的**是不可靠的:
// 等待, 直到ad轉換結束(檢查adci)
while((adcon & adci) == 0);
因為在某些情況下,可能由於如下原因導致系統被掛起:
a 如果模數轉換器的初始化不正確,不能確定模數轉換將被執行
b 如果模數轉換器的輸入電壓過高,那麼可能根本就不執行
c 如果沒有正確初始化變數adcon或adci,那麼可能不按要求執行
如果要求系統很可靠,則必須能夠保證沒有函式會這樣掛起。迴圈超時提供了一種簡單而有效的方法來提供這樣的保證。
迴圈超時很容易建立,其**結構的基礎是軟體延遲:
uint16 timeout_loop = 0;
...while(((adcon & adci) == 0) || (++timeout_loop == 0));
或
uint16 timeout_loop = 1;
...while(((adcon & adci) == 0) || (timeout_loop == 0))
後者的好處是可以很方便的注釋掉這種迴圈超時,這時如果再發生前面所說的錯誤,至少程式不會一直停留這這裡,而會繼續往下執行,當然緊接著後面應該有對這種錯誤的相應處理方法。
注: 這種迴圈超時因為是軟體延遲實現的,故不太容易精準的控制延遲時間,且沒有很好的可移植性,可以考慮用硬體定時器替代。
比如,假設8051定時器1已經開啟,10ms定時
while((adcon & adci) == 0) || ! tf0);
學會以合作的方式思考
對於所有任務,無論在何種情況下,任務的執行時間 t 都應該小於時間間隔。即如果任務不能在規定的時段內完成,就中止該任務,尤其是對於以查詢方式執行的中斷程式。比如,這樣的 是不可靠的 等待,直到ad轉換結束 檢查adci while adcon adci 0 因為在某些情況下,可能由於如下原因導致系統...
SQL 以面向集合的思維方式來思考
圖4 1給出了12張卡片,從中你應該可以找出6個集合。每張卡片左上角的字母表示顏色 r 紅色,g 綠色,p 紫色 試試吧。答案在本章的最後 可別作弊哦!我首先給出第乙個集合 第1行第2列 實心綠色花體 第3行第2列 實心紅色花體 和第3行第4列 實心紫色花體 這個遊戲迫使你按集合來思考,除此以外別無...
2021 03 08 關於合作的思考
2021.03.08 18 33 40 我覺得乙個人的思想境界,有乙個人思想境界的發展階段,比如說自己之前的話,做什麼事情都喜歡自己乙個人做,但是現在越來越感覺力不從心了,這個時候才感覺到和而合作的重要。若是在一開始的時候就要求自己和他的合作,並不是把重心放在技術上面,我覺得自己後面很難真正理解合作...