《嵌入式系統(tǒng)基礎與實踐》(第2版)課件第12章 從模塊到項目_第1頁
《嵌入式系統(tǒng)基礎與實踐》(第2版)課件第12章 從模塊到項目_第2頁
《嵌入式系統(tǒng)基礎與實踐》(第2版)課件第12章 從模塊到項目_第3頁
《嵌入式系統(tǒng)基礎與實踐》(第2版)課件第12章 從模塊到項目_第4頁
《嵌入式系統(tǒng)基礎與實踐》(第2版)課件第12章 從模塊到項目_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

從模塊到項目第12章《嵌入式系統(tǒng)基礎與實踐》(第2版)主講教師:(

學院)知識目標能力目標思維與素養(yǎng)目標

理解項目與模塊的關系,熟練掌握C語言中的宏定義、條件編譯、結構體、枚舉等應用。

理解和掌握嵌入式系統(tǒng)從模塊到項目的設計思想、實踐原理。

掌握“抽象建模—系統(tǒng)分解—功能實現(xiàn)”的由多個模塊構成項目的嵌入式系統(tǒng)的開發(fā)方法。

能夠根據(jù)系統(tǒng)功能,抽象和解析系統(tǒng)需求,撰寫系統(tǒng)設計需求任務書。

根據(jù)系統(tǒng)需求任務書,合理進行硬件選型,設計系統(tǒng)硬件原理圖,繪制電路PCB圖。

依據(jù)軟件流程圖,進行系統(tǒng)軟件設計,編寫模塊化的程序代碼。

進行軟件、硬件聯(lián)合調(diào)試并進行結果分析,撰寫技術文檔。

通過項目交付式的工程實踐,進行工程化錘煉,培養(yǎng)具有工程意識與商業(yè)、技術、人文相結合的“新工程師”。

學習面向?qū)ο蟮木幊淘O計思想,拓展技術的邊界,踐行“知識—技能—思維”的教育閉環(huán)。

寫作不僅是一種思考,還是完善思維體系的核心能力。培養(yǎng)良好的技術文檔撰寫能力,是每位技術工程師必備的競爭力。學習目標項目是由兩個或兩個以上的功能模塊組成的系統(tǒng),是功能模塊的有機融合。工作原理:處理輸入事件,經(jīng)微處理器加工處理,產(chǎn)生結果并輸出。其輸入事件往往來自傳感器、按鍵或觸屏等外圍設備,處理后,輸出信號用于驅(qū)動電機等執(zhí)行機構或顯示。第12章從模塊到項目第12章從模塊到項目目錄12.1嵌入式系統(tǒng)的開發(fā)方式12.2嵌入式系統(tǒng)層次化設計12.3項目實踐:廚余垃圾智能監(jiān)測系統(tǒng)12.4面向?qū)ο蟮木幊趟枷?2.1嵌入式系統(tǒng)的開發(fā)方式

目前,嵌入式系統(tǒng)的開發(fā)方式主要有三種:輪詢方式、前/后臺系統(tǒng)方式及多任務系統(tǒng)方式(基于嵌入式實時操作系統(tǒng)方式)。圖1

單個I/O設備的輪詢流程圖2前/后臺系統(tǒng)方式示意圖12.1嵌入式系統(tǒng)的開發(fā)方式在嵌入式系統(tǒng)開發(fā)中引入操作系統(tǒng),由操作系統(tǒng)對嵌入式平臺的硬件資源進行統(tǒng)一管理和分配,應用流程被劃分為一個個獨立的無限循環(huán)任務,每個任務完成一部分操作,并且各任務之間相互獨立、互不干擾,且具有各自的優(yōu)先級,由操作系統(tǒng)根據(jù)任務的優(yōu)先級,通過調(diào)度器使CPU分批執(zhí)行各個任務。12.2嵌入式系統(tǒng)層次化設計12.2.1項目需求分析12.2.2系統(tǒng)總體架構設計12.2.1項目需求分析

