摘要:嵌入式系統(tǒng)是計算機(jī)技術(shù),通信技術(shù),半導(dǎo)體技術(shù),微電子技術(shù),語音圖象數(shù)據(jù)傳輸技術(shù),甚至傳感器等先進(jìn)技術(shù)和具體應(yīng)用對象相結(jié)合后的更新?lián)Q代產(chǎn)品。Matlab作為美國 MathWorks公司開發(fā)的用于概念設(shè)計,算法開發(fā),建模仿真,實時實現(xiàn)的理想的集成環(huán)境。其強項就是其強大的矩陣計算以及仿真能力。該文簡要介紹了Matlab嵌入式系統(tǒng)的特點和發(fā)展歷史,以及驅(qū)動程序的編寫方法。
關(guān)鍵詞:Matlab; 嵌入式系統(tǒng); 驅(qū)動程序
中圖分類號:O445文獻(xiàn)標(biāo)識碼:A文章編號: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(矩陣實驗室)的縮寫,它是由美國MathWorks公司推出的用于數(shù)值計算和圖形處理計算系統(tǒng)環(huán)境,專門以矩陣的形式處理數(shù)據(jù)。除了具備卓越的數(shù)值計算能力外,它還提供了專業(yè)水平的符號計算,文字處理,可視化建模仿真和實時控制等功能,是國際公認(rèn)的和Mathematica、Maple并列的三大數(shù)學(xué)軟件之一,其強項就是其強大的矩陣計算以及仿真能力。
1 嵌入式系統(tǒng)概述
嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計算機(jī)硬件系統(tǒng)之中。簡單的說就是系統(tǒng)的應(yīng)用軟件與系統(tǒng)的硬件一體化,類似與BIOS的工作方式。它是計算機(jī)技術(shù), 通信技術(shù), 半導(dǎo)體技術(shù), 微電子技術(shù), 語音圖象數(shù)據(jù)傳輸技術(shù), 甚至傳感器等先進(jìn)技術(shù)和具體應(yīng)用對象相結(jié)合后的更新?lián)Q代產(chǎn)品,具有軟件代碼小、高度自動化、響應(yīng)速度快等特點,特別適合于要求實時的和多任務(wù)的體系,因此往往是技術(shù)密集,投資強度大, 高度分散, 不斷創(chuàng)新的知識密集型系統(tǒng),反映當(dāng)代最新技術(shù)的先進(jìn)水平。
2 嵌入式系統(tǒng)驅(qū)動程序編寫
2.1 驅(qū)動程序編寫的方法
寫驅(qū)動程序,第一個要件就是先讀懂規(guī)格書,并且能夠存取每一個裝置的管腳。第二個動作就是跟系統(tǒng)注冊中斷的服務(wù)函數(shù),讓操作系統(tǒng)了解中斷產(chǎn)生的時候要跑哪些函數(shù)。第三個動作就是將驅(qū)動程序的界面加到一般用戶存取截面函數(shù)中,讓用戶通過一定的函數(shù)調(diào)用來存取外圍裝置。其中,第二項跟第三項必須依據(jù)操作系統(tǒng)本身的規(guī)定來作,第一項就是依據(jù)該平臺的硬件說明書來做。下面以一個簡單的例子講述第一項的程序編寫方式:
這是一個在DragongBall EZ328的RS-232簡單版驅(qū)動程序。它做了幾件事情,首先就是寫了一個中斷服務(wù)程序(ISR),當(dāng)產(chǎn)生中斷的時候,將收到的數(shù)據(jù)防到一個緩沖區(qū)(buffer)里去,這個buffer我們聲明叫做m_pBuffer,我們通過兩個變量來維護(hù)這個buffer,一個是聲明m_wStartBuf,另一個是聲明m_wEndBuf,讓buffer以一種環(huán)狀數(shù)據(jù)的方式存在。
驅(qū)動程序舉例如下:
#include “device.h” //聲明硬件的對應(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ū)動程序時的注意事項
我們在編寫驅(qū)動程序時必須注意下面的事項:
1) 程序所占用的內(nèi)存空間不能太大。針對嵌入式系統(tǒng)開發(fā)成本與體積的要求,驅(qū)動程序本身不能使用太多的內(nèi)存,以免影響其他模塊可以利用的資源。
2) 程序架構(gòu)所需的計算資源要低。驅(qū)動程序本身只是為了方便其他模塊能夠簡易的操作硬件,不使用大量精密復(fù)雜的數(shù)值分析運算,以減少影響其他模塊執(zhí)行時間的考慮為原則。
3) 驅(qū)動程序?qū)ζ渌K的反應(yīng)要即時。驅(qū)動程序的執(zhí)行需考慮不影響其他模塊調(diào)用驅(qū)動程序模塊后的行為與反應(yīng)時間。
4) 中斷程序的執(zhí)行時間要足夠短。實時操作系統(tǒng)能即時反映外界信號緣于它對中斷信號處理的能力。若有一個中斷程序長期占住處理器執(zhí)行期間又不允許其他中斷的進(jìn)入,該操作系統(tǒng)便失去即時反應(yīng)能力。
5) 驅(qū)動程序內(nèi)對類似設(shè)計的移植性要高。驅(qū)動程序不同于一般的系統(tǒng)調(diào)用,針對硬件的不同我們會設(shè)計出不同的驅(qū)動程序庫。但每個驅(qū)動程序庫內(nèi),我們?nèi)詰?yīng)該仔細(xì)分出與廠商設(shè)計相關(guān)或與芯片相關(guān)的部分。
6) 程序接口與硬件規(guī)格相關(guān)性低。若我們定義的驅(qū)動程序接口參數(shù)與硬件的規(guī)格息息相關(guān),當(dāng)我們轉(zhuǎn)換一個平臺,原規(guī)劃的參數(shù)在新的平臺上找不到對應(yīng),程序接口便會變得很難理解與轉(zhuǎn)換。
7) 與浮點運算無關(guān)。小型的系統(tǒng)所使用的處理器常常都沒有浮點運算的功能,而我們希望我們編寫的驅(qū)動程序具備重復(fù)使用的能力。所以于程序當(dāng)中,對于需要浮點計算的場合,我們必須盡量避免。
8) 減少狀態(tài)變量。驅(qū)動程序本身是控制硬件,所謂的狀態(tài)往往是硬件的狀態(tài),我們應(yīng)該竭力的反應(yīng)硬件的狀態(tài),而不是假設(shè)一個狀態(tài)變量可以符合目前硬件的狀態(tài),如此驅(qū)動程序才能減少錯誤動作。
9) 減少狀態(tài)常數(shù)所要表達(dá)的意義。尤其要避免設(shè)計出一個狀態(tài)常數(shù)所表示的是兩種以上事件同時發(fā)生,很容易就會有例外事件沒有機(jī)會被處理到,從此狀態(tài)變量便進(jìn)入不可預(yù)期的狀況。
2.3編寫驅(qū)動程序的準(zhǔn)備
在寫驅(qū)動程序之前,下面這些事情必須要先做好準(zhǔn)備:
1) 基底地址常數(shù)聲明的建立。建立所有存取外圍寄存器的基底地址,包括控制寄存器、數(shù)據(jù)寄存器與系統(tǒng)內(nèi)內(nèi)存分布的基底地址。
2) 遮罩常數(shù)聲明的建立。驅(qū)動程序內(nèi)存在著許多使用位表示某種功能的場合,將每個Bit以常數(shù)名稱定義,于驅(qū)動程序中針對不同的應(yīng)用場合組或不同遮罩組合,增加可閱讀性。
3) 狀態(tài)常數(shù)聲明的建立。驅(qū)動程序內(nèi)不可避免存在著一些狀態(tài)變量,而狀態(tài)變量會有許多可能的狀態(tài)可選,我們將它以專有的常數(shù)名稱取代,避免程序當(dāng)中有張冠李戴之情形,增加可讀性也減少出錯的危險。
4) 常用功能宏的建立。驅(qū)動程序內(nèi)常常有許多類似智能的功能,但需要許多行程序代碼來表示,使用宏聲明可讓我們的程序更簡潔,也避免不必要的認(rèn)為錯誤。
參考文獻(xiàn):
[1] 探矽工作室.嵌入式系統(tǒng)開發(fā)圣經(jīng)[M].北京:中國青年出版社,2002.
[2] Barr M.C/C++嵌入式系統(tǒng)編程[M].北京:中國電力出版社,2001.
[3] 張曉輝.嵌入式操作系統(tǒng)驅(qū)動程序開發(fā)[J].安徽電氣工程職業(yè)技術(shù)學(xué)校學(xué)報,2005(1).