欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

關(guān)于linux設(shè)備驅(qū)動(dòng)是否使用全局變量的問(wèn)題-創(chuàng)新互聯(lián)

關(guān)于linux設(shè)備驅(qū)動(dòng)是否使用全局變量的問(wèn)題

今天有人問(wèn)我,關(guān)于linux設(shè)備驅(qū)動(dòng)是否使用全局變量的問(wèn)題,為什么說(shuō)盡量不使用全局變量?

網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶提供服務(wù)是我們的理念。成都創(chuàng)新互聯(lián)把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來(lái)開發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!

其實(shí)這個(gè)問(wèn)題從兩方面說(shuō):
1)使用全局變量,那么破壞了函數(shù)的重入性,為了實(shí)現(xiàn)函數(shù)重入,又不得不使用鎖來(lái)保護(hù)全局變量。這個(gè)效率變得低下了。
函數(shù)重入,主要是使用局部變量,即變量放在線程的棧中,各自使用自己的,就不會(huì)沖突。另外一種是使用鎖來(lái)保護(hù),保證數(shù)據(jù)的完整性。

2)使用全局變量,那么就違背了linux驅(qū)動(dòng)的編寫原則。即一個(gè)驅(qū)動(dòng)程序應(yīng)該支持驅(qū)動(dòng)多個(gè)設(shè)備同時(shí)工作。例如馬達(dá),一個(gè)馬達(dá)驅(qū)動(dòng)程序可能同時(shí)操作多個(gè)馬達(dá),多個(gè)軸的方向轉(zhuǎn)動(dòng),一個(gè)馬達(dá)控制一個(gè)軸向,例如x軸,y軸,z軸。 如果驅(qū)動(dòng)程序里使用全局變量來(lái)保存設(shè)備信息,那么沒(méi)法做到同時(shí)支持保存多個(gè)設(shè)備信息了。如果使用鏈表方式,一個(gè)鏈表節(jié)點(diǎn)保存一個(gè)設(shè)備信息,雖然可行,但是每次內(nèi)核操作你的驅(qū)動(dòng)的api時(shí)傳入的struct device(例如struct i2c_client,內(nèi)含了struct device),你不得不遍歷鏈表并比較對(duì)象指針才能找到操作的設(shè)備的信息。顯然效率低。

所以其實(shí)正確的方法是:
在probe時(shí),分配一個(gè)私有結(jié)構(gòu)體作為保存此設(shè)備的狀態(tài)信息。然后調(diào)用dev_set_drvdata系列函數(shù),把你分配的結(jié)構(gòu)體和probe時(shí)傳入的struct device進(jìn)行綁定。 struct device是總線驅(qū)動(dòng)在探查到新設(shè)備插入時(shí)創(chuàng)建的。
后面系統(tǒng)調(diào)用你的驅(qū)動(dòng)的api函數(shù)時(shí),傳入的struct device,你通過(guò)dev_get_drvdata系列函數(shù)取回你的為此設(shè)備分配的私有結(jié)構(gòu)體(內(nèi)含具體設(shè)備的狀態(tài)信息,例如i2c地址等),從而知道是操作哪個(gè)具體設(shè)備。

具體請(qǐng)參考我的《linux設(shè)備驅(qū)動(dòng)模型》視頻,
https://edu.51cto.com/course/17159.html
還有我的《如何編寫設(shè)備驅(qū)動(dòng)》或《深入linux內(nèi)核》視頻
https://edu.51cto.com/course/17132.html
https://edu.51cto.com/course/17155.html

另外我的相關(guān)培訓(xùn)視頻請(qǐng)看:
歡迎觀看我發(fā)布的各個(gè)課程: https://edu.51cto.com/lecturer/8896847.html

我的新的更多優(yōu)惠的打包課程鏈接如下:
https://edu.51cto.com/sd/0a9d4

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前標(biāo)題:關(guān)于linux設(shè)備驅(qū)動(dòng)是否使用全局變量的問(wèn)題-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://chinadenli.net/article18/icgdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、企業(yè)建站外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃電子商務(wù)、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)