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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6646|回復(fù): 16
收起左側(cè)

單片機(jī)程序用delay延時(shí)會(huì)造成阻塞嗎

  [復(fù)制鏈接]
ID:525511 發(fā)表于 2019-10-24 17:05 | 顯示全部樓層 |閱讀模式
iic.png

我看網(wǎng)上的例程,I2C,液晶時(shí)序等都用了很多的delay延時(shí)函數(shù),里面就是個(gè)空循環(huán),實(shí)際項(xiàng)目開發(fā)中也是這樣用的嗎?這樣不會(huì)影響速度嗎?
假如I2C有很多數(shù)據(jù)要讀寫,這些delay加起來的延時(shí)就不少了吧,這樣程序不就是光在I2C上耗著了,其它事也處理不了啦?程序會(huì)阻塞吧?
再萬一在延時(shí)的時(shí)候遇上中斷了,I2C上的數(shù)據(jù)不會(huì)錯(cuò)亂嗎?
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2019-10-24 18:13 | 顯示全部樓層
該延時(shí)一般只有5us左右,是IIC讀寫時(shí)序要求的,讀寫速度符合IIC總線規(guī)范,如遇中斷,中斷程序應(yīng)該保護(hù)原程序的現(xiàn)場(chǎng),不會(huì)造成混亂,萬一偶爾出錯(cuò),程序應(yīng)該具有糾錯(cuò)功能
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2019-10-24 20:17 | 顯示全部樓層
你是懷疑完全正確,確實(shí)會(huì)發(fā)生你所擔(dān)心的事!所以高手多不用這種“硬”DELAY做延時(shí)。
沙發(fā)的說法,我不贊同。中斷會(huì)占用CPU時(shí)間,這個(gè)時(shí)間多長(zhǎng),又不確定,極可能使原先程序的時(shí)序受到干擾而出錯(cuò)。
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2019-10-25 08:44 | 顯示全部樓層
延時(shí)本來的目的就是為了阻塞呀!就是為了讓程序在這等著
對(duì)于中斷而言,現(xiàn)場(chǎng)保護(hù)是一定要有的
進(jìn)入中斷之后就先把IIC相關(guān)的數(shù)據(jù)先保存,中斷返回之前再取回?cái)?shù)據(jù)就可以了,IIC的工作是有時(shí)鐘的,進(jìn)入中斷了,時(shí)鐘也跟關(guān)閉了,IIC器件就停止數(shù)據(jù)傳輸了,中斷返回再繼續(xù)工作就可以了

對(duì)于你所說的問題,不同的人會(huì)有不同的解決方法,可以考慮使用硬件IIC,有的單片機(jī)是有硬件IIC端口的.

回復(fù)

使用道具 舉報(bào)

ID:625395 發(fā)表于 2019-10-25 09:11 | 顯示全部樓層
學(xué)習(xí)了,都是經(jīng)驗(yàn)豐富的高手啊。太贊了.
回復(fù)

使用道具 舉報(bào)

ID:525511 發(fā)表于 2019-10-25 14:34 | 顯示全部樓層
Y_G_G 發(fā)表于 2019-10-25 08:44
延時(shí)本來的目的就是為了阻塞呀!就是為了讓程序在這等著
對(duì)于中斷而言,現(xiàn)場(chǎng)保護(hù)是一定要有的
進(jìn)入中斷之后 ...

就是說延時(shí)是必不可少了?單片機(jī)速度再快也沒用,如果使用IIC的話整個(gè)系統(tǒng)的速度就會(huì)被IIC拖慢了?
有沒有可能延時(shí)的這段時(shí)間去做其它事,程序不用在這等著?

硬件IIC這個(gè)并不是每一個(gè)單片機(jī)都有呀
回復(fù)

使用道具 舉報(bào)

ID:525511 發(fā)表于 2019-10-25 14:35 | 顯示全部樓層
yzwzfyz 發(fā)表于 2019-10-24 20:17
你是懷疑完全正確,確實(shí)會(huì)發(fā)生你所擔(dān)心的事!所以高手多不用這種“硬”DELAY做延時(shí)。
沙發(fā)的說法,我不贊 ...

如果不用delay延時(shí),還有什么做法呢?
回復(fù)

使用道具 舉報(bào)

