嵌入式系統的概念
- 第一種定義:嵌入式系統是以應用為中心、計算機技術為基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
- 第二種定義:把基於處理器(通用處理器和嵌入式處理器)的設備成為計算機,把計算機分為兩大部分,即通用計算機和嵌入式計算機。嵌入式系統也被成為嵌入式計算機,因此嵌入式系統被定義為非通用計算機系統。
- 嵌入式系統應定義為:嵌入到對象體系中的專用計算機系統,“嵌入式”、“專用性”與“計算機系統”是嵌入式系統的三個基本要素,對象系統則是指嵌入式系統所嵌入的宿主系統。
嵌入式系統的分類
- 按嵌入式微處理器的位數分類:8位、16位、32位和64位。
- 按實時性分類:嵌入式實時系統(硬實時系統和軟實時系統)、嵌入式非實時系統。
- 按嵌入式軟件結構分類:
- 循環輪詢系統。
- 前后台系統:中斷驅動機制。
- 多任務系統:降低系統復雜度,保證系統的實時性和可維護性。
- 按應用領域分類:信息家電類、汽車電子類、航空電子類、軍事電子類等。
按軟件結構分三種系統的優缺點
系統分類 | 優點 | 缺點 |
---|---|---|
循環輪詢系統 | 編程簡單,沒有中斷,不會出現隨機問題。 | 應用領域有限,不適合有大量輸入輸出的服務,軟件規模增大后不便於調試。 |
前后台系統 | 可並發處理不同的異步事件,設計簡單,無須學習操作系統的相關知識。 | 對於復雜系統,其主程序設計復雜,可靠性降低。實時性只能通過中斷來保證,一旦主程序介入處理事件,其實時性難以保證。中斷服務程序與主程序之間共享、互斥的問題需要自身解決。 |
多任務系統 | 復雜的系統被分解成相對獨立的多個任務,降低了系統的復雜度。可以保證系統的實時性。系統模塊化,可維護性高。 | 需要引入新的軟件設計方法。需要對每個共享資源進行互斥。任務間存在競爭。嵌入式操作系統的使用將會增加系統開銷。 |
嵌入式系統的組成
- 嵌入式處理器:嵌入式系統的核心部件。
- 外圍設備:用於完成存儲、通信、調試、顯示燈輔助功能。
- 嵌入式操作系統:軟件模塊的集合。
- 應用軟件: 完成用戶預期任務的計算機軟件。
嵌入式操作系統的概念:
嵌入式操作系統是用以完成任務調度、任務間通信與同步、任務管理、時間管理、內存管理等的軟件模塊集合。嵌入式操作系統的引入大大提高了嵌入式系統的性能、方便了應用軟件的設計、但同時也占用了嵌入式系統的資源。
嵌入式操作系統的分類:
- 按源代碼類型:可分為商用型和開源型。
- 按實時性能:可分為強實時型和普通實時型。
- 按內核結構:單內核型(串行)和微內核型(並列式)。
嵌入式操作系統的優點
- 提高了嵌入式系統的性能。
- 方便了應用軟件的設計。
- 可裁剪和可移植性強,支持開放性和可伸縮性的體系結構。
- 內核精簡,占用空間小,內核比傳統的操作系統小很多。
- 高實時性,可用於各種設備控制中。
- 為設備提供統一的驅動接口。
- 高可靠性,嵌入式操作系統可長期穩定運行。
使用嵌入式操作系統的必要性:
- 首先,嵌入式實時操作系統提高了系統的可靠性。
- 其次,提高了開發效率,縮短了開發周期。
- 再次,嵌入式實時操作系統充分發揮了32位CPU的多任務潛力。
A/D轉換:
定義:A/D轉換是將模擬量轉換成數字量的器件。模擬量可以是電壓、電流等電信號,也可以是聲、光、壓力和溫度等隨時間連續變化的非電物理量。
轉換方法:
- 電壓頻率式:精度高、價格低,但轉換速度不高。
- 積分式:抗干擾能力好,轉換速度低。
- 逐次逼近式:轉換速度較快。
- 並行轉換。
- 串行轉換。
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)。
由於I2C只有一根數據線,因此其發送信息和接收信息不能同時進行。信息的發送接收只能分時進行,I2C串行總線工作時傳輸速率最高位400K位/秒。


計算題

一、輪詢方式得到鍵值(獨立鍵盤實驗)
實驗現象:下載程序后按下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(); //按鍵處理函數
}
}
二、中斷方法(1、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;
}
}