對綜合項目進行需求分析,明晰功能,明確一個系統(tǒng)/項目的輸入輸出,弄清楚項目/系統(tǒng)的應用范圍或詳細的規(guī)格要求。這一階段思考得越詳細、考慮得越深入,對后期的開發(fā)就越有利。項目/系統(tǒng)需要達到的各項性能指標有哪些;系統(tǒng)功能目前有哪些可行的解決方案;系統(tǒng)的功耗、體積有何要求;微控制器如何選型,傳感器采用數(shù)字的還是模擬的?輸出顯示設備是采用OLED還是上位機(PC)顯示?系統(tǒng)運行時突發(fā)故障的處理。硬件實現(xiàn)成本高,但執(zhí)行效率高;軟件實現(xiàn)開發(fā)難度大,但成本低,采用自頂向下、逐步細分為功能相對獨立的模塊化設計,會使得程序框架更為清晰。軟件和硬件的劃分系統(tǒng)功能模塊的劃分12.2.2系統(tǒng)總體架構設計對系統(tǒng)進行功能模塊劃分、軟件和硬件劃分。硬件模塊如電源模塊、通信模塊、存儲模塊、顯示模塊等多以具體功能進行劃分,功能模塊之間應滿足低偶合、高內(nèi)聚的要求應用功能模塊高內(nèi)聚:一個C文件中函數(shù),只有相互之間的調(diào)用,而不存在調(diào)用其它文件中函數(shù)的情況實現(xiàn)硬件的初始化操作,通常使用相應硬件名稱命名,如LED硬件驅(qū)動模塊定義為led.c一種硬件對應一個硬件驅(qū)動模塊低耦合:模塊與模塊之間應相對獨立,模塊與模塊之間的接口應盡量少而簡單。12.2.2系統(tǒng)總體架構設計一個嵌入式系統(tǒng)通常包括兩大類模塊硬件驅(qū)動模塊12.2.2系統(tǒng)總體架構設計嵌入式系統(tǒng)應遵循的編程原則1.每一個功能模塊都由源文件.c和頭文件.h組成2.每一個.c源文件都對應一個同名的.h頭文件3.使用頭文件共享函數(shù)、變量4.使用頭文件共享宏及類型定義5.防止頭文件被重復包含12.2.2系統(tǒng)總體架構設計嵌入式系統(tǒng)應遵循的編程原則1.每一個功能模塊都由源文件.c和頭文件.h組成.c源文件是每個功能模塊具體功能的實現(xiàn)。.h頭文件是對該模塊接口的聲明,對外提供接口供外部程序調(diào)用,2.每一個.c源文件都對應一個同名的.h頭文件把相對獨立的功能放在.c源文件中用代碼實現(xiàn),把需要對外使用的函數(shù)或變量聲明放在對應的.h頭文件中供其它模塊使用。3.使用頭文件共享函數(shù)、變量將某模塊提供給其它模塊調(diào)用的函數(shù)、變量在對應模塊的.h頭文件中用extern關鍵字聲明,而模塊內(nèi)的函數(shù)和全局變量應在.c文件開頭部分用static關鍵字聲明。12.2.2系統(tǒng)總體架構設計嵌入式系統(tǒng)應遵循的編程原則4.使用頭文件共享宏及類型定義針對復雜的系統(tǒng),由于模塊較多,涉及到的文件多,模塊間全局變量也較多,可以將全局變量定義在一個.h頭文件內(nèi)例如:將寄存器的位操作及常用的數(shù)據(jù)類型用typedef定義在頭文件中,方便以后調(diào)用以及移植修改。#ifndef__SYS_H#define__SYS_H #include"stm32f10x.h"#include"stdio.h" //位操作宏定義#defineBIT0 (0x0001)#defineBIT1 (0x0002)……#defineBIT30 (0x40000000)#defineBIT31 (0x80000000)12.2.2系統(tǒng)總體架構設計嵌入式系統(tǒng)應遵循的編程原則4.使用頭文件共享宏及類型定義

//常用的數(shù)據(jù)類型定義,采用宏定義方式,便于移植和更改#defineu8 uint8_t#defineu16 uint16_t#defineu32 uint32_t#defines8 int8_t#defines16 int16_t#defines32 int32_t#definebool _Bool#definefalse 0#definetrue !false

//結構體定義typedefstruct{unsignedshortb0:1;unsignedshortb1:1;……unsignedshortb15:1;}REG16_TypeDef;/*位帶操作,實現(xiàn)51類似的GPIO控制功能*///IO口宏定義操作#definePAout((volatileREG16_TypeDef*)GPIOA_ODR_Addr)//輸出#definePain((volatileREG16_TypeDef*)GPIOA_IDR_Addr)//輸入

