標(biāo)題: 問下大家個(gè)問題,單片機(jī)串口中斷采用定時(shí)器超時(shí)接收方式 [打印本頁(yè)]

作者: Xiuer66    時(shí)間: 2023-6-29 16:47
標(biāo)題: 問下大家個(gè)問題,單片機(jī)串口中斷采用定時(shí)器超時(shí)接收方式
串口中斷定時(shí)器超時(shí)接收,串口優(yōu)先級(jí)和定時(shí)器優(yōu)先級(jí)怎樣設(shè)置好?是一個(gè)搶占0子1一個(gè)搶占0子2這樣的好,還是一個(gè)搶占0子1一個(gè)搶占1子1這樣的好?對(duì)程序有什么影響?
作者: Hephaestus    時(shí)間: 2023-6-29 20:22
都一樣,兩者都分輕重緩急。
作者: 188610329    時(shí)間: 2023-6-29 20:30
判斷接收超時(shí),不用設(shè)置優(yōu)先級(jí),最低優(yōu)先即可。
作者: wulin    時(shí)間: 2023-6-29 21:31
串口接收超時(shí)沒有多么講究,大概2~3ms沒有收到數(shù)據(jù)即可判斷接收完畢。只要程序不是寫得怪怪的,不必考慮優(yōu)先級(jí)。
作者: lkc8210    時(shí)間: 2023-6-29 22:39

大致上是這樣

作者: Xiuer66    時(shí)間: 2023-6-30 09:07
本帖最后由 Xiuer66 于 2023-6-30 10:03 編輯

我用按鍵外部中斷向外發(fā)送數(shù)據(jù),只發(fā)送沒有接收,按鍵按一下,串口就發(fā)送10字節(jié)的一個(gè)數(shù)據(jù),沒有用到定時(shí)器,外部中斷優(yōu)先級(jí)搶占1子0 串口搶占2子0 這樣有可能會(huì)卡住,外部中斷優(yōu)先級(jí)搶占1子0 串口搶占1子1這樣就不會(huì)卡住,外部中斷正常,串口異常不能發(fā)送數(shù)據(jù),是因?yàn)橥獠恐袛鄡?yōu)先級(jí)搶占1子0 串口搶占2子0這樣外部中斷有可能打斷串口中斷而導(dǎo)致之后的串口中斷異常嗎?外部中斷優(yōu)先級(jí)搶占1子0 串口搶占1子1,串口中斷執(zhí)行中就不會(huì)被外部中斷打斷,等串口中斷執(zhí)行完,外部中斷才會(huì)執(zhí)行,所以不會(huì)異常?
作者: coody_sz    時(shí)間: 2023-6-30 09:50
慢速事件,我都不開優(yōu)先級(jí)。
作者: lkc8210    時(shí)間: 2023-6-30 11:35
Xiuer66 發(fā)表于 2023-6-30 09:07
我用按鍵外部中斷向外發(fā)送數(shù)據(jù),只發(fā)送沒有接收,按鍵按一下,串口就發(fā)送10字節(jié)的一個(gè)數(shù)據(jù),沒有用到定時(shí)器 ...