ID:525511 發(fā)表于 2019-10-25 14:42 | 顯示全部樓層
csmyldl 發(fā)表于 2019-10-24 18:13
該延時(shí)一般只有5us左右,是IIC讀寫時(shí)序要求的,讀寫速度符合IIC總線規(guī)范,如遇中斷,中斷程序應(yīng)該保護(hù)原程序的 ...

讀寫速度是能夠符合IIC的規(guī)范,我的意思不是說影響IIC的數(shù)據(jù)速度,而是其它地方的,比如同一系統(tǒng)上有IIC也
有SPI,CAN等等速度比IIC快的,但用IIC的時(shí)候用了delay延時(shí)了,程度在那等著了,其它地方不動(dòng)了,那整個(gè)系統(tǒng)的運(yùn)行速度不是被拖慢了?
回復(fù)

使用道具 舉報(bào)

ID:606366 發(fā)表于 2019-10-25 16:00 | 顯示全部樓層
老夫任我行 發(fā)表于 2019-10-25 14:42
讀寫速度是能夠符合IIC的規(guī)范,我的意思不是說影響IIC的數(shù)據(jù)速度,而是其它地方的,比如同一系統(tǒng)上有IIC ...

系統(tǒng)的運(yùn)行速度是跟芯片的頻率有關(guān),這個(gè)延時(shí)是根據(jù)IIC的時(shí)序來的,其他地方比iic快的話當(dāng)程序運(yùn)行到延時(shí)函數(shù)的時(shí)候并不是在等待,而是一直在做運(yùn)算,碰到中斷,處理完中斷程序后,如果不影響iic的讀寫操作是可以的,畢竟中斷里的代碼一般不會(huì)有延時(shí),處理起來比較快
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2019-10-25 17:12 | 顯示全部樓層
首先要考慮的是IIC時(shí)序的空隙是否能夠利用?如果能夠利用,那才有討論的余地。
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2019-10-26 01:52 | 顯示全部樓層
yzwzfyz 發(fā)表于 2019-10-24 20:17
你是懷疑完全正確,確實(shí)會(huì)發(fā)生你所擔(dān)心的事!所以高手多不用這種“硬”DELAY做延時(shí)。
沙發(fā)的說法,我不贊 ...

你用的詞是"極可能",不是一定會(huì)出錯(cuò),我也沒說不會(huì)出錯(cuò),對(duì)編程者來說,就是要在程序中避免這種出錯(cuò),提高通信的可靠性,所以如果偶爾發(fā)生了錯(cuò),程序要能舍棄錯(cuò)誤的數(shù)據(jù),重新獲取正確的數(shù)據(jù),因此不會(huì)造成IIC讀取出來的數(shù)據(jù)錯(cuò)亂樓主所提到的擔(dān)心拖慢系統(tǒng)速度,這是毫無疑問的,計(jì)算機(jī)主頻3GHz,但外設(shè)均達(dá)不到這個(gè)速度,只要與外設(shè)通信,一定會(huì)拖慢速度,設(shè)計(jì)系統(tǒng)是只有選較快的外設(shè)才能提高系統(tǒng)速度
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2019-10-26 10:17 | 顯示全部樓層
老夫任我行 發(fā)表于 2019-10-25 14:34
就是說延時(shí)是必不可少了?單片機(jī)速度再快也沒用,如果使用IIC的話整個(gè)系統(tǒng)的速度就會(huì)被IIC拖慢了?
有沒 ...

不管是IIC還是在其它器件,有的延時(shí)是一定要有的,情況也確實(shí)是像你所說的那樣,這延時(shí)一下,那延時(shí)一下,MCU會(huì)花很多的時(shí)間在等待延時(shí)上,整個(gè)的系統(tǒng)也是會(huì)慢很多
但這也只是相對(duì)于MCU的執(zhí)行時(shí)間而言的,但更多的時(shí)候,對(duì)于實(shí)際應(yīng)用來說,單片機(jī)反而是太快了,有時(shí)候是不需要那么快的
打個(gè)比方,你這個(gè)是一個(gè)自動(dòng)出售飲水的機(jī)器,IIC器件用于保存今日總收入,那么,你想一下,當(dāng)一個(gè)人完成交易到下一個(gè)人來進(jìn)行交易的時(shí)候,中間至少也是幾秒鐘的時(shí)間,對(duì)于幾個(gè)MHZ的單片機(jī)來說,這幾秒就可以幾百萬條指令了,或者是說,你機(jī)器給水多供水1mS和少供水1mS是沒有區(qū)別的.或者是一個(gè)自動(dòng)開關(guān)燈電路,早開0.001秒和晚開0.001秒,區(qū)別并不大,等于是沒有區(qū)別的了