……#definePFout((volatileREG16_TypeDef*)GPIOF_ODR_Addr)//輸出#definePfin((volatileREG16_TypeDef*)GPIOF_IDR_Addr)/輸入#endif12.2.2系統(tǒng)總體架構設計嵌入式系統(tǒng)應遵循的編程原則5.防止頭文件被重復包含每個模塊都對應有.h頭文件,為了避免頭文件被重復包含,導致編譯錯誤,通常使用條件編譯命令#ifndef……#endif和#define宏定義實現(xiàn)。模塊化設計中頭文件的一般格式#ifndef__XXX_H#define__XXX_H #include"stm32f10x.h"#ifdefIN_XXX#defineXXX_EXT#else#defineXXX_EXT extern#endif#defineSpeaker PBout->b9#pragmapack(1) //偽指令#pragmapack(n)的作用是自定義字節(jié)對齊方式,n為字節(jié)個數(shù)

12.2.2系統(tǒng)總體架構設計嵌入式系統(tǒng)應遵循的編程原則5.防止頭文件被重復包含//結構體定義typedefstruct {volatileu32Weight_ADC; volatileu8Device_BH[10]; volatileu16Alarm_Time;volatileu8Lock_State;}Device_Type; #pragmapack()//取消自定義字節(jié)對齊方式//聲明外部變量MAIN_EXTvolatileu8Device_State; MAIN_EXTvolatileu16Weight; MAIN_EXTvolatileu32Weight_Buf[20]; //聲明外部函數(shù)voidSys_Init(void);voidOn_MeasureProcess(void);voidOn_SpeakAlarm(void);#endif12.2.3系統(tǒng)軟硬件設計系統(tǒng)總體架構設計確定后,接下來就需要進行系統(tǒng)的詳細設計,即具體的硬件設計和軟件設計。系統(tǒng)軟硬件設計硬件設計芯片的選型CPU引腳配置、線路layout設計等軟件設計繪制系統(tǒng)(控制)流程圖繪制子模塊流程圖繪制數(shù)據(jù)處理流程圖12.2.3系統(tǒng)軟硬件設計

可擴充性和可移植性反映在系統(tǒng)架構設計中,就是系統(tǒng)必須采用模塊化、層次化的設計思想。系統(tǒng)驅(qū)動層硬件驅(qū)動層I/O引腳的分配定時器……板級驅(qū)動層系統(tǒng)應用層調(diào)用硬件驅(qū)動層、板級驅(qū)動層提供的接口函數(shù)12.2.3系統(tǒng)軟硬件設計系統(tǒng)層次化模塊設計框圖將與硬件相關的模塊和與硬件無關的模塊明確區(qū)分開來;各模塊之間通過API函數(shù)進行溝通;實現(xiàn)系統(tǒng)層次化、功能模塊化;有利于調(diào)試階段的系統(tǒng)整合以及后續(xù)的系統(tǒng)維護和升級改造。12.3項目實踐項目實踐01020312.2.1項目需求分析12.2.3系統(tǒng)硬件設計12.2.2項目總體架構設計0412.2.4系統(tǒng)軟件設計12.3.1項目需求分析餐廚垃圾產(chǎn)出量大餐廚垃圾危害大引起重視,探索利用與管理方法餐廚垃圾的無害化處理及資源化利餐廚垃圾數(shù)字化管理平臺,保障回收負責監(jiān)控的前端設備12.3.2系統(tǒng)總體架構設計

系統(tǒng)總體架構設計是把系統(tǒng)功能需求分析的結果轉(zhuǎn)換為系統(tǒng)體系結構,形成系統(tǒng)模塊結構圖。需求分析功能分析系統(tǒng)分解架構確立系統(tǒng)功能示意圖12.3.2系統(tǒng)總體架構設計采用ST公司的STM32F103系列微處理器作為主控芯片,實現(xiàn)餐廚垃圾智能監(jiān)測系統(tǒng)的前端設備。功能基本數(shù)據(jù)采集稱重液位溫度數(shù)據(jù)處理通信控制驅(qū)動開鎖加熱系統(tǒng)功能設置ID密碼時間零點標定工作狀態(tài)指示與輸出報警重量超限液位超限溫度超限開鎖超時12.3.2系統(tǒng)總體架構設計

