嵌入式系統(tǒng)基礎(chǔ)設(shè)計(jì)方法
嵌入式系統(tǒng)設(shè)計(jì)方法
嵌入式系統(tǒng)是將一個(gè)電子系統(tǒng)嵌入到一個(gè)物理系統(tǒng)中,連接起物理系統(tǒng)和電子信息系統(tǒng),從而實(shí)現(xiàn)信息系統(tǒng)對(duì)物理系統(tǒng)觀察和控制。
本文引用地址:http://butianyuan.cn/article/202405/458931.htm一個(gè)嵌入式系統(tǒng)的設(shè)計(jì),可以從總則上分三大步驟:建模 –> 設(shè)計(jì) -> 分析。這里所說的設(shè)計(jì),是理論的設(shè)計(jì),圖紙的設(shè)計(jì),而不涉及到系統(tǒng)的實(shí)施。
? 建模:根據(jù)系統(tǒng)的物理特性、行為邏輯、業(yè)務(wù)邏輯等,建立系統(tǒng)的數(shù)學(xué)據(jù)模型。對(duì)于不同類型的系統(tǒng),有不同的描述方式,比如對(duì)于人人機(jī)交互可以用狀態(tài)機(jī)模型,對(duì)于一個(gè)控制系統(tǒng)可以用狀態(tài)空間方程或者傳遞函數(shù),對(duì)于一個(gè)交易系統(tǒng)可以用流程圖。對(duì)于一個(gè)大系統(tǒng),也可以分解成多個(gè)子系統(tǒng),子系統(tǒng)建立不同的數(shù)學(xué)模型,這個(gè)大系統(tǒng)是不同數(shù)學(xué)模型的組合。
? 設(shè)計(jì):根據(jù)系統(tǒng)的數(shù)學(xué)模型,創(chuàng)建實(shí)現(xiàn)系統(tǒng)模型的結(jié)構(gòu),指定系統(tǒng)如何實(shí)現(xiàn)功能,這包括硬件系統(tǒng)、軟件系統(tǒng)的設(shè)計(jì)、軟硬件結(jié)合的設(shè)計(jì)。
? 分析:說明設(shè)計(jì)的系統(tǒng)為什么能完成它的設(shè)計(jì)目標(biāo),這個(gè)設(shè)計(jì)目標(biāo)包括功能、性能等指標(biāo)。
嵌入式系統(tǒng)的組成
對(duì)于一個(gè)系統(tǒng),大致可以分為四大功能組件:輸入,處理,控制,輸出。
輸入:信號(hào)采集,信息輸入;一般包括模擬信號(hào)(AI)、數(shù)字信號(hào)(DI)、信息錄入等;
處理:對(duì)輸入的信息進(jìn)行處理,提取出有效信息;一般是指各種濾波算法;
控制:根據(jù)有效信息、系統(tǒng)的模型以及期望的結(jié)果,設(shè)計(jì)控制算法;
輸出:將控制信息輸出。一般為模擬信號(hào)(DA)、數(shù)字信號(hào)(DO)等。
而軟件運(yùn)行的載體,就是硬件。比如信號(hào)的輸入就是各種傳感器,輸出就是各種執(zhí)行部分,處理、控制算法,則需要運(yùn)行在MCU、CPU、FPGA上,運(yùn)行的數(shù)據(jù)需要存儲(chǔ)在RAM、Flash上。
嵌入式系統(tǒng)軟件模型
對(duì)于PC機(jī)、手機(jī)、服務(wù)器等編程,已經(jīng)有多種實(shí)踐模型,基礎(chǔ)的如面向?qū)ο笏枷?,基于組件的思想,面向接口編程,函數(shù)式編程。在應(yīng)用層有MVC,23種設(shè)計(jì)模式,領(lǐng)域驅(qū)動(dòng)等。但在嵌入式編程上,由于受到硬件資源和實(shí)時(shí)性要求的限制,過于重的設(shè)計(jì)實(shí)踐和編程語言,在嵌入式系統(tǒng)上根本無法實(shí)現(xiàn)。結(jié)合自己的實(shí)際編程經(jīng)驗(yàn)和自己的思考,建立起自己的嵌入式編程模型。
嵌入式軟件一般由芯片驅(qū)動(dòng)、板級(jí)驅(qū)動(dòng)、操作系統(tǒng)、文件系統(tǒng)、通訊協(xié)議、UI等組成,其中包括信號(hào)處理代碼、控制算法代碼,也是嵌入式軟件的一部分,對(duì)于這些功能組件,如何將它們按照一個(gè)有效方式,組合起來以實(shí)現(xiàn)系統(tǒng)功能要求,這種組合方式,就是嵌入式編程模式。
系統(tǒng)的運(yùn)行過程,是個(gè)動(dòng)態(tài)連續(xù)的過程,相同的連續(xù)過程,可以認(rèn)為系統(tǒng)處于一個(gè)狀態(tài),狀態(tài)與狀態(tài)之間,通過事件觸發(fā)轉(zhuǎn)移。系統(tǒng)中的相關(guān)元素集合,可以抽象為對(duì)象,對(duì)象是變量和方法的集合。
? 對(duì)象描述
對(duì)象是軟件的基本操作單元,對(duì)象由變量進(jìn)行描述,對(duì)象的方法是對(duì)對(duì)象變量的操作。
? 狀態(tài)空間
狀態(tài)空間是系統(tǒng)所有狀態(tài)的合集,各狀態(tài)之間可以相互轉(zhuǎn)換,某狀態(tài)可以是另一狀態(tài)的子狀態(tài)。各狀態(tài)間的轉(zhuǎn)移是通過事件觸發(fā)的。
? 事件驅(qū)動(dòng)
通過事件,來實(shí)現(xiàn)任務(wù)間的同步。一個(gè)事件,可能會(huì)觸發(fā)一個(gè)動(dòng)作,也可能觸發(fā)一次狀態(tài)轉(zhuǎn)移。
以最簡單的交通燈控制為例
對(duì)象描述:
typedef struct {
Color_t color; //交通燈顏色
int hold_time; //交通燈的保持時(shí)間} Ligght_t;
typedef struct {
Color_t (* Turn)(Color_t color)
} Light_Op_t;
交通燈控制系統(tǒng)的狀態(tài)空間
typedef enum {
STOP,
WAIT,
THROUGH
}
三個(gè)狀態(tài)對(duì)應(yīng)的led對(duì)象為
stop -- red -- 15秒;wait -- yellow -- 3秒;through -- green -- 45秒。
事件觸發(fā):
事件由于定時(shí)器產(chǎn)生,定時(shí)器在15秒,3秒,45秒之間循環(huán),每次計(jì)時(shí)完成,則發(fā)出一個(gè)信號(hào),同時(shí)進(jìn)行另一個(gè)計(jì)時(shí)。主任務(wù)接收到信號(hào)后,進(jìn)行狀態(tài)切換,同時(shí)輸出根據(jù)狀態(tài),控制對(duì)應(yīng)的交通燈的顏色。
偽代碼:
main(){ while(1){ switch(state){ case STOP:
Light.Turn(red);
state ++; break; case STOP_HOLD:
Wait_TimeOUt(15); //15秒后,狀態(tài)切換
state ++; break; case WAIT:
Light.Turn(yellow);
state ++; break; case WAIT_HOLD:
Wait_TimeOUt(3); //3秒后,狀態(tài)切換
state ++; break; case THROUGH:
Light.Turn(green);
state ++; break; case THROUGH_HOLD:
Wait_TimeOUt(45); //45秒后,狀態(tài)切換
state = STOP; break;
}
}
}
對(duì)于同一個(gè)系統(tǒng),也可以從不同的角度定義狀態(tài)空間和狀態(tài)轉(zhuǎn)移過程,但是他們?cè)谶壿嬌鲜堑刃У摹?/span>
在一些系統(tǒng)中,如protothread、STC51的任務(wù)調(diào)度系統(tǒng),均是采用類似的方案。
評(píng)論