當(dāng)然,也會(huì)有對(duì)時(shí)間要求相當(dāng)高的應(yīng)用,遇上這種情況,一般都是按照代行等級(jí)來重新設(shè)定元件和程序的,比如,你的電路對(duì)于一個(gè)幾微秒的時(shí)鐘信號(hào)一定要捕捉到,那么,就以這一點(diǎn)為最高優(yōu)先等級(jí),其它的設(shè)定都得為這個(gè)讓路:不用IIC器件,捕捉使用最高等級(jí)的中斷,捕捉相關(guān)代碼使用匯編語(yǔ)言
回復(fù)

使用道具 舉報(bào)

ID:373499 發(fā)表于 2019-10-26 12:42 | 顯示全部樓層
確實(shí)是會(huì)堵塞,但是只堵塞個(gè)幾u(yù)s,這個(gè)不用擔(dān)心的
回復(fù)

使用道具 舉報(bào)

ID:523997 發(fā)表于 2019-10-26 16:18 | 顯示全部樓層
延時(shí)有兩種方法,一種是用軟件延時(shí),即寫延時(shí)子程序,這種方法是讓單片機(jī)執(zhí)行無用的指令,就是為了延時(shí),延時(shí)期間就不能做其他事情了,很浪費(fèi)單片機(jī)的時(shí)間。這種方法是在單片機(jī)不忙的情況下用,反正閑著也是閑著。 第二種方法就是你要求的,即能延時(shí),又不耽誤主程序的運(yùn)行,用定時(shí)器T0或T1定時(shí),設(shè)置定時(shí)時(shí)間后,定時(shí)器開始計(jì)時(shí),主程序繼續(xù)執(zhí)行,不用管定時(shí)器,當(dāng)定時(shí)時(shí)間到,定時(shí)器就會(huì)申請(qǐng)中斷,單片機(jī)就響應(yīng)中斷,處理定時(shí)子程序需要完成的工作,完成后返回到主程序繼續(xù)主程序的執(zhí)行,這是最合理的方法,充分利用了單片機(jī)的資源,互不影響。
回復(fù)

使用道具 舉報(bào)

ID:517758 發(fā)表于 2019-10-26 21:35 | 顯示全部樓層
delay函數(shù)會(huì)造成后續(xù)代碼阻塞,一般會(huì)將代碼放到中斷中處理
回復(fù)

使用道具 舉報(bào)

ID:630739 發(fā)表于 2019-10-27 00:36 | 顯示全部樓層
會(huì)呀  延時(shí)不就是用代碼阻塞嘛
回復(fù)

使用道具 舉報(bào)

ID:630813 發(fā)表于 2019-10-27 10:59 | 顯示全部樓層
應(yīng)該會(huì)吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品日本一区二区在线播放 | 久久成人国产精品 | 91中文在线观看 | 天堂色区| 欧美日韩视频在线播放 | 国产日韩欧美在线 | 国产亚洲网站 | 日韩国产黄色片 | 在线免费观看a级片 | 在线免费激情视频 | 99色播 | 亚洲精品免费观看 | 99福利视频导航 | 久久久久久久久久久久久九 | 精品乱子伦一区二区三区 | 日韩在线一区二区 | 性精品| www成人啪啪18 | 亚洲成人免费在线观看 | 九九热免费在线观看 | 高清视频一区二区三区 | 成人免费视频一区二区 | 一区二区精品 | 91精品国产一区 | 久久久精品网站 | 黄视频网址 | 国产无人区一区二区三区 | 久久精品av麻豆的观看方式 | 一区二区三区不卡视频 | 亚洲日韩中文字幕一区 | 中文字幕在线播放第一页 | 超碰97人人人人人蜜桃 | 香蕉视频在线播放 | 国产精品美女久久久久久免费 | 亚洲午夜网 | 国产精品视频一区二区三区 | 欧美成人视屏 | 国产免费一区二区 | 亚洲人精品午夜 | 黄色一级电影在线观看 | 一区二区福利视频 |