日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

前后台系统的精髓

發(fā)布時(shí)間:2024/4/18 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前后台系统的精髓 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
有個(gè)產(chǎn)品負(fù)責(zé)把RS485上的通訊轉(zhuǎn)到電力線(PLC)上。這樣這個(gè)產(chǎn)品主要由兩個(gè)任務(wù)組成:PLC通訊及485通訊。

第一個(gè)工程師在裸機(jī)上實(shí)現(xiàn)了功能!因?yàn)楫?dāng)時(shí)項(xiàng)目忙,沒(méi)空檢查其程序。(唉,現(xiàn)在想起來(lái),公司對(duì)軟件項(xiàng)目沒(méi)有一套成熟的管理制度,導(dǎo)致那時(shí)項(xiàng)目管理非常吃力!)

因?yàn)楣敬龅?#xff0c;第一個(gè)工程師走了。項(xiàng)目轉(zhuǎn)給第二個(gè)工程師時(shí),工程師報(bào)告說(shuō)兩個(gè)通訊老有沖突:忙485時(shí),忙不了PLC。 一檢查:原來(lái)程序里幾乎都是在main函數(shù)里用分時(shí)實(shí)現(xiàn)了兩個(gè)通訊,還有一大堆的delay調(diào)用。于是給第二個(gè)工程師指示:這樣不行的,通訊應(yīng)該盡量使用中斷來(lái)收發(fā)最低層的數(shù)據(jù)!
于是第二個(gè)工程師開(kāi)始改程序。完了報(bào)告說(shuō):不錯(cuò),有進(jìn)步了!

因?yàn)楣敬霾焕硐?#xff0c;第二個(gè)工程師很快也走了 (公司把開(kāi)發(fā)工程師的薪水跟生產(chǎn)線工程師來(lái)比--你們研發(fā)部工程師的薪水是我們公司所有工程師里最高的!)。項(xiàng)目轉(zhuǎn)給了第三個(gè)工程師時(shí),工程師報(bào)告說(shuō)有時(shí)485發(fā)送的數(shù)據(jù)PLC還是不理會(huì)!一檢查:原來(lái)第二個(gè)工程師優(yōu)化程序時(shí)竟然把所有的PLC的接收代碼放進(jìn)了PLC的接收中斷程序,把所有的485接收代碼放進(jìn)了RXD中斷程序。于是給第三個(gè)工程師指示:緊急的事務(wù)一定要用中斷處理;中斷只處理緊急事務(wù)!

其實(shí),這是前后臺(tái)系統(tǒng)最典型的應(yīng)用(也是任何一個(gè)系統(tǒng)必需要注意的):緊急的事務(wù)一定要放到前臺(tái)(前后臺(tái)系統(tǒng)里稱中斷程序是前臺(tái):可實(shí)時(shí)處理的),讓所有不緊急的事務(wù)放到后臺(tái)處理(前后臺(tái)系統(tǒng)里稱主程序里的死循環(huán)為后臺(tái):在后面處理不緊急事務(wù)的)。這樣,上面的程序就是這樣了:

主程序:系統(tǒng)初始化-》使能485發(fā)送及接收中斷-》使能PLC發(fā)送及接收中斷-》主程序的死循環(huán)。
死循環(huán)內(nèi)容:
1.如果485接收完成一個(gè)數(shù)據(jù)包:處理它,處理完后可能會(huì)開(kāi)啟一個(gè)數(shù)據(jù)包的發(fā)送,開(kāi)啟發(fā)送中斷,讓發(fā)送在前臺(tái)進(jìn)行;
2.如果PLC接收完成一個(gè)數(shù)據(jù)包:處理它,處理完后可能會(huì)開(kāi)啟一個(gè)數(shù)據(jù)的包的發(fā)送,開(kāi)啟發(fā)送中斷,讓發(fā)送在前臺(tái)進(jìn)行;

485接收中斷:把串口接收里的一個(gè)字節(jié)讀入到內(nèi)存(也可能是幾個(gè)字節(jié),這要看MCU的支持); 如果這是一個(gè)包的最后一個(gè)字節(jié),用全局變量/信號(hào)量的方法通知后臺(tái)主程序去處理;

485發(fā)送中斷:把下一個(gè)字節(jié)裝入串口發(fā)送寄存器里(也可能是幾個(gè)字節(jié),這要看MCU的支持);如果這是一個(gè)包的最后一個(gè)字節(jié),關(guān)掉自己的(中斷),以免下次再進(jìn)入。

PLC接收中斷:把IO里一個(gè)bit的數(shù)據(jù)讀入到內(nèi)存;如果這是一個(gè)包的最后一個(gè)位,用全局變量/信號(hào)量的方法通知后臺(tái)主程序去處理;

PLC發(fā)送中斷:把下一個(gè)位從IO口送出;如果這是一個(gè)包的最后一個(gè)字節(jié),關(guān)掉自己的(中斷),以免下次再進(jìn)入。

這樣,最緊急的收發(fā)位/字節(jié)都是在前臺(tái)中斷完成;對(duì)整個(gè)包的處理都在后臺(tái)主程序完成。沒(méi)有delay,沒(méi)有干擾,兩個(gè)通訊完美地融合在一起!

緊急的事務(wù)一定要用中斷處理!中斷處理緊急事務(wù)!

總結(jié)

以上是生活随笔為你收集整理的前后台系统的精髓的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。