1.如何建立嵌入式系統(tǒng)開發(fā)平臺
2.數(shù)據(jù)隊(duì)列
3.串口驅(qū)動
4.modem接口模塊
5.i2c總線模塊
6.spi總線模塊
7.其它軟件模塊
8.1 如何建立嵌入式系統(tǒng)開發(fā)平臺
平臺的概念
平臺是一個意義很廣泛的詞,要準(zhǔn)確的定義平臺不是件容易的事。在嵌入式系統(tǒng)中的開發(fā)平臺具有如下特點(diǎn):
層次性
服務(wù)性
規(guī)范性
通用性
技術(shù)密度
平臺是一個意義很廣泛的詞,要準(zhǔn)確的定義平臺不是件容易的事。在嵌入式系統(tǒng)中的開發(fā)平臺具有如下特點(diǎn):
層次性
層次性首先表現(xiàn)在平臺本身具有層次,高層的平臺是以低層平臺為基礎(chǔ)搭建起來的。還表現(xiàn)在每個層次的平臺的內(nèi)部還有層次性。越高層次的平臺越容易使用,對使用者的要求也就越低。
服務(wù)性
平臺是為應(yīng)用服務(wù)的,沒有應(yīng)用的平臺是無意義的,沒有存在的必要。對于元器件來說,線路板就是它的應(yīng)用。而api是硬件平臺的應(yīng)用,應(yīng)用程序又是api的應(yīng)用。
規(guī)范性
通用性
技術(shù)密度
平臺是一個意義很廣泛的詞,要準(zhǔn)確的定義平臺不是件容易的事。在嵌入式系統(tǒng)中的開發(fā)平臺具有如下特點(diǎn):
層次性
服務(wù)性
規(guī)范性
通用性
技術(shù)密度
平臺特別是商業(yè)平臺通常由相關(guān)領(lǐng)域的專家建立。這是因?yàn)橥枰m應(yīng)不同的應(yīng)用的要求,所以其需要的技術(shù)含量是很高的。
平臺的例子
使用平臺開發(fā)的優(yōu)勢
應(yīng)用程序接口這個嵌入式軟件開發(fā)平臺的提出和應(yīng)用是因?yàn)槠淠軌蚪鉀Q當(dāng)前及今后的嵌入式開發(fā)過程中出現(xiàn)的一些矛盾。以下是使用嵌入式軟件開發(fā)平臺(api)開發(fā)的優(yōu)點(diǎn):
縮短開發(fā)時間
降低對開發(fā)人員的要求
降低開發(fā)成本
增加穩(wěn)定性和可靠性
降低軟件對硬件變化的敏感性
不適合使用平臺開發(fā)的場合
雖然使用平臺開發(fā)有很多優(yōu)點(diǎn),但其也不是萬能的。有一些場合并不適合使用平臺開發(fā),這些場合主要有以下幾種:
極大批量的產(chǎn)品
這種產(chǎn)品往往要求硬件成本和生產(chǎn)成本最低化。而使用平臺開發(fā)不可避免帶來資源占用的增加,反映到硬件上就是成本的增加。有時這種增加是不可接受的。這種情況不適合用平臺開發(fā)。
沒有合適的平臺但產(chǎn)品需要盡快上市時
開發(fā)平臺是需要時間的,甚至比當(dāng)前的項(xiàng)目的時間更長。但如果后續(xù)有類似的產(chǎn)品,則還是建議開發(fā)者逐步建立起自己的開發(fā)平臺,這會對以后所有的項(xiàng)目帶來好處。
需要極度榨取硬件性能的場合
除了極大批量的產(chǎn)品需要極度榨取硬件性能外,估計只有科學(xué)研究和一些一件一件制造的高價值產(chǎn)品(如巨型機(jī))需要這樣做了,在普通的企業(yè)中應(yīng)該不容易見到。
建立開發(fā)平臺的方法
1.選擇操作系統(tǒng)
操作系統(tǒng)(os)是一個基礎(chǔ)的軟件平臺。因此,建立軟件開發(fā)平臺(自己的api)首先需要選擇一個合適的操作系統(tǒng)。操作系統(tǒng)的選擇與應(yīng)用相關(guān)的,但對于嵌入式系統(tǒng)一般需要選擇嵌入式操作系統(tǒng)。
2.制定api規(guī)范及應(yīng)用程序編寫規(guī)范
有了操作系統(tǒng),就可以制訂api規(guī)范和程序編寫規(guī)范了。這些規(guī)范一部分已經(jīng)被操作系統(tǒng)規(guī)定好了,另一部分需要自己制訂。建議這些規(guī)范盡量靠近與已存在的事實(shí)標(biāo)準(zhǔn),以減少學(xué)習(xí)時間。
3.獲取成熟的軟件模塊并修改適合指定的規(guī)范
開發(fā)人員可以通過各種途徑獲取成熟的軟件模塊,還可以獲取一些商業(yè)和自由的軟件模塊。這些軟件模塊不一定適合自己的規(guī)范,這就需要對這些軟件模塊進(jìn)行進(jìn)一步的修改或包裝以適應(yīng)自己的規(guī)范。
4.編寫自己的軟件模塊
通過外部途徑不一定能夠獲取所有必須的軟件模塊,此時就需要自己編寫軟件模塊了。
編寫自己的軟件模塊
因?yàn)殚_發(fā)平臺基于操作系統(tǒng),所以很可能多個任務(wù)和/或同時訪問同一個api函數(shù)。這就需要api函數(shù)必須是可重入的。這里主要介紹如何使這些函數(shù)可重入,和其它一些內(nèi)容。
1.使用任務(wù)
2.禁止然后允許中斷
3.使用信號量
4.使用數(shù)據(jù)隊(duì)列
5.禁止然后允許任務(wù)調(diào)度
6.使用一個任務(wù)作為模塊服務(wù)器
7.復(fù)合方法
因?yàn)殚_發(fā)平臺基于操作系統(tǒng),所以很可能多個任務(wù)和/或同時訪問同一個api函數(shù)。這就需要api函數(shù)必須是可重入的。這里主要介紹如何使這些函數(shù)可重入,和其它一些內(nèi)容。
1.使用任務(wù)
有一些設(shè)備需要cpu周期為其服務(wù),典型的是掃描顯示和掃描鍵盤??梢越o它們分配相應(yīng)的任務(wù),與用戶任務(wù)一起調(diào)度。這樣,就可以使用任何任務(wù)間通信的方法實(shí)現(xiàn)。
2.禁止然后允許中斷
有一些設(shè)備需要的訪問時間很短,如全局變量。它們可以通過禁止中斷——訪問設(shè)備——允許中斷的方式編寫軟件模塊。
3.使用信號量
一些設(shè)備需要的訪問時間比較長,使用方法2可能造成關(guān)中斷時間過長。此時可以使用信號量來編寫軟件模塊。具體過程為申請信號量——訪問設(shè)備——發(fā)送信號量。
4.使用數(shù)據(jù)隊(duì)列
有一些設(shè)備具有自己的中斷,典型的是串口輸出。可以利用消息隊(duì)列將用戶任務(wù)需要的服務(wù)通過消息隊(duì)列排隊(duì)、緩沖起來,利用中斷功能依次服務(wù)。
5.禁止然后允許任務(wù)調(diào)度
當(dāng)中斷服務(wù)程序不可能訪問這個資源時,可以使用本方法避免實(shí)現(xiàn)函數(shù)重入。但是不推薦用戶使用此方法。
6.使用一個任務(wù)作為模塊服務(wù)器
當(dāng)一個軟件模塊十分復(fù)雜,使用上述方法難以保證api函數(shù)可重入性時,或軟件模塊需要在單任務(wù)環(huán)境和多任務(wù)環(huán)境都能夠使用時,可以依照單任務(wù)的方式編寫,然后編寫一個任務(wù)作為服務(wù)器,由這個服務(wù)器直接操作這個軟件模塊,而其它的任務(wù)通過消息隊(duì)列等方式與之通訊,把需要的操作提交給服務(wù)器,而服務(wù)器通過消息郵箱等方式返回操作結(jié)果。
7.復(fù)合方法
有一些驅(qū)動程序比較復(fù)雜(例如通訊協(xié)議),可以結(jié)合兩種或兩種以上的方法實(shí)現(xiàn)。
編寫軟件模塊由一個要注意的地方是:必須把與硬件相關(guān)的部分和與硬件無關(guān)的部分分開。這可以通過把與硬件相關(guān)的部分放在驅(qū)動程序中實(shí)現(xiàn)。這樣,硬件變化時只需要重新編寫驅(qū)動程序即可。驅(qū)動程序也可以分層實(shí)現(xiàn)。也可以通過配置實(shí)現(xiàn),不過這有時不太容易實(shí)現(xiàn)。當(dāng)然可以合并使用。