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