于丹,王廣
摘要:嵌入式系統(tǒng)是計(jì)算機(jī)技術(shù),通信技術(shù),半導(dǎo)體技術(shù),微電子技術(shù),語音圖象數(shù)據(jù)傳輸技術(shù),甚至傳感器等先進(jìn)技術(shù)和具體應(yīng)用對(duì)象相結(jié)合后的更新?lián)Q代產(chǎn)品。Matlab作為美國(guó) MathWorks公司開發(fā)的用于概念設(shè)計(jì),算法開發(fā),建模仿真,實(shí)時(shí)實(shí)現(xiàn)的理想的集成環(huán)境。其強(qiáng)項(xiàng)就是其強(qiáng)大的矩陣計(jì)算以及仿真能力。該文簡(jiǎn)要介紹了Matlab嵌入式系統(tǒng)的特點(diǎn)和發(fā)展歷史,以及驅(qū)動(dòng)程序的編寫方法。
關(guān)鍵詞:Matlab; 嵌入式系統(tǒng); 驅(qū)動(dòng)程序
中圖分類號(hào):O445文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2010)11-2663-02
The Matlab First Floor Drive
YU Dan, WANG Guang
(Basic Course Department of Aviation University of Air Force, Changchun 130022, China)
Abstract: The built-in system is the product of renewal changes generation that combined with calculator technique, correspondence technique, semi-conductor technique, micro-electronics technique, speech portrait data delivers technique, spreadfeeling machine and so on..The Matlab is the ideal integrated environment that was developed by the American MathWorks company which was used forthe concept design the development of calculate way set up mimicry true the realization Of solid hour. Its strong item is the matrix calculation and the ability of imitating true.This text synopsis introduced the characteristics the development history the write method of drive procedure.
Key words: Matlab; built-in system; built-in system
Matlab是英文MATrix LABoratory(矩陣實(shí)驗(yàn)室)的縮寫,它是由美國(guó)MathWorks公司推出的用于數(shù)值計(jì)算和圖形處理計(jì)算系統(tǒng)環(huán)境,專門以矩陣的形式處理數(shù)據(jù)。除了具備卓越的數(shù)值計(jì)算能力外,它還提供了專業(yè)水平的符號(hào)計(jì)算,文字處理,可視化建模仿真和實(shí)時(shí)控制等功能,是國(guó)際公認(rèn)的和Mathematica、Maple并列的三大數(shù)學(xué)軟件之一,其強(qiáng)項(xiàng)就是其強(qiáng)大的矩陣計(jì)算以及仿真能力。
1 嵌入式系統(tǒng)概述
嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件系統(tǒng)之中。簡(jiǎn)單的說就是系統(tǒng)的應(yīng)用軟件與系統(tǒng)的硬件一體化,類似與BIOS的工作方式。它是計(jì)算機(jī)技術(shù), 通信技術(shù), 半導(dǎo)體技術(shù), 微電子技術(shù), 語音圖象數(shù)據(jù)傳輸技術(shù), 甚至傳感器等先進(jìn)技術(shù)和具體應(yīng)用對(duì)象相結(jié)合后的更新?lián)Q代產(chǎn)品,具有軟件代碼小、高度自動(dòng)化、響應(yīng)速度快等特點(diǎn),特別適合于要求實(shí)時(shí)的和多任務(wù)的體系,因此往往是技術(shù)密集,投資強(qiáng)度大, 高度分散, 不斷創(chuàng)新的知識(shí)密集型系統(tǒng),反映當(dāng)代最新技術(shù)的先進(jìn)水平。
2 嵌入式系統(tǒng)驅(qū)動(dòng)程序編寫
2.1 驅(qū)動(dòng)程序編寫的方法
寫驅(qū)動(dòng)程序,第一個(gè)要件就是先讀懂規(guī)格書,并且能夠存取每一個(gè)裝置的管腳。第二個(gè)動(dòng)作就是跟系統(tǒng)注冊(cè)中斷的服務(wù)函數(shù),讓操作系統(tǒng)了解中斷產(chǎn)生的時(shí)候要跑哪些函數(shù)。第三個(gè)動(dòng)作就是將驅(qū)動(dòng)程序的界面加到一般用戶存取截面函數(shù)中,讓用戶通過一定的函數(shù)調(diào)用來存取外圍裝置。其中,第二項(xiàng)跟第三項(xiàng)必須依據(jù)操作系統(tǒng)本身的規(guī)定來作,第一項(xiàng)就是依據(jù)該平臺(tái)的硬件說明書來做。下面以一個(gè)簡(jiǎn)單的例子講述第一項(xiàng)的程序編寫方式:
這是一個(gè)在DragongBall EZ328的RS-232簡(jiǎn)單版驅(qū)動(dòng)程序。它做了幾件事情,首先就是寫了一個(gè)中斷服務(wù)程序(ISR),當(dāng)產(chǎn)生中斷的時(shí)候,將收到的數(shù)據(jù)防到一個(gè)緩沖區(qū)(buffer)里去,這個(gè)buffer我們聲明叫做m_pBuffer,我們通過兩個(gè)變量來維護(hù)這個(gè)buffer,一個(gè)是聲明m_wStartBuf,另一個(gè)是聲明m_wEndBuf,讓buffer以一種環(huán)狀數(shù)據(jù)的方式存在。
驅(qū)動(dòng)程序舉例如下:
#include “device.h” //聲明硬件的對(duì)應(yīng)地址
#define RX_BUFFER_SIZE 16384//2的次方倍數(shù)
#define RX_BUFS_MASK 0x3FFF //buffer size減一
extern voidfun IntHandlerTable[54];//中斷向量表
unsigned char m_pBuffer[RX_BUFFER_SIZE]; //BUFFER聲明
unsigned long m_wStartBuf=0; //環(huán)狀指針起始位置
unsigned long m_wEndBuf=0; //環(huán)狀指針結(jié)束位置
unsigned short UART_InData;//收到的數(shù)據(jù)
unsigned long BuffEndTemp; //暫存數(shù)據(jù)
2.2 編寫驅(qū)動(dòng)程序時(shí)的注意事項(xiàng)
我們?cè)诰帉戲?qū)動(dòng)程序時(shí)必須注意下面的事項(xiàng):
1) 程序所占用的內(nèi)存空間不能太大。針對(duì)嵌入式系統(tǒng)開發(fā)成本與體積的要求,驅(qū)動(dòng)程序本身不能使用太多的內(nèi)存,以免影響其他模塊可以利用的資源。
2) 程序架構(gòu)所需的計(jì)算資源要低。驅(qū)動(dòng)程序本身只是為了方便其他模塊能夠簡(jiǎn)易的操作硬件,不使用大量精密復(fù)雜的數(shù)值分析運(yùn)算,以減少影響其他模塊執(zhí)行時(shí)間的考慮為原則。
3) 驅(qū)動(dòng)程序?qū)ζ渌K的反應(yīng)要即時(shí)。驅(qū)動(dòng)程序的執(zhí)行需考慮不影響其他模塊調(diào)用驅(qū)動(dòng)程序模塊后的行為與反應(yīng)時(shí)間。
4) 中斷程序的執(zhí)行時(shí)間要足夠短。實(shí)時(shí)操作系統(tǒng)能即時(shí)反映外界信號(hào)緣于它對(duì)中斷信號(hào)處理的能力。若有一個(gè)中斷程序長(zhǎng)期占住處理器執(zhí)行期間又不允許其他中斷的進(jìn)入,該操作系統(tǒng)便失去即時(shí)反應(yīng)能力。
5) 驅(qū)動(dòng)程序內(nèi)對(duì)類似設(shè)計(jì)的移植性要高。驅(qū)動(dòng)程序不同于一般的系統(tǒng)調(diào)用,針對(duì)硬件的不同我們會(huì)設(shè)計(jì)出不同的驅(qū)動(dòng)程序庫。但每個(gè)驅(qū)動(dòng)程序庫內(nèi),我們?nèi)詰?yīng)該仔細(xì)分出與廠商設(shè)計(jì)相關(guān)或與芯片相關(guān)的部分。
6) 程序接口與硬件規(guī)格相關(guān)性低。若我們定義的驅(qū)動(dòng)程序接口參數(shù)與硬件的規(guī)格息息相關(guān),當(dāng)我們轉(zhuǎn)換一個(gè)平臺(tái),原規(guī)劃的參數(shù)在新的平臺(tái)上找不到對(duì)應(yīng),程序接口便會(huì)變得很難理解與轉(zhuǎn)換。
7) 與浮點(diǎn)運(yùn)算無關(guān)。小型的系統(tǒng)所使用的處理器常常都沒有浮點(diǎn)運(yùn)算的功能,而我們希望我們編寫的驅(qū)動(dòng)程序具備重復(fù)使用的能力。所以于程序當(dāng)中,對(duì)于需要浮點(diǎn)計(jì)算的場(chǎng)合,我們必須盡量避免。
8) 減少狀態(tài)變量。驅(qū)動(dòng)程序本身是控制硬件,所謂的狀態(tài)往往是硬件的狀態(tài),我們應(yīng)該竭力的反應(yīng)硬件的狀態(tài),而不是假設(shè)一個(gè)狀態(tài)變量可以符合目前硬件的狀態(tài),如此驅(qū)動(dòng)程序才能減少錯(cuò)誤動(dòng)作。
9) 減少狀態(tài)常數(shù)所要表達(dá)的意義。尤其要避免設(shè)計(jì)出一個(gè)狀態(tài)常數(shù)所表示的是兩種以上事件同時(shí)發(fā)生,很容易就會(huì)有例外事件沒有機(jī)會(huì)被處理到,從此狀態(tài)變量便進(jìn)入不可預(yù)期的狀況。
2.3編寫驅(qū)動(dòng)程序的準(zhǔn)備
在寫驅(qū)動(dòng)程序之前,下面這些事情必須要先做好準(zhǔn)備:
1) 基底地址常數(shù)聲明的建立。建立所有存取外圍寄存器的基底地址,包括控制寄存器、數(shù)據(jù)寄存器與系統(tǒng)內(nèi)內(nèi)存分布的基底地址。
2) 遮罩常數(shù)聲明的建立。驅(qū)動(dòng)程序內(nèi)存在著許多使用位表示某種功能的場(chǎng)合,將每個(gè)Bit以常數(shù)名稱定義,于驅(qū)動(dòng)程序中針對(duì)不同的應(yīng)用場(chǎng)合組或不同遮罩組合,增加可閱讀性。
3) 狀態(tài)常數(shù)聲明的建立。驅(qū)動(dòng)程序內(nèi)不可避免存在著一些狀態(tài)變量,而狀態(tài)變量會(huì)有許多可能的狀態(tài)可選,我們將它以專有的常數(shù)名稱取代,避免程序當(dāng)中有張冠李戴之情形,增加可讀性也減少出錯(cuò)的危險(xiǎn)。
4) 常用功能宏的建立。驅(qū)動(dòng)程序內(nèi)常常有許多類似智能的功能,但需要許多行程序代碼來表示,使用宏聲明可讓我們的程序更簡(jiǎn)潔,也避免不必要的認(rèn)為錯(cuò)誤。
參考文獻(xiàn):
[1] 探矽工作室.嵌入式系統(tǒng)開發(fā)圣經(jīng)[M].北京:中國(guó)青年出版社,2002.
[2] Barr M.C/C++嵌入式系統(tǒng)編程[M].北京:中國(guó)電力出版社,2001.
[3] 張曉輝.嵌入式操作系統(tǒng)驅(qū)動(dòng)程序開發(fā)[J].安徽電氣工程職業(yè)技術(shù)學(xué)校學(xué)報(bào),2005(1).