嵌入式系統(tǒng)開發(fā)有裸機開發(fā)(單片機的開發(fā)模式)和基于嵌入式操作系統(tǒng)(RTOS)開發(fā)兩種,本系統(tǒng)模塊少,流程簡單,采用基于裸機的開發(fā)更為適合。餐廚垃圾智能監(jiān)測系統(tǒng)設計框圖12.3.3系統(tǒng)硬件設計主要涉及各硬件模塊的I/O引腳配置、微控制器最小系統(tǒng)設計(晶振、調(diào)試和復位電路等)以及電源電路的設計等。硬件設計稱重測量電路液位測量電路蜂鳴器報警電路按鍵電路其它模塊12.3.3系統(tǒng)硬件設計稱重測量電路

稱重傳感器信號采用差分輸入模式從通道A輸入,與引腳INNA(通道A負輸入端)和INPA(通道A正輸入端)相連接。

利用HX711模塊采集廢棄油脂收集桶的壓力信號,用于廢棄油脂的稱重。HX711是一款專為高精度電子秤設計的24位AD轉(zhuǎn)換器芯片,內(nèi)部集成了穩(wěn)壓電源、時鐘振蕩器等AD轉(zhuǎn)換所必需的電路,具有集成度高、響應速度快、抗干擾能力強等優(yōu)點,提高了性能和可靠性。12.3.3系統(tǒng)硬件設計液位測量電路液位檢測采用投入式液位變送器,輸出4~20mA標準模擬電流信號;AD轉(zhuǎn)換過程則由微控制器內(nèi)部集成的AD轉(zhuǎn)換器實現(xiàn);電路中的TVS管SMBJ5.0CA用于消除瞬時脈沖對電路的影響,經(jīng)過調(diào)理后的液位傳感器信號連接到微控制器的I/O引腳。12.3.3系統(tǒng)硬件設計蜂鳴器報警電路需要報警時微控制器經(jīng)I/O引腳送出低電平,三極管Q1導通,蜂鳴器報警按鍵模塊用于設置系統(tǒng)參數(shù),比如設置當前日期、壓力傳感器的參數(shù)標定等按鍵電路12.3.4系統(tǒng)軟件設計

系統(tǒng)必須采用模塊化、層次化的設計思想:將與硬件相關的部分和與硬件無關的模塊分開;各模塊之間的信息交互通過API來實現(xiàn)。

嵌入式系統(tǒng)的開發(fā)需要考慮兩個特性,一個是可擴充性,一個是可移植性。驅(qū)動層完全與硬件相關的硬件驅(qū)動層與所用硬件平臺密切相關,主要涉及微控制器I/O引腳的分配、微控制器內(nèi)部定時器、串口和ADC等功能模塊的使用,實現(xiàn)接口的驅(qū)動功能,可移植性和可重用性較低;與底層硬件隔離的板級驅(qū)動層通過調(diào)用底層硬件驅(qū)動提供的API函數(shù)實現(xiàn)硬件隔離,用于隱藏具體的硬件特性,并提供API供系統(tǒng)應用層或其它程序模塊調(diào)用。12.3.4系統(tǒng)軟件設計餐廚垃圾監(jiān)測系統(tǒng)工程文件架構圖硬件驅(qū)動層的主要是各硬件驅(qū)動模塊的劃分和設計,涉及到.c和.h的模塊化劃分思想。系統(tǒng)應用程序?qū)拥脑O計主要是全局變量的定義、系統(tǒng)功能函數(shù)實現(xiàn)等,涉及到流程圖的繪制、C語言函數(shù)模塊規(guī)范化編寫規(guī)范等。每個功能模塊對應一個相應的頭文件。硬件驅(qū)動層12.3.4系統(tǒng)軟件設計#defineIN_KEY#include"key.h"#include"delay.h"voidKEY_Init(void)//按鍵初始化函數(shù){GPIO_InitTypeDefGPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);//按鍵

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOB,&GPIO_InitStructure);}//按鍵處理函數(shù)u8KEY_Scan(void){staticu8key_up=1;//按鍵按松開標志 key.cif(key_up==1&&(KEY_SET==0||KEY_ADD==0||KEY_DEC==0||KEY_OK==0)){delay_ms(50);//去抖動

