久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 21448|回復: 16
打印 上一主題 下一主題
收起左側

為什么盡量在單片機中斷函數中不要使用延時?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:330668 發表于 2018-5-15 19:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
為什么盡量在單片機的中斷函數中不要使用延時 ,我們老師這樣說了,但還沒告訴我們原因
我們現在開始接觸單片機,還不清楚后面的知識。為什么盡量不要用延時呢 求問各位大佬
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

來自 9#
ID:155507 發表于 2018-8-31 18:53 | 只看該作者
通常在中斷子程序中是不調用延時子程序的,這樣會增加中斷處理時間,如果有其它低級中斷了,就會延誤響應中斷了。

所以,中斷子程序中不要寫調用延時子程序,中斷子程序也不要寫得過長,處理過多的任務,要盡快處理后及時返回,如果中斷一次有很多任務需要執行完全,可以在中斷子程序中設置一個標志位,在主程序中查這個標志位,當標志為1時,就在主程序中完成這些任務,這樣就不會影響其它中斷源的中斷,也不會使中斷產生混亂。

評分

參與人數 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

沙發
ID:389283 發表于 2018-8-31 08:38 | 只看該作者
使用延時導致整體的效率變低,相當于機器在空轉,沒有做任何事,空轉的這段時間可以去干其他的事情
回復

使用道具 舉報

板凳
ID:391903 發表于 2018-8-31 11:07 | 只看該作者
CPU利用率降低,代碼執行周期較長!
回復

使用道具 舉報

地板
ID:391335 發表于 2018-8-31 16:08 | 只看該作者
中斷等級比較高,CPU會優先處理中斷,延時有點浪費資源
回復

使用道具 舉報

5#
ID:392046 發表于 2018-8-31 16:36 | 只看該作者
中斷其實就是讓你mcu臨時干一下別的工作,中斷函數越精簡,程序理論效率越高。以后接觸到操作系統你就會有深入的體會。
回復

使用道具 舉報

6#
ID:34853 發表于 2018-8-31 17:19 | 只看該作者
51黑電子是個好的學習網站,幫助了我很多     謝謝
回復

使用道具 舉報

7#
ID:1 發表于 2018-8-31 17:21 | 只看該作者
somayboy 發表于 2018-8-31 17:19
51黑電子是個好的學習網站,幫助了我很多     謝謝

不要發與提問無關的內容,這樣會影響到
回復

使用道具 舉報

8#
ID:392085 發表于 2018-8-31 18:17 | 只看該作者
中斷觸發時會跳進中斷中執行,而主函數中的程序會壓入堆棧中停止執行。如果主函數中程序很短,中斷執行的時間可以長。具體的需要根據所要實現的具體功能而定,機器是死的,人是活的。
回復

使用道具 舉報

10#
ID:367460 發表于 2018-8-31 19:27 | 只看該作者
杜絕純延時 ,如果代碼多的話  完全是浪費時間,小的程序或許不明顯,但是假如你將來做大一點的程序的話 弊病就顯示出來了,浪費cpu   用定時器中斷就比較好了
回復

使用道具 舉報

11#
ID:155507 發表于 2018-8-31 19:32 | 只看該作者
盡量在單片機中斷函數中不要使用延時,如果調用延時函數。 如果延時函數時間過長,則下次中斷有可能不會被觸發,類似按鍵不靈敏,還有可能因為中斷和主程序都在使用延時函數,而和此相關的寄存器的值沒有保存,導致延時時間出錯。
回復

使用道具 舉報

12#
ID:391754 發表于 2018-8-31 22:28 | 只看該作者
不光是中斷,就是任務中,一般都不要用過長的delay,時間長  可以用定時器,在定時器中設置變量,在程序中查詢,用了過多delay,這個叫阻塞了,而且中斷有優先級,如果高優先級的中斷中,使用了延時函數,低中斷可能會遺漏
回復

使用道具 舉報

13#
ID:405708 發表于 2018-10-21 11:27 | 只看該作者
本帖最后由 psuxaog 于 2018-10-21 11:42 編輯

