<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 面向設(shè)備編程-嵌入式微系統(tǒng)連載之六

          面向設(shè)備編程-嵌入式微系統(tǒng)連載之六

          作者: 時(shí)間:2014-09-10 來(lái)源:網(wǎng)絡(luò) 收藏

            結(jié)構(gòu)體封裝了整個(gè)系統(tǒng)層,讓App很容易基于跨平臺(tái),那么內(nèi)部該如何組織?

          本文引用地址:http://www.ex-cimer.com/article/262756.htm

            

           

            公司推薦嵌入式開(kāi)發(fā)遵循CMSIS架構(gòu),用戶應(yīng)用程序可以調(diào)用實(shí)時(shí)內(nèi)核(OS)、中間件等,也可以直接調(diào)用底層硬件基于CMSIS標(biāo)準(zhǔn)的函數(shù)接口,比如ST公司發(fā)布的STM32的硬件驅(qū)動(dòng)LIB庫(kù),甚至直接訪問(wèn)最底層的寄存器。這種架構(gòu)編程比較靈活,對(duì)于規(guī)模不大的嵌入式系統(tǒng)比較適合,但這樣的一個(gè)架構(gòu)分層還比較模糊,應(yīng)用層幾乎可以訪問(wèn)所有的系統(tǒng)層資源,比較任意。各種底層接口沒(méi)有封裝,規(guī)模一大很容易引起重名、相互調(diào)用,若更換處理器芯片,整個(gè)系統(tǒng)層都要重新設(shè)計(jì),不便于移植。為了解決這些問(wèn)題,需要引入新的概念:設(shè)備,基于設(shè)備把底層的硬件驅(qū)動(dòng)函數(shù)按功能封裝起來(lái),這樣可以把系統(tǒng)層內(nèi)部理清、分層次、模塊化、可移植。

            

           

            設(shè)備這個(gè)詞,我們是經(jīng)常接觸的,我們知道PC機(jī)的組成,就是由中央處理器、內(nèi)存、硬盤、主板、電源、顯示器等幾樣組成,這是物理上講的,若從Windows操作系統(tǒng)角度看,我們可以看Windows的設(shè)備管理器。一臺(tái)PC機(jī)在Windows XP的眼中由DVD驅(qū)動(dòng)器、IDE控制器、處理器、磁盤驅(qū)動(dòng)器、電池等等組成,每一個(gè)設(shè)備里面又細(xì)分為很多小設(shè)備。所以設(shè)備是Windows XP管理的基本對(duì)象。

            

           

            在VS.Net架構(gòu)的C#編程角度看,系統(tǒng)層System由各種功能子類組成,子類下面又分子類。應(yīng)用層開(kāi)發(fā)程序,就是面向System各種類開(kāi)發(fā)即可,所以類是C#編程的基礎(chǔ)單元。

            無(wú)論設(shè)備還是類,它們都是表征一組具有相對(duì)完整功能的集合。比如一個(gè)人,由頭、四肢、五臟六腑組成,這些部件都是相對(duì)完整的功能集,而頭呢,又由大腦、眼睛、鼻子、耳朵等組成,它們的功能也是相對(duì)完整的。相對(duì)于類這個(gè)概念來(lái)說(shuō),嵌入式人員更容易接受設(shè)備這個(gè)名詞,因?yàn)橛泻芏鄬?shí)際的對(duì)應(yīng)物存在,比如LCD、按鍵、存儲(chǔ)器、串口、ADC、定時(shí)器、IO等等,都是具體的一個(gè)設(shè)備,它們有非常明確的功能定義,基本上各個(gè)項(xiàng)目都需要這些設(shè)備組合起來(lái)完成,只是不同的項(xiàng)目可能涉及的設(shè)備種類不同罷了,但基本上脫離不了這么幾種。所以我們可以認(rèn)為一個(gè)系統(tǒng)層System就是由不同的設(shè)備組成的,系統(tǒng)層內(nèi)的中間件也是由設(shè)備來(lái)支持的,而設(shè)備則需要編寫設(shè)備驅(qū)動(dòng)代碼,需要調(diào)用各種硬件驅(qū)動(dòng)接口函數(shù)來(lái)實(shí)現(xiàn),比如ST公司發(fā)布的STM32硬件驅(qū)動(dòng)庫(kù)來(lái)完成。

            

           

            中低端嵌入式編程,因?yàn)橘Y源比較緊張,為了節(jié)省資源,代碼編寫比較緊湊,所以長(zhǎng)期以來(lái)應(yīng)用層與系統(tǒng)底層是分不清的,這就導(dǎo)致經(jīng)常一個(gè)人既要懂上層應(yīng)用,又要懂底層驅(qū)動(dòng),對(duì)開(kāi)發(fā)者的要求較高,這也增加了項(xiàng)目的開(kāi)發(fā)難度。而現(xiàn)在高性能嵌入式芯片的出現(xiàn),可以不再被資源約束,所以引入設(shè)備概念,讓嵌入式編程真正意義上解決了一人打天下的尷尬局面,對(duì)于應(yīng)用層開(kāi)發(fā)人員來(lái)說(shuō),他們雖然不懂底層硬件驅(qū)動(dòng),但可以很容易理解設(shè)備這個(gè)功能接口,輕松完成項(xiàng)目需求,而對(duì)于底層驅(qū)動(dòng)人員來(lái)說(shuō),一個(gè)個(gè)明確獨(dú)立的設(shè)備,更有助于自己清晰的編寫底層驅(qū)動(dòng),適合多人協(xié)助開(kāi)發(fā)。所以msOS,可以認(rèn)為是面向設(shè)備開(kāi)發(fā)的架構(gòu)。

            每一個(gè)設(shè)備,都有一個(gè)對(duì)應(yīng)的結(jié)構(gòu)體封裝,因?yàn)橹械投饲度胧较到y(tǒng)規(guī)模不大,為了方便應(yīng)用查看,所以直接封裝在System的Device里面。

            

           

            只有在System的Device中的基礎(chǔ)設(shè)備才可以被應(yīng)用層訪問(wèn)、調(diào)用,而設(shè)備內(nèi)的其它函數(shù),都需要定義為Static類型,防止被外部調(diào)用。

            一個(gè)設(shè)備驅(qū)動(dòng)的代碼編寫一般的講要分為五部分,以LCD設(shè)備為例:

            1、 建立一個(gè)按鍵設(shè)備文件device_lcd.c。

            2、 在device_lcd.c中編寫lcd設(shè)備驅(qū)動(dòng)代碼,除了外部接口函數(shù)之外,其它的都需要定義為Static類型的靜態(tài)函數(shù),防止被外部函數(shù)調(diào)用。

            3、 在SystemStruct的Device中添加Lcd設(shè)備結(jié)構(gòu)體,內(nèi)部包含接口函數(shù)指針。

            4、 在Lcd設(shè)備初始化函數(shù)InitializeLcd中把Lcd設(shè)備的接口函數(shù)指針與Lcd設(shè)備的接口函數(shù)關(guān)聯(lián)起來(lái):System.Device.Lcd.DisplayString = LcdDisplayString;

            5、 有些需要基于系統(tǒng)節(jié)拍運(yùn)行的設(shè)備,比如按鍵、定時(shí)器設(shè)備,需要由系統(tǒng)節(jié)拍提供系統(tǒng)節(jié)拍服務(wù)程序:KeySystick100Service();TimerSystick1000Service();

            引入設(shè)備概念,把系統(tǒng)層分為一個(gè)個(gè)相對(duì)獨(dú)立的模塊,內(nèi)部的函數(shù)都通過(guò)Static封裝了,只是保留了設(shè)備接口與外界聯(lián)系,這樣大大簡(jiǎn)化了系統(tǒng)的復(fù)雜度,調(diào)理更加清晰,可以支撐項(xiàng)目做的更大更強(qiáng)。封裝之后的設(shè)備功能相對(duì)完整,獨(dú)立性強(qiáng),那么它是如何運(yùn)轉(zhuǎn)的呢?必須要有一套支撐設(shè)備運(yùn)行的規(guī)范。

            1、 設(shè)備一般分為兩類,一類不需要系統(tǒng)節(jié)拍支撐它運(yùn)行的,比如Lcd、IO等設(shè)備,它們由上層函數(shù)直接調(diào)用接口即可。還有一類需要由系統(tǒng)節(jié)拍設(shè)備支撐其運(yùn)行的,比如按鍵和定時(shí)器設(shè)備,按鍵是基于每秒100次的按鍵掃描獲取按鍵值,定時(shí)器是基于每秒1000次的系統(tǒng)節(jié)拍實(shí)現(xiàn)多路虛擬定時(shí)器。所以這一類設(shè)備,需要由系統(tǒng)節(jié)拍設(shè)備提供支持,它們的工作基于系統(tǒng)節(jié)拍之上運(yùn)行,系統(tǒng)節(jié)拍設(shè)備是它們運(yùn)行的基礎(chǔ)。device_systick.c是系統(tǒng)節(jié)拍設(shè)備,它是相對(duì)比較特殊的基礎(chǔ)設(shè)備。

            2、 調(diào)用方式分為三種:上層與下層可以直接調(diào)用,下層對(duì)上層提供了兩種方式,一是利用OS的消息機(jī)制實(shí)現(xiàn)信息上傳,二是采用注冊(cè)機(jī)制,實(shí)現(xiàn)類似處理器中斷的方式,給上層提供信息。

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程




          關(guān)鍵詞: 嵌入式微系統(tǒng) System ARM

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();