key_up=0;if(KEY_SET==0) return1;if(KEY_ADD==0) return2;if(KEY_DEC==0) return3;if(KEY_OK==0) return4;}elseif(KEY_SET==1&&KEY_ADD==1&&KEY_DEC==1&&KEY_OK==1){if(key_up==0){key_up=1;}} return0;//無按鍵按下}12.3.4系統(tǒng)軟件設計#ifndef__KEY_H#define__KEY_H

#include"sys.h"#ifdefIN_KEY#defineKEY_EXT#else#defineKEY_EXT extern#endifkey.h#defineKEY_SET PBin->b11#defineKEY_ADD PBin->b12#defineKEY_DEC PBin->b13#defineKEY_OK PBin->b14voidKEY_Init(void);//按鍵I/O引腳初始化u8KEY_Scan(void);//按鍵掃描函數(shù),用于判斷是哪個按鍵操作#endif12.3.4系統(tǒng)軟件設計

板級驅(qū)動層劃分為:稱重測量模塊、藍牙或GSM通信控制模塊、功能菜單顯示模塊等u32HX711_ReadCount(void)//讀取HX711的AD數(shù)值{u32i,Count;HX711_SCK=0; //使能ADCount=0;while(HX711_DT==1);//AD轉(zhuǎn)換未結束則等待,否則開始讀取

for(i=0;i<24;i++){HX711_SCK=1;//PD_SCK置高(發(fā)送脈沖)

Count<<=1;//下降沿來時變量Count左移一位,右側(cè)補零

HX711_SCK=0;//PD_SCK置低

if(HX711_DT==1)Count++; }HX711_SCK=1;Count=Count^0x800000;//第25個脈沖下降沿來時,轉(zhuǎn)換數(shù)據(jù)

HX711_SCK=0;returnCount;}#ifndef__HX711_H#define__HX711_H#include"sys.h"

#ifdefIN_HX711#defineHX711_EXT#else#defineHX711_EXTextern#endif

u32HX711_ReadCount(void); //讀取HX711的AD數(shù)值#endifHX712.h12.3.4系統(tǒng)軟件設計系統(tǒng)應用程序功能通過調(diào)用硬件驅(qū)動層提供的接口函數(shù)實現(xiàn)相應的功能;模塊的劃分以“信息處理”為原則。以“數(shù)據(jù)流導向”方式體現(xiàn)在代碼中工具程序流程圖繪制各層級的流程圖圖形化的表示方式,直觀清晰編寫規(guī)范函數(shù)頭添加相應的注釋,比如函數(shù)名稱、函數(shù)功能、函數(shù)入口參數(shù)、返回值等的說明遵循一定的程序編寫規(guī)范面向?qū)ο髮栴}進行自然分割,問題抽象成若干個對象12.4面向?qū)ο蟮木幊趟枷胪愋偷膶ο缶哂邢嗤膶傩院头椒?,在對象中封裝屬性和方法,所有的業(yè)務操作變?yōu)閷ο蟮男袨楹蛯ο笾g的消息傳遞將接口抽象成類,程序通過各個類的實例實現(xiàn)通信和協(xié)作,形成通用的接口,實現(xiàn)代碼的可拓展性,滿足系統(tǒng)對模塊的低耦合、高內(nèi)聚要求。面向?qū)ο缶幊躺婕胺庋b、繼承和多態(tài)等概念,在嵌入式系統(tǒng)中多采用結構體、指針和枚舉等數(shù)據(jù)類型來實現(xiàn)。本章小結項目需求分析總體架構設計12.1嵌入式系統(tǒng)層次化設計背景分析總體架構設計硬件設計軟件設計12.2項目實踐12.4面向?qū)ο缶幊趟枷?.輪詢方式2.前后臺方式3.基于嵌入式實時操作系統(tǒng)方式12.1嵌入式系統(tǒng)的開發(fā)方式習題與思考01選擇題1.模塊化編程中通常將某模塊提供給其他模塊調(diào)用變量定義為全局變量,在對應模塊的.h頭文件中用(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論