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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 21218|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

為什么盡量在單片機(jī)中斷函數(shù)中不要使用延時(shí)?

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

使用道具 舉報(bào)

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

所以,中斷子程序中不要寫調(diào)用延時(shí)子程序,中斷子程序也不要寫得過長,處理過多的任務(wù),要盡快處理后及時(shí)返回,如果中斷一次有很多任務(wù)需要執(zhí)行完全,可以在中斷子程序中設(shè)置一個(gè)標(biāo)志位,在主程序中查這個(gè)標(biāo)志位,當(dāng)標(biāo)志為1時(shí),就在主程序中完成這些任務(wù),這樣就不會影響其它中斷源的中斷,也不會使中斷產(chǎn)生混亂。

評分

參與人數(shù) 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:389283 發(fā)表于 2018-8-31 08:38 | 只看該作者
使用延時(shí)導(dǎo)致整體的效率變低,相當(dāng)于機(jī)器在空轉(zhuǎn),沒有做任何事,空轉(zhuǎn)的這段時(shí)間可以去干其他的事情
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

地板
ID:391335 發(fā)表于 2018-8-31 16:08 | 只看該作者
中斷等級比較高,CPU會優(yōu)先處理中斷,延時(shí)有點(diǎn)浪費(fèi)資源
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

6#
ID:34853 發(fā)表于 2018-8-31 17:19 | 只看該作者
51黑電子是個(gè)好的學(xué)習(xí)網(wǎng)站,幫助了我很多     謝謝
回復(fù)

使用道具 舉報(bào)

7#
ID:1 發(fā)表于 2018-8-31 17:21 | 只看該作者
somayboy 發(fā)表于 2018-8-31 17:19
51黑電子是個(gè)好的學(xué)習(xí)網(wǎng)站,幫助了我很多     謝謝

不要發(fā)與提問無關(guān)的內(nèi)容,這樣會影響到
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

11#
ID:155507 發(fā)表于 2018-8-31 19:32 | 只看該作者
盡量在單片機(jī)中斷函數(shù)中不要使用延時(shí),如果調(diào)用延時(shí)函數(shù)。 如果延時(shí)函數(shù)時(shí)間過長,則下次中斷有可能不會被觸發(fā),類似按鍵不靈敏,還有可能因?yàn)橹袛嗪椭鞒绦蚨荚谑褂醚訒r(shí)函數(shù),而和此相關(guān)的寄存器的值沒有保存,導(dǎo)致延時(shí)時(shí)間出錯(cuò)。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

如果你用定時(shí)中斷置標(biāo)志位,主程序查詢標(biāo)志位的情況,如果中斷中有延時(shí),且大于定時(shí)時(shí)間,此時(shí)會出現(xiàn)主程序無法執(zhí)行的情況,如果有用到看門狗,單片機(jī)會重復(fù)復(fù)位,即使沒有看門狗,主程序中的程序不運(yùn)行也是要命的。
      中斷中用的變量也是有講究的,比如以下情況:
      下面的代碼中g(shù)ValTmp是16位變量,TMP_Process是主循環(huán)中的程序,51單片機(jī)是8位機(jī),給gValTmp賦值的時(shí)候是一個(gè)字節(jié)是個(gè)字節(jié)處理的,16位是兩個(gè)字節(jié),如果已經(jīng)處理了第一個(gè)字節(jié)的時(shí)候發(fā)生了中斷,那中斷中的gValTmp的值就不是正常的值(另一個(gè)字節(jié)沒有刷新呀),會導(dǎo)致數(shù)據(jù)錯(cuò)亂。
  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. }


復(fù)制代碼
將以上代碼稍作修改,這個(gè)問題就可以解決了:

  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. }
復(fù)制代碼
除了以上兩種方式,也可以在賦值前關(guān)中斷,賦值后開中斷的方式,不會不推薦這樣方式,容易導(dǎo)致時(shí)基不準(zhǔn)。



回復(fù)

使用道具 舉報(bào)

14#
ID:413031 發(fā)表于 2018-10-21 12:50 | 只看該作者
中斷里面加了延時(shí)的話,會導(dǎo)致下一個(gè)中斷不能及時(shí)響應(yīng)
回復(fù)

使用道具 舉報(bào)

15#
ID:413081 發(fā)表于 2018-10-21 13:48 | 只看該作者
因?yàn)闆]有必要,反而增加了系統(tǒng)負(fù)擔(dān),增加了處理時(shí)間。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

17#
ID:413154 發(fā)表于 2018-10-21 16:48 | 只看該作者
中斷容易產(chǎn)生混亂
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产99视频精品免视看9 | 欧美一级片在线看 | 欧美视频区| 99久久精品国产一区二区三区 | 99色综合| 色综合一区二区三区 | 日本三级在线 | 亚洲视频免费在线播放 | 99热都是精品 | 中文字幕欧美一区 | 欧美 视频 | 在线一级片 | 九九热在线视频观看这里只有精品 | 久视频在线观看 | 蜜桃av鲁一鲁一鲁一鲁 | 欧美成人精品一区二区男人看 | 欧美一区二区三区视频在线观看 | 亚洲精品乱码久久久久久按摩观 | 日本黄色大片免费 | 亚洲视频免费在线观看 | 污书屋 | 激情六月丁香婷婷 | 日日夜夜操天天干 | 黄色网址av | 国产日韩欧美精品一区二区 | eeuss国产一区二区三区四区 | 色偷偷噜噜噜亚洲男人 | av综合站| 日韩在线免费 | 高清国产一区二区 | 成人精品视频在线观看 | 国产精品影视在线观看 | 欧美性受xxxx白人性爽 | 欧美一二三 | 欧美国产精品一区二区三区 | 亚洲黄色av | 中文字幕 视频一区 | 九九视频在线观看 | 亚洲 欧美 日韩 在线 | 欧美不卡视频 | 91夜夜夜|