##嵌入式系統的概念算法
- 第一種定義:嵌入式系統是以應用爲中心、計算機技術爲基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
- 第二種定義:把基於處理器(通用處理器和嵌入式處理器)的設備成爲計算機,把計算機分爲兩大部分,即通用計算機和嵌入式計算機。嵌入式系統也被成爲嵌入式計算機,所以嵌入式系統被定義爲非通用計算機系統。
- 嵌入式系統應定義爲:嵌入到對象體系中的專用計算機系統,「嵌入式」、「專用性」與「計算機系統」是嵌入式系統的三個基本要素,對象系統則是指嵌入式系統所嵌入的宿主系統。
##嵌入式系統的分類編程
- 按嵌入式微處理器的位數分類:8位、16位、32位和64位。
- 按實時性分類:嵌入式實時系統(硬實時系統和軟實時系統)、嵌入式非實時系統。
- 按嵌入式軟件結構分類:
- 循環輪詢系統。
- 先後臺系統:中斷驅動機制。
- 多任務系統:下降系統複雜度,保證系統的實時性和可維護性。
- 按應用領域分類:信息家電類、汽車電子類、航空電子類、軍事電子類等。
##按軟件結構分三種系統的優缺點 | 系統分類 | 優勢 | 缺點 | | ---| ---------- | ------ | | 循環輪詢系統 |編程簡單,沒有中斷,不會出現隨機問題。|應用領域有限,不適合有大量輸入輸出的服務,軟件規模增大後不便於調試。| |先後臺系統|可併發處理不一樣的異步事件,設計簡單,無須學習操做系統的相關知識。|對於複雜系統,其主程序設計複雜,可靠性下降。實時性只能經過中斷來保證,一旦主程序介入處理事件,其實時性難以保證。中斷服務程序與主程序之間共享、互斥的問題須要自身解決。| |多任務系統|複雜的系統被分解成相對獨立的多個任務,下降了系統的複雜度。能夠保證系統的實時性。系統模塊化,可維護性高。|須要引入新的軟件設計方法。須要對每一個共享資源進行互斥。任務間存在競爭。嵌入式操做系統的使用將會增長系統開銷。|併發
##嵌入式系統的組成異步
- 嵌入式處理器:嵌入式系統的核心部件。
- 外圍設備:用於完成存儲、通訊、調試、顯示燈輔助功能。
- 嵌入式操做系統:軟件模塊的集合。
- 應用軟件: 完成用戶預期任務的計算機軟件。
嵌入式操做系統的概念:
嵌入式操做系統是用以完成任務調度、任務間通訊與同步、任務管理、時間管理、內存管理等的軟件模塊集合。嵌入式操做系統的引入大大提升了嵌入式系統的性能、方便了應用軟件的設計、但同時也佔用了嵌入式系統的資源。模塊化
嵌入式操做系統的分類:
- 按源代碼類型:可分爲商用型和開源型。
- 按實時性能:可分爲強實時型和普通實時型。
- 按內核結構:單內核型(串行)和微內核型(並列式)。
##嵌入式操做系統的優勢函數
- 提升了嵌入式系統的性能。
- 方便了應用軟件的設計。
- 可裁剪和可移植性強,支持開放性和可伸縮性的體系結構。
- 內核精簡,佔用空間小,內核比傳統的操做系統小不少。
- 高實時性,可用於各類設備控制中。
- 爲設備提供統一的驅動接口。
- 高可靠性,嵌入式操做系統可長期穩定運行。
##使用嵌入式操做系統的必要性:性能
- 首先,嵌入式實時操做系統提升了系統的可靠性。
- 其次,提升了開發效率,縮短了開發週期。
- 再次,嵌入式實時操做系統充分發揮了32位CPU的多任務潛力。
##A/D轉換:學習
**定義:A/D轉換是將模擬量轉換成數字量的器件。**模擬量能夠是電壓、電流等電信號,也能夠是聲、光、壓力和溫度等隨時間連續變化的非電物理量。spa
轉換方法:操作系統
- 電壓頻率式:精度高、價格低,但轉換速度不高。
- 積分式:抗干擾能力好,轉換速度低。
- 逐次逼近式:轉換速度較快。
- 並行轉換。
- 串行轉換。
##D/A轉換:
定義:D/A轉換器是實現數模轉換功能的部件。
衡量D/A轉換器性能的主要參數有:
- 分辨率:即輸出的模擬量的最小變化量。
- 滿刻度偏差:即輸入爲全1時輸出電壓與理想值之間的偏差。
- 輸出範圍。
- 轉換時間:指從轉換器的輸入改變到輸出穩點的時間間隔。
- 是否容易和CPU接口。
##ARM的概念
- ARM是Advanced RISC Machines公司的縮寫。各半導體公司根據ARM內核技術開發出ARM內核的嵌入式SOC系統的系列芯片。
- 從編程角度來看,ARM處理器的工做狀態通常有兩種:ARM狀態和Thumb狀態。處理器工做狀態的轉變不影響處理器的工做模式和相應寄存器中的內容。
- ARM狀態:處理器執行32位的字對齊的ARM指令。
- Thumb狀態:處理器執行16位的半字對齊的Thumb指令。
##ARM的運行模式
用戶模式、系統模式、管理模式、未定義模式、快速中斷模式、外部中斷模式、數據訪問停止模式。
##任務的定義
- 在嵌入式系統中,一個任務也稱做一個線程,即爲一個程序。線程分爲用戶級線程和內核級線程。
- 該程序在運行時能夠認爲CPU徹底屬於本身。
- 在實時應用程序的設計過程當中,要考慮如何將應用功能合理地劃分爲多個任務,讓每一個任務完成必定的功能,成爲整個應用的一部分。
- 每一個任務都被賦予必定的優先級,有一套CPU存儲器和棧空間。
- 任務越重要,賦予的優先級越高。就大多數內核而言,任務的優先級由用戶決定。
##任務的分類:
- 按照到達狀況的可預測性,任務可劃分爲週期任務和非週期任務。週期任務每隔一個固定的時間間隔就會執行一次,非週期任務執行的間隔時間不肯定。
- 按照重要程度, 可分爲關鍵任務和非關鍵任務。關鍵任務爲須要獲得及時執行的任務,不然將可能出現災難性的後果,非關鍵任務若是沒有及時執行,不會產生嚴重的後果,擁有關鍵任務的實時系統又被稱爲強實時系統,不然稱爲弱實時系統。
##任務的調度
- 是內核的主要職責之一,就是決定該輪到哪一個任務運行。任務調度器從當前就緒的全部任務中依照任務調度算法選擇一個最符合算法要求的任務,使其得到CPU的使用權,從就緒態進入運行態。一般,基於優先級調度法的內核有兩種:搶佔式內核和非搶佔式內核。
- 在多任務系統中,都會提供一個系統函數來進行進程(任務)間的切換。
- 由進程(任務)自己直接調用任務切換函數進行進程(任務)切換。
- 延遲調用任務切換函數進行進程(任務)切換。
##任務的5種狀態
- 休眠態(Dormant):任務駐留在內存的程序空間中,並未被多內核所調度。
- 就緒態(Ready):任務已經準備好,能夠運行,可是因爲該任務的優先級比正在運行的任務的優先級低,暫時還不能運行。
- 運行態(Running):任務得到了CPU的控制權,正在運行中。基於優先級調度的實時內核老是讓處於就緒態的優先級最高的任務運行。
- 掛起態(Pending):也叫等待事件態(waiting),是指任務在等待某一事件的發生(如等待某外設的IO操做、等待定時脈衝的到來、等待超時信號的到來)。正在運行的任務因爲調用了延時函數或等待某事件發生而將自身掛起,就轉變成了掛起態。
- 被中斷態(Intermpt):是指發生中斷時,CPU提供相應的中斷服務,原來正在運行的任務暫時不能運行,而進入了被中斷態。

