新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式系統(tǒng)基礎(chǔ)設(shè)計方法

        嵌入式系統(tǒng)基礎(chǔ)設(shè)計方法

        作者: 時間:2024-05-20 來源:網(wǎng)絡(luò) 收藏

        方法

        系統(tǒng)是將一個電子系統(tǒng)嵌入到一個物理系統(tǒng)中,連接起物理系統(tǒng)和電子信息系統(tǒng),從而實現(xiàn)信息系統(tǒng)對物理系統(tǒng)觀察和控制。

        本文引用地址:http://www.104case.com/article/202405/458931.htm

        一個系統(tǒng)的設(shè)計,可以從總則上分三大步驟:建模 –> 設(shè)計 -> 分析。這里所說的設(shè)計,是理論的設(shè)計,圖紙的設(shè)計,而不涉及到系統(tǒng)的實施。

        ? 建模:根據(jù)系統(tǒng)的物理特性、行為邏輯、業(yè)務(wù)邏輯等,建立系統(tǒng)的數(shù)學(xué)據(jù)模型。對于不同類型的系統(tǒng),有不同的描述方式,比如對于人人機交互可以用狀態(tài)機模型,對于一個控制系統(tǒng)可以用狀態(tài)空間方程或者傳遞函數(shù),對于一個交易系統(tǒng)可以用流程圖。對于一個大系統(tǒng),也可以分解成多個子系統(tǒng),子系統(tǒng)建立不同的數(shù)學(xué)模型,這個大系統(tǒng)是不同數(shù)學(xué)模型的組合。

        ? 設(shè)計:根據(jù)系統(tǒng)的數(shù)學(xué)模型,創(chuàng)建實現(xiàn)系統(tǒng)模型的結(jié)構(gòu),指定系統(tǒng)如何實現(xiàn)功能,這包括硬件系統(tǒng)、軟件系統(tǒng)的設(shè)計、軟硬件結(jié)合的設(shè)計。

        ? 分析:說明設(shè)計的系統(tǒng)為什么能完成它的設(shè)計目標,這個設(shè)計目標包括功能、性能等指標。

        嵌入式系統(tǒng)的組成

        對于一個系統(tǒng),大致可以分為四大功能組件:輸入,處理,控制,輸出。

        • 輸入:信號采集,信息輸入;一般包括模擬信號(AI)、數(shù)字信號(DI)、信息錄入等;

        • 處理:對輸入的信息進行處理,提取出有效信息;一般是指各種濾波算法;

        • 控制:根據(jù)有效信息、系統(tǒng)的模型以及期望的結(jié)果,設(shè)計控制算法;

        • 輸出:將控制信息輸出。一般為模擬信號(DA)、數(shù)字信號(DO)等。

        而軟件運行的載體,就是硬件。比如信號的輸入就是各種傳感器,輸出就是各種執(zhí)行部分,處理、控制算法,則需要運行在MCU、CPU、FPGA上,運行的數(shù)據(jù)需要存儲在RAM、Flash上。

        嵌入式系統(tǒng)軟件模型

        對于PC機、手機、服務(wù)器等編程,已經(jīng)有多種實踐模型,基礎(chǔ)的如面向?qū)ο笏枷耄诮M件的思想,面向接口編程,函數(shù)式編程。在應(yīng)用層有MVC,23種設(shè)計模式,領(lǐng)域驅(qū)動等。但在嵌入式編程上,由于受到硬件資源和實時性要求的限制,過于重的設(shè)計實踐和編程語言,在嵌入式系統(tǒng)上根本無法實現(xiàn)。結(jié)合自己的實際編程經(jīng)驗和自己的思考,建立起自己的嵌入式編程模型。

        嵌入式軟件一般由芯片驅(qū)動、板級驅(qū)動、操作系統(tǒng)、文件系統(tǒng)、通訊協(xié)議、UI等組成,其中包括信號處理代碼、控制算法代碼,也是嵌入式軟件的一部分,對于這些功能組件,如何將它們按照一個有效方式,組合起來以實現(xiàn)系統(tǒng)功能要求,這種組合方式,就是嵌入式編程模式。

        系統(tǒng)的運行過程,是個動態(tài)連續(xù)的過程,相同的連續(xù)過程,可以認為系統(tǒng)處于一個狀態(tài),狀態(tài)與狀態(tài)之間,通過事件觸發(fā)轉(zhuǎn)移。系統(tǒng)中的相關(guān)元素集合,可以抽象為對象,對象是變量和方法的集合。

        ? 對象描述

        對象是軟件的基本操作單元,對象由變量進行描述,對象的方法是對對象變量的操作。

        ? 狀態(tài)空間

        狀態(tài)空間是系統(tǒng)所有狀態(tài)的合集,各狀態(tài)之間可以相互轉(zhuǎn)換,某狀態(tài)可以是另一狀態(tài)的子狀態(tài)。各狀態(tài)間的轉(zhuǎn)移是通過事件觸發(fā)的。

        ? 事件驅(qū)動

        通過事件,來實現(xiàn)任務(wù)間的同步。一個事件,可能會觸發(fā)一個動作,也可能觸發(fā)一次狀態(tài)轉(zhuǎn)移。

        以最簡單的交通燈控制為例

        對象描述:

        typedef struct {
           Color_t  color;     //交通燈顏色
           int     hold_time;  //交通燈的保持時間} Ligght_t;
        typedef struct {
           Color_t (* Turn)(Color_t color)
        } Light_Op_t;

        交通燈控制系統(tǒng)的狀態(tài)空間

        typedef enum {
           STOP,
           WAIT,
           THROUGH
        }

        三個狀態(tài)對應(yīng)的led對象為

        stop --  red -- 15秒;wait --  yellow -- 3秒;through -- green -- 45秒。

        事件觸發(fā):

        事件由于定時器產(chǎn)生,定時器在15秒,3秒,45秒之間循環(huán),每次計時完成,則發(fā)出一個信號,同時進行另一個計時。主任務(wù)接收到信號后,進行狀態(tài)切換,同時輸出根據(jù)狀態(tài),控制對應(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;
               }
           }      
        }

        對于同一個系統(tǒng),也可以從不同的角度定義狀態(tài)空間和狀態(tài)轉(zhuǎn)移過程,但是他們在邏輯上是等效的。

        在一些系統(tǒng)中,如protothread、STC51的任務(wù)調(diào)度系統(tǒng),均是采用類似的方案。



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 伊宁市| 顺义区| 巴彦县| 双柏县| 德昌县| 大洼县| 个旧市| 大庆市| 稻城县| 盖州市| 理塘县| 沽源县| 清水河县| 许昌县| 通山县| 玛沁县| 平湖市| 天台县| 七台河市| 宁国市| 齐齐哈尔市| 连平县| 汝南县| 宜春市| 绍兴市| 五家渠市| 桓仁| 邵阳市| 望江县| 保亭| 广水市| 苏尼特右旗| 黄龙县| 焦作市| 江华| 蒙阴县| 嘉黎县| 乌苏市| 大宁县| 溧水县| 广东省|