如果你用定時中斷置標志位,主程序查詢標志位的情況,如果中斷中有延時,且大于定時時間,此時會出現主程序無法執行的情況,如果有用到看門狗,單片機會重復復位,即使沒有看門狗,主程序中的程序不運行也是要命的。
      中斷中用的變量也是有講究的,比如以下情況:
      下面的代碼中gValTmp是16位變量,TMP_Process是主循環中的程序,51單片機是8位機,給gValTmp賦值的時候是一個字節是個字節處理的,16位是兩個字節,如果已經處理了第一個字節的時候發生了中斷,那中斷中的gValTmp的值就不是正常的值(另一個字節沒有刷新呀),會導致數據錯亂。
  1. u16 gValTmp = 0;
  2. void TIM0_IRQ interrupt IRQ_T0
  3. {
  4.     TL0 = XXX;
  5.     TH0 = XXX;
  6.     TMP_SendData(gValTmp);
  7. }
  8. void TMP_Process(void)
  9. {
  10.     gValTmp = TMP_GetValue();
  11. }


復制代碼
將以上代碼稍作修改,這個問題就可以解決了:

  1. u16 gValTmp = 0;
  2. bit gFlagUpdated = 0;
  3. void TIM0_IRQ interrupt IRQ_T0
  4. {
  5.     TL0 = XXX;
  6.     TH0 = XXX;
  7.     if(gFlagUpdated)
  8.     {
  9.         gFlagUpdated = 0;
  10.         TMP_SendData(gValTmp1);
  11.     }
  12. }
  13. void TMP_Process(void)
  14. {
  15.     gValTmp = TMP_GetValue();
  16.     gFlagUpdated = 1;
  17. }
復制代碼
除了以上兩種方式,也可以在賦值前關中斷,賦值后開中斷的方式,不會不推薦這樣方式,容易導致時基不準。



回復

使用道具 舉報

14#
ID:413031 發表于 2018-10-21 12:50 | 只看該作者
中斷里面加了延時的話,會導致下一個中斷不能及時響應
回復

使用道具 舉報

15#
ID:413081 發表于 2018-10-21 13:48 | 只看該作者
因為沒有必要,反而增加了系統負擔,增加了處理時間。
回復

使用道具 舉報

16#
ID:413082 發表于 2018-10-21 13:58 | 只看該作者
中斷子程序中不要寫調用延時子程序,中斷子程序也不要寫得過長,處理過多的任務,要盡快處理后及時返回,如果中斷一次有很多任務需要執行完全,可以在中斷子程序中設置一個標志位,在主程序中查這個標志位,當標志為1時,就在主程序中完成這些任務,這樣就不會影響其它中斷源的中斷,也不會使中斷產生混亂。
回復

使用道具 舉報

17#
ID:413154 發表于 2018-10-21 16:48 | 只看該作者
中斷容易產生混亂
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区成人 | 欧美国产一区二区 | 亚洲精品视频在线播放 | 黄色网络在线观看 | 欧美专区在线 | 亚洲一区二区av在线 | 日韩三级免费网站 | 国产婷婷色一区二区三区 | 在线观看中文字幕视频 | 日韩在线免费电影 | 久久免费视频1 | 成人做爰www免费看视频网站 | 一级做a爰片性色毛片16 | 欧美舔穴 | 国产视频1区 | 日韩www| 国产成人影院 | 天天天天天天天干 | 欧美综合一区 | 免费人成在线观看网站 | 综合久久99| 成人av网站在线观看 | 国产精品毛片一区二区在线看 | 国产精品免费观看 | 最新国产精品 | 亚洲国产精品久久久久秋霞不卡 | 欧美1区2区 | 久久久久久久久久久久91 | 欧美一级在线观看 | 成人免费淫片aa视频免费 | 国产性色视频 | 免费艹逼视频 | 国产精品久久久久久238 | 黑人精品 | www久久久| 亚洲欧美在线免费观看 | 亚洲精品一区二区三区蜜桃久 | 欧美性区 | 在线播放国产一区二区三区 | 观看毛片 | 国产视频在线一区二区 |