##任務切換
- 概念:任務轉換是指CPU寄存器內容切換。
- 過程:
- 當多任務內核決定運行另外的任務時,它保存正在運行的任務的當前狀態,即當前CPU寄存器中的所有內容。
- 內核將這些內容保存在該任務的當前狀態保存區,也就是該任務本身的棧區中(這個過程稱爲「入棧」)。
- 把將要運行的任務的當前狀態從該任務的棧中裝入CPU寄存器(這個過程稱爲「出棧」),並開始這個任務的運行。
- 特色:任務切換過程增長了應用程序的額外負荷,CPU的內部寄存器越多,額外負荷就越重。任務切換所須要的時間取決於CPU有多少寄存器要入棧。
##單片機應用系統
單片機的應用系統由硬件和軟件所組成。
- 硬件指單片機、擴展的存儲器、擴展的輸入輸出設備。
- 軟件是各類工做程序的總稱。硬件和軟件只有緊密配合、協調一致,才能提升系統的性能。
- 單片機應用系統的研製過程包括整體設計、硬件設計與加工、軟件設計、聯機調試、產品定型等幾個階段,但它們不是絕對分開的,有時是交叉進行的。

##P17重點

##SPI
SPI其實是一種串行總線接口標準。SPI方式可容許同時同步傳送和接受8位數據,他的工做時傳輸速率最高可達到幾十兆位/秒。SPI用如下3個引腳來完成通訊:
- 串行數據輸出SDO(Serial Data Out)。
- 串行數據輸入SDI (Serial Data In)。
- 串行時鐘SCK (Serial Clock)。
 主機、從機之間SPI總線鏈接示意圖
 SPI通信的時序圖