作者: dwping    時(shí)間: 2023-7-1 21:15
一種常見的做法是將串口中斷設(shè)置為高優(yōu)先級(jí),將定時(shí)器中斷設(shè)置為低優(yōu)先級(jí)。這樣可以確保在串口接收到數(shù)據(jù)時(shí)能夠及時(shí)響應(yīng),并且不會(huì)因?yàn)槎〞r(shí)器中斷而延遲處理串口數(shù)據(jù)。  在這種設(shè)置下,串口中斷具有高優(yōu)先級(jí),可以搶占正在執(zhí)行的定時(shí)器中斷。這意味著如果在定時(shí)器中斷處理期間發(fā)生了串口中斷,系統(tǒng)會(huì)立即切換到串口中斷處理程序,完成串口數(shù)據(jù)的接收和處理。然后,再返回到定時(shí)器中斷處理程序繼續(xù)執(zhí)行。  相比之下,如果將兩個(gè)中斷都設(shè)置為相同的優(yōu)先級(jí),例如都是搶占優(yōu)先級(jí)0,子優(yōu)先級(jí)1,那么在定時(shí)器中斷處理期間發(fā)生的串口中斷將無法立即得到處理,而必須等待定時(shí)器中斷處理完成后才能處理串口中斷。這可能會(huì)導(dǎo)致串口數(shù)據(jù)的丟失或延遲處理。  總的來說,將串口中斷設(shè)置為高優(yōu)先級(jí),將定時(shí)器中斷設(shè)置為低優(yōu)先級(jí),可以確保及時(shí)處理串口數(shù)據(jù),提高系統(tǒng)的響應(yīng)能力。而將兩個(gè)中斷都設(shè)置為相同的優(yōu)先級(jí)可能會(huì)導(dǎo)致串口數(shù)據(jù)的延遲處理或丟失。但是具體的設(shè)置還需要根據(jù)實(shí)際應(yīng)用的需求和系統(tǒng)的整體設(shè)計(jì)來進(jìn)行權(quán)衡和調(diào)整。
作者: cnfloatleaf    時(shí)間: 2023-7-2 01:31
最好不要用多個(gè)中斷,程序容易出問題。只用一個(gè)定時(shí)器中斷,串口盡可能用查詢方式。
作者: wulin    時(shí)間: 2023-7-2 09:29
Xiuer66 發(fā)表于 2023-6-30 09:07
我用按鍵外部中斷向外發(fā)送數(shù)據(jù),只發(fā)送沒有接收,按鍵按一下,串口就發(fā)送10字節(jié)的一個(gè)數(shù)據(jù),沒有用到定時(shí)器 ...

用外部中斷作按鍵輸入本身就不是一種好的選擇,在外部中斷函數(shù)里運(yùn)行串口發(fā)送程序更是給自己挖坑。把P3.2改為普通按鍵輸入口就沒有這些麻煩了。
作者: li64331218    時(shí)間: 2023-7-2 14:12
中斷和定時(shí)器同時(shí)用,中斷級(jí)別要高一些。定時(shí)器次之。對(duì)程序的影響要看具體執(zhí)行的動(dòng)作及復(fù)雜性。一般影響不大。
作者: dwping    時(shí)間: 2023-7-2 15:41
串口中斷和定時(shí)器中斷的優(yōu)先級(jí)設(shè)置需要根據(jù)具體的應(yīng)用場(chǎng)景和要求來確定。下面是兩種常見的優(yōu)先級(jí)設(shè)置方式及其可能的影響:  串口搶占定時(shí)器:通過將串口中斷的優(yōu)先級(jí)設(shè)置為高于定時(shí)器中斷,可以確保在接收到串口數(shù)據(jù)時(shí)能夠立即中斷并處理。這種設(shè)置可以有效地處理實(shí)時(shí)性要求較高的串口通信任務(wù),但可能會(huì)對(duì)定時(shí)器的周期性執(zhí)行產(chǎn)生一定的影響,因?yàn)槎〞r(shí)器中斷可能會(huì)被串口中斷所搶占。  定時(shí)器搶占串口:通過將定時(shí)器中斷的優(yōu)先級(jí)設(shè)置為高于串口中斷,可以確保定時(shí)器按照預(yù)定的周期繼續(xù)執(zhí)行,而不受串口中斷的影響。這種設(shè)置適用于對(duì)定時(shí)器中斷的周期性執(zhí)行要求較高的場(chǎng)景,但可能會(huì)延遲串口中斷的處理時(shí)間,對(duì)實(shí)時(shí)性要求較高的串口通信任務(wù)可能受到一定的影響。  具體選擇哪種優(yōu)先級(jí)設(shè)置方式取決于應(yīng)用的需求和優(yōu)先級(jí)分配。需要權(quán)衡實(shí)時(shí)性、穩(wěn)定性和其他任務(wù)的執(zhí)行需求,以確定最合適的設(shè)置方案。同時(shí),還需要注意合理設(shè)計(jì)中斷服務(wù)程序,以盡量減少中斷處理時(shí)間,避免對(duì)整體程序的性能產(chǎn)生過大的影響。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1