《嵌入式軟件程序結(jié)構(gòu).ppt》由會員分享,可在線閱讀,更多相關(guān)《嵌入式軟件程序結(jié)構(gòu).ppt(47頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、1,嵌入式系統(tǒng),嵌入式系統(tǒng)的軟件系統(tǒng),2,嵌入式軟件開發(fā)內(nèi)容,開發(fā)系統(tǒng)軟件 操作系統(tǒng) 協(xié)議棧 GUI 庫函數(shù) 軟件組件與IP(知識產(chǎn)權(quán)內(nèi)核) 開發(fā)應(yīng)用軟件 在嵌入式操作系統(tǒng)之上進(jìn)行開發(fā) 在硬件層上進(jìn)行開發(fā),3,內(nèi)容,軟件的結(jié)構(gòu)和組成 監(jiān)控程序 裸機(jī)系統(tǒng)軟件的設(shè)計方法 軟件的移植問題 可移植應(yīng)用軟件的開發(fā)原則,4,1 軟件的結(jié)構(gòu)和組成,#include //普通程序 main() printf(“hello,worldn”); ,5,1 軟件的結(jié)構(gòu)和組成,#include //嵌入式軟件主程序 main() while(1) action1(); action2(); ,6,嵌入式系統(tǒng)
2、的軟件開發(fā)問題,嵌入式操作系統(tǒng)。 操作系統(tǒng)與應(yīng)用軟件的集成。 軟件的結(jié)構(gòu)。 嵌入式系統(tǒng)的軟件是沒有出口的,程序不能“退出”,整個程序的結(jié)構(gòu)應(yīng)該是無限的循環(huán)。 嵌入式系統(tǒng)的軟件設(shè)計需要考慮硬件的支持、操作系統(tǒng)的支持、程序的初始化和引導(dǎo)等諸多的方面。 嵌入式系統(tǒng)的軟件可能沒有操作系統(tǒng),在裸機(jī)上直接開發(fā)。,7,1.1嵌入式系統(tǒng)的軟件組成,初始化引導(dǎo)代碼 板級支持包 操作系統(tǒng) 通信協(xié)議棧 圖形用戶界面 應(yīng)用軟件,8,嵌入式系統(tǒng)的軟件結(jié)構(gòu),9,1.2初始化引導(dǎo)代碼,初始化引導(dǎo)代碼是任務(wù)嵌入式系統(tǒng)上電復(fù)位后第一個執(zhí)行的代碼 復(fù)位向量 80186:FFFF0H MCS51:0 ARM:0 執(zhí)行: 自檢 引導(dǎo)
3、操作系統(tǒng) 進(jìn)入初始化(硬件、軟件),10,1.4嵌入式操作系統(tǒng),復(fù)雜系統(tǒng)需要嵌入式操作系統(tǒng)的支持 簡單系統(tǒng)可以不使用嵌入式操作系統(tǒng) 嵌入式操作系統(tǒng)可裁減 嵌入式操作系統(tǒng)的內(nèi)核 處理機(jī)管理(任務(wù)、任務(wù)之間的通信和同步等) 存儲器管理 完整的嵌入式操作系統(tǒng) 內(nèi)核 文件系統(tǒng) 人機(jī)界面 設(shè)備驅(qū)動等,11,1.5網(wǎng)絡(luò)協(xié)議棧,協(xié)議棧對于具有網(wǎng)絡(luò)功能的嵌入式系統(tǒng)產(chǎn)品是必要的,目前嵌入式協(xié)議棧的提供有兩種方式, 一種是獨(dú)立的第三方協(xié)議棧產(chǎn)品, 一種是嵌入式操作系統(tǒng)的提供商提供協(xié)議棧產(chǎn)品。 協(xié)議棧的運(yùn)行必須基于嵌入式操作系統(tǒng)的平臺支持,但是并不意味著協(xié)議棧必須依賴于嵌入式操作系統(tǒng)的API。事實(shí)上,許多的嵌入式協(xié)
4、議棧,如inter niche的嵌入式TCP/IP協(xié)議棧做到了與操作系統(tǒng)的最大獨(dú)立性,可以與大多數(shù)嵌入式操作系統(tǒng)集成運(yùn)行。,12,1.6應(yīng)用軟件,嵌入式系統(tǒng)的應(yīng)用軟件一般需要自主開發(fā),不同的嵌入式系統(tǒng)的應(yīng)用軟件各具特色和功能。 例如常用的應(yīng)用軟件用于PDA上,記事本、通訊錄、計算器等。 應(yīng)用于工業(yè)現(xiàn)場總線領(lǐng)域的應(yīng)用軟件如控制軟件等。 應(yīng)用軟件的開發(fā)基于操作系統(tǒng)、網(wǎng)絡(luò)通信協(xié)議棧、圖形用戶接口、文件系統(tǒng)等一系列的低層API。,13,1.7 GUI,對于大多數(shù)嵌入式系統(tǒng),圖形用戶接口是必要的,特別是隨身設(shè)備如PDA、手機(jī)等。 GUI運(yùn)行在嵌入式操作系統(tǒng)之上。用戶開發(fā)的與用戶交互的應(yīng)用軟件通過調(diào)用GU
5、I的功能調(diào)用(API)來實(shí)現(xiàn)。,14,2 監(jiān)控程序-monitor,監(jiān)控程序是運(yùn)行在嵌入式系統(tǒng)中的一段代碼,具有與用戶進(jìn)行交互,管理系統(tǒng)資源的功能,具有操作系統(tǒng)內(nèi)核的一小部分功能。嵌入式系統(tǒng)正式運(yùn)行時,通常不需要監(jiān)控程序的干預(yù)。 目前開發(fā)嵌入式系統(tǒng),監(jiān)控程序的作為正在減少,只用在一些小的嵌入式系統(tǒng)中。 有的嵌入式控制器的制造商把監(jiān)控程序駐留在ROM中提供給用戶在開發(fā)時使用,提供的功能如程序下載、調(diào)試、固化等。 如motorola公司的某些8位嵌入式微控制器,15,3 裸機(jī)系統(tǒng)軟件的設(shè)計方法,無操作系統(tǒng)的嵌入式軟件設(shè)計 有操作系統(tǒng)的嵌入式軟件設(shè)計,16,3.1無操作系統(tǒng)的嵌入式軟件設(shè)計,前后臺系
6、統(tǒng) 中斷(事件)驅(qū)動系統(tǒng) 巡回服務(wù)系統(tǒng) 基于定時器的巡回服務(wù)系統(tǒng),17,3.1.1前后臺系統(tǒng),后臺: 應(yīng)用程序是一個無限循環(huán),巡回地執(zhí)行多個事件,完成相應(yīng)的操作。這一部分軟件稱為后臺。通常在主程序main()中被調(diào)用。 前臺: 中斷服務(wù)程序處理異步事件,這一部分可以看成是前臺。 后臺可以稱為任務(wù)級,前臺可以稱為中斷級。強(qiáng)實(shí)時性的的關(guān)鍵操作一定要用中斷來實(shí)現(xiàn)。,18,程序框架-后臺,main() /* 硬件初始化 */ while(1) /* 后臺程序 */ action1(); action2(); action3(); ,action_1() /* 執(zhí)行動作n */ action_n
7、() /* 執(zhí)行動作n */ ,19,程序框架-前臺,Isr_1() /* 中斷1的中斷服務(wù)程序 */ Isr_n() /* 中斷2的中斷服務(wù)程序 */ ,20,前后臺系統(tǒng)的特點(diǎn),實(shí)時性問題(不好) 中斷服務(wù)程序提供的數(shù)據(jù)(實(shí)時性數(shù)據(jù))只有在后臺輪詢到的時候才能得到運(yùn)行 應(yīng)用 小系統(tǒng): 微波爐 電話機(jī) 玩具等,,21,3.1.2中斷(事件)驅(qū)動系統(tǒng),原理 整個嵌入式系統(tǒng)軟件由中斷服務(wù)程序構(gòu)成 主程序完成系統(tǒng)的初始化工作 應(yīng)用 低功耗系統(tǒng)設(shè)計 事件驅(qū)動系統(tǒng) 構(gòu)成 主程序-完成系統(tǒng)的初始化 中斷服務(wù)例程-完成事務(wù)處理,22,中斷驅(qū)動系統(tǒng)-主程序,main() /*完成系統(tǒng)的硬件初始化和
8、數(shù)據(jù)結(jié)構(gòu)的初始化(如果必要的話)*/ /* to do: 系統(tǒng)的初始化 */ while(1) 。。。其它代碼或 enter_low_power(); /*進(jìn)入低功耗狀態(tài)*/ ,23,中斷驅(qū)動系統(tǒng)-中斷程序,Isr_n() /* 其中的一個中斷服務(wù)程序 */ /* to do: 處理中斷事件 */ /* to do: 中斷返回 */ ,24,3.1.3巡回服務(wù)系統(tǒng),應(yīng)用: 嵌入式處理器/控制器的中斷源不多 解決方案 增加中斷源-需要硬件,成本高 軟件方案-軟件巡回服務(wù) main() /* to do: 系統(tǒng)初始化 */ while(1) action_1();/*巡回檢
9、測事件1并處理事件*/ action_2();/*巡回檢測事件2并處理事件*/ action_n();/*巡回檢測事件n并處理事件*/ ,25,3.1.4基于定時器的巡回服務(wù)系統(tǒng),普通巡回服務(wù)系統(tǒng)的缺點(diǎn) 處理器全速運(yùn)行,開銷大-功耗高-電池供電系統(tǒng) 降低處理器的工作時間-基于定時器的巡回服務(wù)系統(tǒng) 構(gòu)成 主程序 定時器中斷服務(wù)程序,26,主程序,main() /* to do: 系統(tǒng)初始化 */ /* to do: 設(shè)置定時器,如自動重新加載方式 */ while(1) 。。。其它代碼或 enter_low_power(); ,27,定時器中斷服務(wù)例程,Isr_t
10、imer() /* 定時器的中斷服務(wù)程序 */ action_1(); /*執(zhí)行事件1的處理*/ action_2(); /*執(zhí)行事件2的處理*/ action_n(); /*執(zhí)行事件n的處理*/ ,28,4 軟件的移植,Contents 考慮移植的必要性 裸機(jī)系統(tǒng)的軟件移植 應(yīng)用軟件的移植 可移植應(yīng)用軟件的設(shè)計思路,29,4.1移植的必要性,基于嵌入式處理器的原因 處理器的更新方式 兼容機(jī)更新方式-量變,短時間 80 x86系列 新的體系結(jié)構(gòu)代替舊的體系結(jié)構(gòu)-質(zhì)變,長時間 dragon ball:EZ,VZ: 68000體系,SZ:ARM體系 基于嵌入式操作系統(tǒng)的原因 舊的操作系統(tǒng)淘汰,新的
11、操作系統(tǒng)被開發(fā)出來 應(yīng)用軟件需要運(yùn)行于不同的嵌入式操作系統(tǒng)平臺上,30,例:,硬件: Z80,STD總線工業(yè)PC 軟件: DOS的DCSwindows平臺、Vxworks平臺,31,5.2裸機(jī)系統(tǒng)的軟件移植,裸機(jī)系統(tǒng)的特點(diǎn) 通常比較簡單(如8位字寬) 使用匯編語言或C語言開發(fā) 不易移植的情況 匯編語言開發(fā) 跨平臺 模塊化差,32,基于硬件抽象層可移植軟件結(jié)構(gòu),應(yīng)用軟件,輸入/輸出模塊,處理器硬件,應(yīng)用軟件,硬件抽象層,處理器硬件,輸入/輸出模塊,硬件相關(guān),可移植性結(jié)構(gòu),33,硬件抽象層的特點(diǎn),硬件抽象層具有與硬件密切相關(guān)性; 為上層應(yīng)用軟件的開發(fā)提供統(tǒng)一的接口 接口定義的功能應(yīng)包含硬件或系統(tǒng)所
12、需硬件支持的所有功能; 接口定義簡單明了,太多接口函數(shù)會增加軟件模擬的復(fù)雜性; 具有可測性的接口設(shè)計有利于系統(tǒng)的軟硬件測試和集成。,應(yīng)用軟件,硬件抽象層,處理器硬件,輸入/輸出模塊,34,硬件抽象層設(shè)計方法和原則,軟件硬件并行、協(xié)同設(shè)計 分析接口的數(shù)據(jù)傳輸特性(雙向/單向數(shù)據(jù)傳輸,字節(jié)型/數(shù)據(jù)幀型傳輸模式); 分析接口配置屬性; 定義接口所需的相關(guān)函數(shù)。,35,應(yīng)用軟件的開發(fā)原則,不直接操作硬件 調(diào)用硬件抽象層的接口函數(shù) 完成面向應(yīng)用的軟件開發(fā),36,硬件抽象層例子,RS232串行通信接口 發(fā)送功能 接收功能 模式、參數(shù)設(shè)置功能 控制功能 對于MCS51,8251,16450/16550,et
13、c設(shè)計同樣的接口函數(shù), uart_put(uint8 ch, uint8 c); uart_get(uint8 ch, uint8 *buf); uart_puts(uint8 ch, uint8 *pstr); uart_gets(uint8 ch, uint8 *pbuf); uart_init(uint8 ch, uint8 rate, uint8 data_len, uint8 check, uint8 start_bit, uint8 stop_bit);,37,應(yīng)用程序中使用可移植的UART的功能,初始化uart uart_init() 發(fā)送一個字符 uart_put() 接收一個
14、字符 uart_get(),38,主機(jī) 從uart接收字符,并發(fā)回uart 終端 從鍵盤上輸入字符,屏幕上回顯,Terminal鍵盤操作回顯,39,terminal 鍵盤操作回顯,main() /*主機(jī)程序*/ init_uart(); while(1) c=uart_get(); uart_put() ,40,terminal 鍵盤操作回顯,main() /*終端程序*/ init_uart(); while(1) c=key_get();/* read keyboard */ uart_put(); uart_get(); printf(); ,41,5可移植應(yīng)用軟
15、件的設(shè)計原則,嵌入式系統(tǒng)開發(fā)的初期考慮移植問題 設(shè)計原則 層次化 模塊化 層次化與模塊化的結(jié)合 可設(shè)計硬件抽象層 可設(shè)計操作系統(tǒng)抽象層,42,5.5.3層次化與模塊化的結(jié)合,43,datatype.h /* 基本數(shù)據(jù)類型 */ typedef unsigned char BOOLEAN; typedef unsigned char UINT8; typedef signed char INT8; typedef unsigned short UINT16; typedef signed short INT16; typedef unsigned int UINT32; typedef signed int INT32; typedef float FP32; typedef double FP64;,可移植數(shù)據(jù)類型的定義,,44,基于中間層的系統(tǒng)設(shè)計的特點(diǎn),優(yōu)點(diǎn) 可移植性好 缺點(diǎn) 效率低 例子: ODBC,45,小結(jié),嵌入式系統(tǒng)的軟件結(jié)構(gòu) 裸機(jī)系統(tǒng) 含有操作系統(tǒng)的復(fù)雜系統(tǒng) 關(guān)于嵌入式應(yīng)用軟件的移植問題 可移植系統(tǒng)的設(shè)計,46,作業(yè)思考題,針對于每一種(共4種)裸機(jī)系統(tǒng)的設(shè)計方法,各舉一個應(yīng)用的例子,并用類C語言描述你的方案 熟悉嵌入式操作系統(tǒng)的基本概念和術(shù)語,47,The End,