##I2C
也是一種串行總線的外設接口,它採用同步方式串行接收或發送信息,兩個設備在同一個時鐘下工做。與SPI不一樣的是I2C只用兩根線:
- 串行數據SDA(Serial Data)。
- 串行時鐘SCL(Serial Clock)。<br/> 因爲I2C只有一根數據線,所以其發送信息和接收信息不能同時進行。信息的發送接收只能分時進行,I2C串行總線工做時傳輸速率最高位400K位/秒。
 
##計算題

##1、輪詢方式獲得鍵值(獨立鍵盤實驗)
實驗現象:下載程序後按下K1按鍵能夠對D1小燈狀態取反。 注意事項:無。 
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
sbit k1=P3^1; //定義P31口是k1
sbit led=P2^0; //定義P20口是led
// 函 數 名 : delay
// 函數功能 : 延時函數,i=1時,大約延時10ms
void delay(u16 i){
while(i--);
}
// 函 數 名 : keypros
// 函數功能 : 按鍵處理函數,判斷按鍵K1是否按下
void keypros(){
if(k1==0) { //檢測按鍵K1是否按下
delay(1000); //消除抖動 通常大約10ms
if(k1==0) { //再次判斷按鍵是否按下
led=~led; //led狀態取反
}
while(!k1); //檢測按鍵是否鬆開
}
}
void main(){
while(1){
keypros(); //按鍵處理函數
}
}
##2、中斷方法(一、2二選一) ###2. LED燈閃爍(T0)
定時器0實驗
實現現象:下載程序後D1小燈循環點亮1秒,熄滅1秒。使用單片機內部定時器能夠實現準確延時。 注意事項:無。
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
sbit led=P2^0; //定義P20口是led
//* 函 數 名 : Timer0Init
//* 函數功能 : 定時器0初始化
void Timer0Init(){
TMOD|=0X01;//選擇爲定時器0模式,工做方式1,僅用TR0打開啓動。
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
ET0=1;//打開定時器0中斷容許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
//* 函 數 名 : main
//* 函數功能 : 主函數
void main(){
Timer0Init(); //定時器0初始化
while(1);
}
//* 函 數 名 : void Timer0() interrupt 1
//* 函數功能 : 定時器0中斷函數
void Timer0() interrupt 1{
static u16 i;
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
i++;
if(i==1000){
i=0;
led=~led;
}
}