第一篇:嵌入式系統相關知識點總結
嵌入式系統的定義及特點
定義:嵌入式系統是以應用為中心、以計算機技術為基礎,軟、硬件可裁剪,適應于應用系統對功能、可靠性、成本、體積、功耗等方面有特殊要求的專用計算機系統。
特點:(1)嵌入式系統是面向特定應用的。嵌入式系統中的CPU是專門為特定應用設計的,具有低功耗、體積小、集成度高等特點,能夠把通用CPU中許多由板卡完成的任務集成在芯片內部,從而有利于整個系統設計趨于小型化。
(2)嵌入式系統涉及先進的計算機技術、半導體技術、電子技術、通信和軟件等各個行業。是一個技術密集、資金密集、高度分散、不斷創新的知識集成系統。
(3)嵌入式系統的硬件和軟件都必須具備高度可定制性。
(4)嵌入式系統的生命周期相當長。嵌入式系統和具體應用有機地結合在一起,其升級換代也是和具體產品同步進行的。
(5)嵌入式系統本身并不具備在其上進行進一步開發的能力。在設計完成以后,用戶如果需要修改其中的程序功能,必須借助于一套專門的開發工具和環境。
(6)為了提高執行速度和系統可靠性,嵌入式系統中的軟件一般都固化在存儲器芯片或單片機中,而不是存貯于磁盤等載體中。
特點也可答:1.系統內核小。2.專用性強。3.系統精簡。4.高實時性的系統軟件(OS)是嵌入式軟件的基本要求。5.嵌入式軟件開發要想走向標準化,就必須使用多任務的操作系統。6.嵌入式系統開發需要開發工具和環境。7.嵌入式系統與具體應用有機結合在一起,升級換代也是同步進行,所以具有較長的生命周期。8.為了提高運行速度和系統可靠性,嵌入式系統中的軟件一般都固化在存儲器芯片中。
操作系統在嵌入式系統中所起的作用(四個)
嵌入式操作系統(嵌入式linux學習)的功能
嵌入式操作系統除具備了一般操作系統(嵌入式linux系統)最基本的功能,如任務調度、同步機制、中斷處理、文件處理等外,還有以下兩個方面的功能:
1.構成一個易于編程的虛擬機平臺
嵌入式操作系統構成一個虛擬機平臺,EOS把底層的硬件細節封裝起來,為運行在它上面的軟件(如中間件軟件和各種應用軟件)提供了一個抽象的編程接口。軟件開發在這個編程接口的上進行,而不直接與機器硬件層打交道。
2.系統資源的管理者
嵌入式操作系統是一個系統資源的管理者,負責管理系統當中的各種軟硬件資源,如處理器、內存、各種I/O設備、文件和數據等,使得整個系統能夠高效、可靠地運轉。
嵌入式操作系統負責嵌入式系統的全部軟、硬件資源的分配、調度、控制、協調并發活動。它必須體現其所在系統的特征,能夠通過裝卸某些模塊來達到系統所要求的功能。
嵌入式操作系統是嵌入式系統應用的核心.嵌入式操作系統,大大地提高了嵌入式系統硬件工作效率,并為應用軟件開發提供了極大的便利。
操作系統的作用主要體現在兩方面:
1.屏蔽硬件物理特性和操作細節,為用戶使用計算機提供了便利 2.有效管理系統資源,提高系統資源使用效率
Linux與嵌入式使用的uclinux操作系統的關系
Linux與UNIX系統兼容,開放源代碼。現在廣泛應用于服務器領域。而更大的影響在于它正逐漸的應用于嵌入式設備。uClinux正是在這種氛圍下產生的。所以uClinux就是Micro-Control-Linux,字面上的理解就是“針對微控制領域而設計的Linux系統”。
uClinux是針對控制領域的嵌入式linux操作系統,它從Linux 2.0/2.4內核派生而來,沿襲了主流Linux的絕大部分特性。uClinux同標準Linux的最大區別就在于內存管理。標準Linux是針對有MMU的處理器設計的。在這種處理器上,虛擬地址被送到MMU,MMU把虛擬地址映射為物理地址。通過賦予每個任務不同的虛擬—物理地址轉換映射,支持不同任務之間的保護。對于uCLinux來說,其設計針對沒有MMU的處理器,不能使用處理器的虛擬內存管理技術,仍然采用存儲器的分頁管理。
什么是內核?
內核是操作系統最基本的部分。它是為眾多應用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并且內核決定一個程序在什么時候對某部分硬件操作多長時間。內核,是一個操作系統的核心。是基于硬件的第一層軟件擴充,提供操作系統的最基本的功能,是操作系統工作的基礎,它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。
什么是Bootlonder? 答案一搜狗百科:啟動程序(英語:boot loader,也稱啟動加載器,引導程序)位于電腦或其他計算機應用上,是指引導操作系統啟動的程序。引導程序啟動方式及程序視應用機型種類而不同。BIOS開機完成后,bootloader就接手初始化硬件設備、創建存儲器空間的映射,以便為操作系統內核準備好正確的軟硬件環境。BootLoader是依賴于硬件而實現的,特別是在嵌入式領域,為嵌入式系統建立一個通用的BootLoader是很困難的。
答案二百度百科:Boot Loader 是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。通常,Boot Loader 是嚴重地依賴于硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的 Boot Loader 幾乎是不可能的。盡管如此,我們仍然可以對 Boot Loader 歸納出一些通用的概念來,以指導用戶特定的 Boot Loader 設計與實現。
使用帶uclinux操作系統的嵌入式系統應該注意什么問題?
uClinux的內存管理
uClinux同標準Linux的最大區別就在于內存管理。對于uCLinux來說,其設計針對沒有MMU的處理器,不能使用處理器的虛擬內存管理技術,仍采用存儲器的分頁管理,系統在啟動時把實際存儲器進行分頁。在加載應用程序時程序分頁加載。這一點影響了系統工作的很多方面。
uClinux系統對于內存的訪問是直接的,所有程序中訪問的地址都是實際的物理地址。操作系統對內存空間沒有保護,各個進程實際上共享一個運行空間。由于應用程序加載時必須分配連續的地址空間,而針對不同硬件平臺的可一次成塊,分配內存大小限制是不同,所以開發人員在開發應用程序時必須考慮內存的分配情況并關注應用程序需要運行空間的大小。另外由于采用實存儲器管理策略,用戶程序同內核以及其它用戶程序在一個地址空間,程序開發時要保證不侵犯其它程序的地址空間,以使得程序不至于破壞系統的正常工作,或導致其它程序的運行異常。
從內存的訪問角度來看,開發人員的權利增大了(開發人員在編程時可以訪問任意的地址空間),但與此同時系統的安全性也大為下降。uClinux的多進程處理
uClinux沒有MMU管理存儲器,在實現多個進程時(fork調用生成子進程)需要實現數據保護。uClinux的這種多進程實現機制同它的內存管理緊密相關。uClinux針對沒有mmu處理器開發,所以被迫使用一種flat方式的內存管理模式,啟動新的應用程序時系統必須為應用程序分配存儲空間,并立即把應用程序加載到內存。缺少了MMU的內存重映射機制,uClinux必須在可執行文件加載階段對可執行文件reloc處理,使得程序執行時能夠直接使用物理內存。
編程實現五個點的中值濾波和均值濾波
clear all;t=0:0.01:1;f2=5;%生成一個正弦信號y; y1=1*sin(2*pi*f2*t);%y1=square(2*pi*f2*t);%向y中加入噪聲信號生成x;x1=y1+0.1*randn(1,101);figure(1)subplot(2,1,1);plot(t,y1,'r');title('生成一個正弦信號y');grid;legend y;subplot(2,1,2);plot(t, x1,'r');title('向y中加入噪聲信號生成x');grid;legend x;X=1:length(x1)for X=1:length(x1)z2=smooth(x1,5);%M=5時的均值濾波 end for X=1:length(x1)figure(2)plot(t,z1,'r');title('M=5時的均值濾波處理后的信號');grid;legend y;for X=1:length(x1)L2= median(x1,5);end figure(3)plot(t,L2,'r');title('M=5時的中值濾波處理后的信號');grid;legend y;
第二篇:嵌入式 知識點總結
1、嵌入式系統的特點:
(1).嵌入式系統的個性化很強,軟件系統和硬件在不同的應用中均有差異;(2).由通用計算機系統發展而來,根據應用對軟硬件進行裁剪;(3).高的可靠性,強的實用性;
(4).高的耗電量直接影響系統的成本及電源壽命;
2、什么是嵌入式系統?
嵌入式系統是以應用為中心,以計算機技術為基礎,采用可剪裁硬件,適用于對功能,可靠性,成本,體積,功耗等有嚴格要求的專用計算機系統。
3、采用RISC架構的ARM微處理器一般具有如下特點:(1).體積小、功耗低、成本低、性能高;
(2).支持Thumb(16位)/ARM(3位)雙指令集,能很好地兼容8位/16位器件;(3).大量使用寄存器,指令執行速度快;(4).大多數數據操作都在寄存器中完成;(5).尋址方式靈活簡單,執行效率高;(6).采用固定長度的指令格式;
4、嵌入式系統開發流程:
選擇嵌入式處理器(硬件平臺)---選擇嵌入式操作系統(軟件平臺)-----開發嵌入式應用軟件-----測試通過---(是)---系統測試-----開發結束
5、嵌入式系統軟件設計流程:
代碼編程(C/匯編源程序)-----交叉編譯(OBJ文件)-----交叉函數庫----交叉鏈接(系統映像文件)---(重定向與下載)---目標板----調試;
6、ARM9E處理器有獨立的指令緩存(ICACHE)和數據緩存(DCACHE);
7、ARM9系列處理器共有37個寄存器,其中31個屬于通用寄存器,6個為ARM處理器;
8、ARM總共有7種不同的處理器模式,分別是:用戶模式,快速中斷模式,外部中斷模式,管理模式,數據訪問中止模式,未定義指令中止模式,系統模式
9、R13一般作為棧指針SP;R14被稱為連接寄存器LR,作用:一是在通過BL或者BLX指令調用子程序時存放當前子程序的返回地址;二是在發生異常時用來保存該模式基于PC的返回地址;R15是程序計數器PC,用來保存處理器取值的地址;
10、流水線技術的工作原理:
ARM7采用的是3級流水線:FETCH/DECODE/EXECUTE.此時在EXECUTE階段要完成大量的工作,包括寄存器和存儲器的讀寫操作、移位操作、ALU操作等,這導致在執行階段往往需要多個時鐘周期,從而成為系統性能的瓶頸。
ARM9采用5級流水線技術,分別是FETCH/DECODE/EXECUTE/MEMORY/WRITE.FETCH階段和之前功能相同,即從指令存儲器中取值;DECODE階段除了譯碼之外,還讀取寄存器操作數;EXECUTE階段執行運算,產生ALU運算結果或產生存儲器地址;MEMORY階段進行存儲器的讀寫操作;WRITE階段將結果寫回寄存器;
11、ARM9使用一個統一的TLB來緩存頁表信息,TLB主頁分為兩個部分:主TLB和鎖定TLB;
12、ARM總共有7種處理器異常:復位異常、未定義指令異常、軟件中斷異常、指令預取終止異常、數據訪問終止異常、外部訪問終止異常、快速中斷請求異常
13、(1).復位異常和軟件中斷異常時,處理器進入管理模式;(2).未定義指令異常時,處理器進入未定義模式;
(3).指令預取終止異常和數據訪問終止異常時,處理器進入中止模式;(4).外部中斷請求時,處理器進入外部中斷模式;(5).快速中斷請求時,處理器進入快速中斷模式; 14.ARM運行狀態:ARM狀態和Thumb狀態;ARM指令必須在ARM狀態下執行,同樣,Thumb指令也必須處于Thumb狀態下執行。
15.ARM狀態和Thumb狀態切換可以通過BX指令來實現。
16.ARM指令集有5種形式的位移操作:LSL:邏輯左移;LSR:邏輯右移;ASR:算術右移;ROR:循環右移;RRX:帶擴展的循環右移;
17.立即數并不是任意數都是合法的,在立即數尋址中,分配給立即數的空間是12位,8位用于保存一個常數,4位用于保存循環右移基數,而循環右移每次需要移動偶數位,即右移的位數是基數*2;假設常數為A,循環右移位數為N,則最后得到的立即數=A循環右移(N*2位);
18.ARM指令的尋址方式及特點:(1)立即尋址;
(2).寄存器偏移尋址;(3).寄存器偏移尋址;(4).寄存器間接尋址;(5).基址變址尋址;(6).多寄存器尋址;
(7).堆棧尋址:滿遞增堆棧、空遞增堆棧、滿遞減堆棧、空遞減堆棧; 19.LDR和STR LDR指令:從內存讀取數據裝入寄存器; STR指令:將寄存器中的數據存入內存;
20.CDP:是協處理器數據處理指令:用來執行特定的數據操作; MCR:將ARM寄存器中的數據傳輸到協處理器寄存器中;
MRC:數據傳輸方向與MCR指令相反,它將協處理器寄存器中的數據傳送到ARM處理器寄存器中;
21.ADR:小范圍的地址讀取偽指令,主要用來讀取基于PC相對偏移的地址或基于寄存器相對偏移的地址;
LDR:大范圍偽地址讀取偽指令,用于加載32位的立即數或是一個地址值; 22.Thumb跳轉指令:
B:是Thumb指令中唯一可以條件執行的指令; BL:帶鏈接的長跳轉;
BX:指令在跳轉的同時,會選擇性的切換指令集; BLX:帶鏈接的跳轉,并選擇性的切換指令集;
23.MMU:其作用主要有2個方面:一是地址映射,負責將虛擬地址映射成物理地址;二是對地址訪問的保護和限制;提供硬件機制的內存訪問授權,大多數使用虛擬存儲器的系統都使用一種稱為分頁機制,虛擬地址空間劃分成大小相同的一組頁,每個頁有一個用來標記它的頁號,而相應的物理地址空間也被進行劃分,單位幀、頁和頁幀的大小必須相同,虛擬地址被送往MMU,MMU將虛擬地址轉化為物理地址。
24.進程調度策略可分為:“搶占式調度”和”非搶占式調度”;
25.在用戶空間中,進程是由進程標識符(PID)表示的,一個PID在進程的整個生命期間不會更改,但PID可以在進程進行銷毀后重新使用;對用戶來說,PID是唯一標識一個進程的數字值;
26.Linux進程還可以通過exec系統調用產生; 27.Linux操作系統有三種進程調度策略:(1).分時調度策略;(2).先到先服務的實時調度策略;(3).時間片輪的實時調度策略; 28.嵌入式文件系統分類:(1).基于Flash的文件系統:
JFFS2文件系統;YAFFS文件系統;Cramfs;Romfs;其他文件系統;
(2).基于RAM的文件系統: RamDisk;Ramfs/Tmpfs(3).網絡文件系統NFS 29.Boot Loader 階段一:1.基本的硬件初始化:a.屏蔽所有中斷;b.設置CPU的速度和時鐘頻率;c.RAM初始化;d.初始化LED;30.ARM-Linux內存管理原理:從兩方面入手:一是Linux內核對內存的管理(包括最重要的地址映射、內存空間的分配以及地址訪問的限制,即保護機制);二是體系對內存管理方面的特殊性;
31.Linux虛擬內存的實現需要6種機制的支持:地址映射機制、請求頁機制、內存分配回收機制、緩存和刷新機制、交換機制和內存共享機制; 32.Linux虛擬內存實現機制間的相互關系:
地址映射機制----請求頁機制----內存分配和回收機制---交換機制----緩存和刷新機制
33.進程,又稱作任務,是一個動態的執行過程,是處于執行期的程序,進程是系統資源分配的最小單位。
34.在Linux系統中,所有的進程都是fork出來的,它們有個共同的祖先:0號進程;
35.init是內核啟動的第一個用戶級進程,也是系統的第一個真正的進程,是其他所有進程的父進程,所以init內核線程(或進程)的標識符為1,init有很多重要的任務,負責完成系統的一些初始化設置任務,以及執行系統初始化程序,init程序使用/etc/inittab作為腳本文件來創建系統中的新進程;
36.進程的銷毀通過以下三個事件驅動:正常的進程結束、信號、exit函數的調用;
37.進程調度時機可分為:主動調度和被動調度;按細分的話:(1)進程狀態轉換;(2)當前進程的時間片用完;(3)設備驅動程序;(4)進程從中斷、異常以及系統調用返回到用戶態; 38.選擇進程的依據:policy、priority、counter、rt_priority; 39.內核模塊全稱為動態可加載內核模塊,是Linux內核向外部提供的一個插口,簡稱為模塊; 40.加載模塊有兩種方法:第一種是通過insmod命令手工將module載入內核;第二種是根據需要載入module;kerneld的主要功能是module載入內核和將它卸載出內核; 41.中斷是一個流程,一般經過三個環節:中斷相應、中斷處理、中斷返回;
42.ARM-Linux的系統調用原理:系統調用的過程和中斷有類似之處,當CPU遇到自陷指令后,跳轉到內核態,操作系統首先保存當前運行的信息,然后根據系統調用號來查找相應的函數去執行,執行完了以后恢復原先保存的運行信息返回,比如通常應用程序所用的fork()函數,它是經過包裝的函數,其最終的實現是系統調用;
43.在UNIX系統下有兩種方式實現系統調用:通過經過封裝的C庫或者直接調用;
44.系統調用的過程和中斷有類似之處,當CPU遇到自陷指令后,跳轉到內核態,操作系統首先保存當前運行的信息,然后根據系統調用號查找相應的函數去執行,執行完了以后恢復原先保存的運行信息返回;通過不同的向量索引可以使CPU立即轉入不同的處理程序; 45.init進程是系統所有進程的起點,內核在完成核內參數init=XXX來設置init進程,init進程需要讀取/etc/inittab文件作為其行為指針,inittab是以行為為單位的描述性(非執行性)文本; 46.存儲文件系統的設備稱為block設備(塊設備);
47.設備驅動的接口API都是從文件管理器API中繼承下來的,所以這些設備API都有open().close().read().write().lseek()和ioctl()等與文件API類似的接口;
48.Linux也使用文件管理器,但是它的文件管理器使用了VFS(虛擬文件系統),正是VFS讓Linux能夠支持目前多種文件系統。VFS具備訪問各種各樣的文件系統的能力,也是因為VFS在內部去適應各種不同文件系統的差異,而提供給用戶進程的是統一的文件API。49.JFFS2嵌入式文件系統原理:
首先JFFS2是一個日志結構文件系統,包含數據和元數據的節點在閃存上順序存儲。JFFS2定義了三種節點類型:JFFS2_NODETYPE_INODE, JFFS2_NODETYPE_DIRENT,JFFS2_NODETYPE_CLEANMARKER。JFFS2中I節點的信息并沒有全部存放在內存,mount操作時,會為節點建立映射表,但是這個映射表并不全部存放在內存中,存放在內存中的節點信息是一個縮小尺寸的結構體。JFFS2使用了多個級別的待回收塊隊列。JFFS2寫平衡策略是在垃圾收集中實現的,垃圾收集的時候會讀取系統時間,使用這個系統時間產生一個偽隨機數。利用這個偽隨機數結合不同的待回收鏈表選擇要進行回收的鏈表。50.JFFS2克服了JFFS中以下缺點:
(1).使用了基于哈希表的日志節點結構,大大加快了對節點的操作速度;(2).支持數據壓縮;
(3).提供了”寫平衡”支持;
(4).支持多種節點類型(數據I節點,目錄I節點等);(5).提高了對閃存的利用率,降低了內存的消耗;
51.系統調用是操作系統內核和應用程序之間的接口,而設備驅動程序則是操作系統內核和機器硬件之間的接口;
52.Linux支持三類硬件設備:字符設備、塊設備、網絡設備; 53.Linux內核設備模型的目的和功能:
目的:設備模型提供獨立的機制表示設備,并表示其在系統中的拓撲結構,這樣使系統具有以下優點:代碼重復最小;提供如引用計數這樣的統一機制;列舉系統中所有設備,觀察其狀態,查看其連接總線;用樹的形式將全部設備結構完整、有效地展現,包括所有總線和內部連接;將設備和對應驅動聯系起來,將設備按照類型分類;從樹的葉子向根的方向依次遍歷,確保以正確順序關閉各個設備的電源;初衷是為了節能,有助于電源管理,通過建立表示系統設備拓撲關系的樹結構,能夠在內核中實現智能的電源管理;
功能:將系統中的設備組織成層次結構,然后向用戶程序提供內核數據結構信息; 54.同步機制的分類及特點:
(1).同步鎖:適用于保持時間段的情況,可以在任何上下文使用,不可以睡眠,任何時候,只能有一個持有者;
(2).信號量:不能用在內核之外,是一種睡眠鎖,適用于鎖會被長期持有的情況,允許多個持有者;
(3).原子操作:在執行完畢前絕不會被任何其他任何或時間打斷,是最小的執行單位,主要用在資源計數上;
(4).完成事件:適用于需要睡眠和喚醒的情景,不會引起資源競爭;
55.表示字符設備的設備文件可以通過”ls-l”命令輸出的第一列中的“c”來識別,而塊設備則用“b”標識;
56.dev t是一個32位的無符號數,其高12位用來表示主設備號,低20位用來表示次設備號;
Register_chrdev_region()函數和alloc_chrdev_region()函數用于分配設備號,這兩個函數最終都會調用_register_chrdev_region()函數來注冊一組設備的編號范圍,它們的區別是后者是以動態的方式分配的,unregister_chrdev_region()函數則用于釋放設備號。Alloc_chrdev_region()函數用于動態申請設備號范圍,通過指針參數返回實際分配的起始設備號;
Dev_ti_rdev:對于設備文件而言,此成員包含實際的設備號; Struct cdev *i_cdev:字符設備在內核中是用cdev結構來表示的,此成員是指想cdev結構的指針;
57.I/O接口是微控制器必須具備的最基本外設功能。通常在ARM里,所有I/O都是通用的,稱為GPIO(通用輸入輸出);GPIO接口一般至少會有兩個寄存器,即控制寄存器和數據寄存器;
58.同步外設接口是由摩托羅拉公司推出的一種高速的、全雙工、同步的串行總線; 59.SPI的工作模式有兩種:主模式和從模式;
60.字符設備以字節為單位進行讀寫,而塊設備則以塊為單位,塊設備的I/O請求都有對應的緩沖區并使用了請求隊列對請求進行管理,塊設備還支持隨機訪問,而字符設備只能順序訪問。Linux中每一個塊設備里請求都有一個I/O請求隊列,每個請求隊列都有調度器的插口。
61.Bio是底層對部分塊設備的I/O請求描述,其包含了驅動程序執行請求所需的全部信息,通常一個I/O請求對應一個bio。I/O調度器可將聯系的bio合并成一個請求。
62.MMC/SD卡驅動結構:a.文件結構;b.塊設備驅動;c.MMC/SD核心;d.MMC/SD接口;
第三篇:嵌入式系統設計的最后知識點總結
系統概念
1、嵌入式系統的定義?
以應用為中心、以計算機技術為基礎、軟硬件可裁剪、適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。“嵌入”、“專用”、“計算機”
2、嵌入式系統的軟、硬件組成?以及主要特點?
軟件:從底層到上層:bootloader等系統初始化引導程序、設備驅動層(包括驅動程序、板級支持包BSP等)、操作系統、用戶應用程序。(底層為上層提供服務)開發軟件:即集成開發環境(asemmbler&&compiler&&linker&&debugger&&loader)硬件組成:核心板+外圍板+外設(核心板:微控制器(CPU和外設接口、外設控制器)、電源、時鐘、復位、SDRAM、flash。外圍板面向外圍設備,一般是引腳的集合、電平轉換電路。外圍設備。),當然也可以將核心板和外圍板放在一起。
硬件特點:通常由嵌入式處理器和嵌入式外圍設備組成,高度集成,常采用SOC設計方法,對功耗、體積等有嚴格要求,定制性決定了它的可裁剪性,沒有像計算機領域的壟斷,解決方案不唯一。
軟件特點:采用交叉開發方式,系統軟件層次分明,操作系統為用戶程序提供標準API,提供圖形接口和文件系統。用戶調用系統服務,系統調用設備驅動從而操縱硬件。
3、嵌入式系統產品設計的基本流程?
需求分析
功能性需求是系統的基本功能,如輸入輸出信號、操作方式等;
非功能性需求包括系統性能、成本、功耗、體積、重量等因素。規格說明
精確地反映客戶的需求并且作為設計時必須明確遵循的要求。體系結構設計
描述系統如何實現所述的功能和非功能需求,包括對硬件、軟件和執行裝置的功能劃分以及系統的軟件、硬件選型等。
軟硬件設計
基于體系結構,對系統的軟件、硬件進行詳細設計。系統集成
把系統的軟件、硬件和執行裝置集成在一起,進行調試,發現并改進單元設計過程中的錯誤。系統測試
對設計好的系統進行測試,看其是否滿足規格說明書中給定的功能要求。
4、處理器及操作系統的選型主要考慮哪些方面?
① 操作系統本身所提供的開發工具。② 操作系統向硬件接口移植難度。
③ 操作系統的內存要求。④ 開發人員是否熟悉此操作系統及其提供的系統API。⑤ 操作系統是否提供硬件的驅動程序,如網卡驅動程序等。⑥ 操作系統的是否具有可剪裁性。⑦ 操作系統是否具有實時性能。
5、交叉開發、交叉開發環境?為何需要交叉開發環境? 在一臺通用計算機(宿主機)上進行軟件的編輯編譯,然后下載到嵌入式設備(目標機)中運行調試的開發方式
交叉開發環境一般由運行于宿主機上的交叉開發軟件(assembler&&compiler&&linker&&debugger&&loader)、宿主機到目標機的調試通道組成 需要交叉開發環境是因為目標機一般對體積、功耗等有嚴格限制,資源也面向應用,較為緊張,要求僅僅能流暢運行代碼即可,而將用戶開發軟件(包括各種庫、工具)放置在主機上,而且現在的集成開發環境提供了各種修改好的功能庫,用起來也方便。
6、嵌入式集成開發環境的主要功能?
這是由其組成決定的。Assembler將.c源代碼匯編,compiler形成目標文件,linker根據鏈接描述文件將各個目標代碼鏈接定位生成可執行代碼。Debugger有些交叉開發工具提供了仿真調試通道。Loader可以將目標文件燒錄進設備中(有時需要內部引導代碼的配合)
7、嵌入式Linux 開發主要流程?
搭建開發環境--燒寫bootloader--燒寫內核--燒寫根文件系統--燒寫應用程序。
開發環境:REDHAT-LINUX、下載相應的GCC 交叉編譯器進行安裝、配置開發主機(配置MINICOM和配置網絡,MINICOM 軟件的作用是作為調試嵌入式開發板信息輸出的監視器和鍵盤輸入的工具,配置網絡主要是配置IP地址、NFS 網絡文件系統,需要關閉防火墻)
燒寫bootloader 下載一些公開源代碼的BOOTLOADER根據自己具體芯片進行移植修改。下載時,有些芯片沒有內置引導裝載程序,比如三星的ARM7、ARM9 系列芯片,這樣就需要編寫燒寫開發板上flash 的燒寫程序。
或者網絡上有免費下載的WINDOWS 下通過JTAG 并口簡易仿真器燒寫ARM 外圍flash 芯片的程序。也有LINUX 下公開源代碼的J-FLASH 程序。
下載內核
如果有專門針對你所使用的CPU 移植好的LINUX 操作系統那是再好不過,下載后再添加自己的特定硬件的驅動程序,進行調試修改。下載根文件系統
從www.tmdps.cnplete...*/
OSIntExitY
= OSUnMapTbl[OSRdyGrp];
/*...and not locked.*/
OSPrioHighRdy
=
(INT8U)((OSIntExitY
<<
3)
+ OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
if(OSPrioHighRdy!= OSPrioCur){
/* No Ctx Sw if current task is highest rdy
*/
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];//找就緒態的最高優先級,并找到相應TCB。
OSCtxIntCtr++;
/* Keep track of the number of context switches */
OSIntCtxSw();
//調用中斷級的任務調度函數
/* Perform interrupt level context switch
*/
}
}
OS_EXIT_CRITICAL();}
中斷級任務切換函數
執行出棧指令之后還用中斷返回指令?沒有包含關系?模式(代碼分析)?
OSIntCtxSw;post FIQ Context switcher.This is called from OSIntExit when a hooked ISR;wants to return in the context of another task.We load the new tasks context;(from OSPrioHighRdy)and do the return from interrupt.;;Get pointer to stack where ISR_FiqHandler saved interrupted context
;ISR entry only saves
找到異常模式堆棧,它只保存了.first seven regs and LR
#16?
add
r7, sp, #16
;save pointer to register file(point to r0)LDR
sp, =IRQStack;FIQ_STACK;test to del it意義?
;Change ARM CPU to SVC mode for stack operations.將CPU切換至管理模式,以操作不同模式的堆棧。
;This gets the CPU off the interrupt stack and back to the
;interrupted task's stack, which is the one we want to alter.;mrs
r1, SPSR
;get suspended PSR orr
r1, r1, #0xC0
;disable IRQ, FIQ.msr
CPSR_cxsf, r1
;switch mode(shold be SVC_MODE)
;PSR, SP, LR regs are now restored to the interrupted SVC_MODE.;now set up the task's stack frame as OS_TASK_SW does...將進入IRQ異常的時候保存的上下文,從IRQ棧中賦值到SVC棧中
ldr
r0, [r7, #52]
;get IRQ's LR(tasks PC)from IRQ stack
sub
r0, r0, #4
;Actual PC address is(saved_LR-4)STMFD
sp!, {r0}
;save task PC放入管理模式棧中 STMFD
sp!, {lr}
;save LR
mov
lr, r7
;save FIQ stack ptr in LR(going to nuke r7)
ldmfd
lr!, {r0-r12}
;get saved registers from FIQ stack STMFD
sp!, {r0-r12}
;save registers on task stack
;save PSR and PSR for task on task's stack MRS
r4, CPSR
;OSPrioCur = OSPrioHighRdy
// change the current process LDR
r4, addr_OSPrioCur LDR
r5, addr_OSPrioHighRdy bic
r4, r4, #0xC0;leave interrupt bits in enabled mode STMFD
sp!, {r4} MRS
r4, SPSR STMFD
sp!, {r4}
;save task's current PSR;SPSR too
LDRB
r6, [r5] STRB
r6, [r4]
;Get preempted tasks's TCB LDR
r4, addr_OSTCBCur LDR
r5, [r4]
;store sp in preempted tasks's TCB STR
sp, [r5]
;Get new task TCB address LDR LDR LDR
r6, addr_OSTCBHighRdy
r6, [r6]
sp, [r6]
;get new task's stack pointer;OSTCBCur = OSTCBHighRdy STR r6, [r4]
;set new current task TCB address
LDMFD sp!, {r4} MSR
SPSR, r4 LDMFD sp!, {r4} BIC
r4,r4,#0xC0;we must exit to new task with ints enabled MSR
CPSR, r4
LDMFD
sp!, {r0-r12, lr, pc}
時鐘節拍中斷服務子程序
Void OSTickISR(void){
保存處理器寄存器的值;
調用OSIntEnter(),或是將OSIntNesting加1
if(OSIntNesting==1){
OSTCBCur->OSTCBStkPtr=SP;
}
調用OSTimeTick();
功能根據鏈表遍歷每個TCB,將非零的延時值--,有減到零,若非suspend狀態,則置就緒位。
清發出中斷設備的中斷;
重新允許中斷(可選用)
調用OSIntExit();
恢復處理器寄存器的值;
執行中斷返回指令;
} 中斷節拍函數 void OSTimeTick(void){
OS_TCB *ptcb;
OSTimeTickHook();
/*OS_CFG中#define OS_CPU_HOOKS_EN
1*/
ptcb = OSTCBList;
(2)
while(ptcb->OSTCBPrio!= OS_IDLE_PRIO){
(3)
OS_ENTER_CRITICAL();
if(ptcb->OSTCBDly!= 0){
if(--ptcb->OSTCBDly == 0){
if(!(ptcb->OSTCBStat & OS_STAT_SUSPEND)){
(4)/ SUSPEND,則不能就緒,OSRdyGrp
|= ptcb->OSTCBBitY;
(5)
否則就緒到
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
} else {
ptcb->OSTCBDly = 1;
}
}
}
ptcb = ptcb->OSTCBNext;
OS_EXIT_CRITICAL();
}
OS_ENTER_CRITICAL();
(6)
OSTime++;
(7)累加從開機以來的時間,用的是一個無符號32位變量
OS_EXIT_CRITICAL();}
任務控制塊初始化函數OS_TCBInit()在創建任務時調用,它獲得TCB控制塊并對其進行初始化,并讓對應任務就緒,完成任務創建的大部分任務。
Delay()和節拍中斷的對應關系
Delay函數是自行掛起,等待延時時間到的函數,它的功能就設置TCB中的延時值,清除自己的就緒位。而在每個節拍中斷處理函數中,會將延時值--。減到零時重新就緒。并在中斷退出時進行任務切換,有可能再次得到CPU的運行權。
若
是
第四篇:哈工大ARM嵌入式系統考試知識點總結
接VIC部分
一旦產生IRQ中斷,微控制器切換到IRQ模式,并跳轉到向量表0x0018地址執行指令。一旦產生FIQ中斷,微控制器切換到FIQ模式,并跳轉到向量表0x001C地址執行指令,然后跳轉到FIQ_Handler代碼段。
第五篇:嵌入式系統復習總結
嵌入式系統復習總結
一、嵌入式系統的概述
1.嵌入式系統的定義:嵌入到對象中的專業計算機 2.三大特點:嵌入型、專業性、計算機系統 3.組成:軟件、硬件
4.結構層次:應用程序、嵌入式系統實時操作系統,硬件抽象層、嵌入式系統硬件工作平臺
5.分類:MCU、EMPU、DSP、CPLDFPGA、SoC
二、51單片機
1.單片機的特點:體積小、控制功能強、可靠性高、易擴展易產品化、性能價格比高、需要開發裝置
2.51單片機的組成:CPU、64KB數據存儲器、4KB程序存儲器、兩個16位定時計數器、5個中斷源、P0~P3 4個并行IO口、4個串行
3存儲其結構特點:內、外數據存儲器,內、外程序存儲器 程序存儲器,內外統一編制,地址重合區由EA決定,EA=1訪問外部,EA=0訪問內部,內部數據存儲器:00H~20H由32個寄存器組成,每八個一組,21H~2FH位尋址區,30H~FFH用戶存儲區,內外存儲地址有指令區分MOVSMOV SFR特殊功能寄存器:ACC、B、SP、DPTR、PSW、IO宿存器 4.CPU時序電路:振蕩周期(1)、狀態周期(2)、機器周期(12)、指令周期、CPU訪問指令時兩次讀指令,訪問外部程序存儲器是ALE兩次有效,S1P2S4P2,4.單片機的引腳功能:PSEN,ALEPROG,EA 5.輸入輸出口結構:p0準雙向口,每位可帶8個LSTTTL負載,輸出需要上拉電阻(準雙向原因:作為輸出口,要給鎖存器1,屏蔽兩個二極管)
p1、p2均為準雙向口,帶四個負載,p1也需要上拉電阻,p2自帶電阻,p2控制信號為1時輸出高八位地址 p3每個位有特殊定義 6.單片機的尋址方式:
直接尋址:SFR尋址均為直接尋址
寄存器尋址:乘法指令中B寄存器為寄存器尋 立即數尋址:
寄存器間接尋址:R0,R1 變址尋址:注意PC變址不改變PC值,DPTR變址可以隨意到任意位置取數
相對變址尋址:調轉指令 位尋址 7.單片機指令:(1)數據傳送類指令:MOVMOVXMOVC,XCHXCHDSWAP,PUSHPOP(2)數據傳送類指令:
ADDADDCINC,SUBBDEC,MUL(低位A,高位B),DIV(商A,余數B)
(3)邏輯類指令:
ANL,ORL,XRL, RL,RR,RLC,RRC, CPL(按位取反),CLR(請位)
(4)轉移類指令
AJMP,LJMP,SJMP,JMP.JZ.JNZ,CJNE,CJE,DJNZ(5)位轉移指令
JC rel ;若CY=1,則PC ←PC+ 2 + rel ;若CY=0,則PC ←PC+ 2 JNC rel ;若CY=0,則PC ←PC+ 2 + rel ;若CY=1,則PC ←PC+ 2 JB bit,rel ;若(bit)=1,則PC ←PC+ 3 + rel ;若(bit)=0,則PC ←PC+ 3 JNB bit,rel ;若(bit)=0,則PC ←PC+ 3 + rel ;若(bit)=1,則PC ←PC+ 3 JBC bit,rel ;若(bit)=1,則PC ←PC+ 3 + rel,bit←0 ;若(bit)=0,則PC ←PC+ 3 8.程序設計:
冒泡法,BCD轉2進制,2進制轉BCD,ASCALL轉2進制 9.偽指令:ORG,EQU 10.中斷系統
兩個外部中斷INT0、1,兩個定時器中斷TI0、TI1,串口中斷
中斷系統的組成:TCON,SCON,IE,IP
中斷響應的條件:
有中斷請求; EA=1;
IE相應的中斷位為1;CPU執行指令最后一個周期;
CPU沒有執行同級或者更高級的中斷指令; CPU不執行RET,RETI或者讀取IEIP的指令
中斷響應的過程:
①置位相應的優先級狀態觸發器,清除相應的中斷請求標志(TI和RI除外);
②由硬件自動生成一條長調用指令LCALL,將斷點地址(當前PC值)壓入堆棧加以保護;
③將中斷入口地址裝入PC,使程序轉向執行中斷服務程序。中斷響應時間為3~8個機器周期
中斷相應返回時: 將優先狀態觸發器置0; 將返回地址送至PC返回
定時器中斷自動清除標志位 外部中斷:
(1)電平觸發外部清除,或者軟件清除(2)邊緣觸發自動清除 串行口中斷軟件清除
10.定時器中斷:TCON,80H設置(T0低位,T1高位)
工作方式0:13位計數TH位高八位TL低五位表示低五位,工作方式1:16位計數
工作方式2:8位計數,TL方初值,TH計數
工作方式3: TL0不變可做定時計數,用T0的一套,TH0只能定時用T1的一套。T1為方式3時不工作 11.利用定時中斷溢出編程
(1)產生方波信號(方波信號的嵌套)
①設置TMOD控制字,確定工作方式;
②計算計數初值并裝入計數值寄存器TH0(1)、TL0(1); ③若使用中斷系統,則開中斷EA=
1、ET0或ET1=1; ④啟動定時器/計數器工作(置TR0或TR1)。(2)外部中斷的擴展(查詢方式,將初值設置為最大)
禁止中斷;JBC 12.串行口波特率的計算
方式0:固有頻率的12分之一
方式1、3:與三相同與T
1fOSC2SMOD??的益處時間有關 3212?2n?x?? 方式2:固有頻率的64分之一
三、ARM單片機
(1)兩種工作狀態:ARM狀態(32位)、THUM狀態(16位)
工作狀態的切換:BX RN 寄存器最后一位是0切換ABM狀態,最后一位是1切換到THUM狀態
(2)七種工作模式:用戶模式、系統模式、管理模式、外部中斷模式、快速中斷模式、未定義指令模式、數據訪問中止模式
后五個屬于“異常模式”,后六屬于“特權模式”
(3)ARM7的流水式作業:取指——譯碼——執行
采用馮諾依曼存儲結構 ARM9流水式作業:取指——譯碼——執行——訪存——回寫 采用哈佛結構
(4)存儲其結構(37個寄存器)
31個通用寄存器、6個標志位寄存器 1.R0~R7八個通用寄存器(7種模式通用)2.R8~R12前六種公用,最后一種自己用一組 3.R13:堆棧指針
R14:子程序連接寄存器(子程序調用時自動將下一條地址送給R14),這兩個寄存器用戶模式、系統模式公用一組,異常模式每種各一組 4.R15,:PC計數器
5.CPSR:程序狀態寄存器 N.V.C.Z.Q.I.F.T.M4~M0 6.SPSR:程序狀態備用寄存器,調用子程序將當前CPSR復制給SPSR,用戶模式與系統模式沒有,異常模式每種一組。
(5)存儲類型;
數據類型三種:8位字節、16位半字、32位字
指令類型:16位THUM、32位ARM 大端格式:與正常存儲方式相反
小端格式:高字節對應高地址,低字節對應低地址(6)多級存儲形式:寄存器組、片上RAM、CASHE、主存儲器
(7)異常:(其中異常模式類似于中斷)1.種類:按優先級排列
復位、數據中止、FIQ、IRQ、指令預取終止、未定義指令終止、SWI(軟件中止)2.異常的相應過程:
保護返回地址:將下一條地址復制到LR子程序連接寄存器中;
保護當前狀態寄存器的值:復制CPSR至將要執行模式的SPSR;
強行設置異常模式下CPSR的值;
強制PC從中斷向量地址取出指令執行;
可以設置中斷禁止位;
3.中斷的返回
將返回的值寫入PC中
恢復CPSR的值
清除沖斷禁止位
4.異常返回地址的確定(LR 在復制時已自動減4)
(1)軟件中止:直接返回(2)未定義指令:直接返回
(3)FIQ、IRQ、指令預取中止:均減四返回
(4)數據中止:減八返回
(8)尋址方式
立即尋址:MOV R0, #0xFF00(8位位圖)寄存器尋址:MOV R2, R3 寄存器移位尋址:MOV R0, R1, LSL#4(6種類型的移位操作)
寄存器間接尋址:LDR R1,[R2] 變址尋址:LDR R0, [R1,#8](前變址尋址);
LDR R0, [R1,#8]!(自動變址尋址); LDR R0, [R1], #2(后變址尋址)
堆棧尋址:STMFD SP!, {R4-R7, LR}(4種類型的堆棧操作)塊復制尋址:LDMIA R1!,{R2-R4,R5}(4種塊復制尋址操作)
相對尋址:BL SUBR(9)指令集: 數據傳送:MOV、MVN 算術運算:ADD、ADC、SUB、SBC、RSB、RSC、MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 邏輯運算:AND、ORR、EOR、BIC 比較和測試:CMP、CMN ARM程序狀態訪問指令:MSR ARM存儲器訪問指令
單一數據:LDR、STR、LDRB、STRB 批量數據:LDM、STM(IA、IB、DA、DB)數據交換:SWP ARM分支指令:B、BL、BX(10)偽指令與程序設計 1.偽指令
ADR:小范圍加載指令,將相對偏移量加載到某個寄存器中,只能用一條指令來實現,若不能用一條指令來實現則編譯錯誤
ADRL:中范圍加載指令,將PC的相對偏移量加載到某個寄存器中,必須用兩條指令來實現,LDR:將某個32位偏移量加載到寄存器中
聲明變量:
全局變量:GBLA,GBLL,GBLS 局部變量:LCLA,LCLL,LCLS 變量賦值:SETA,SETL,SETS 聲明寄存器列表:RLIST 數據定義偽指令:DCB DCDU DCWU 分配一塊字節內存單元偽操作SPACE(%)格式:標號 SPACE expr 或 標號 % expr 聲明數據緩沖池(文字池)偽操作LTORG 格式: LTORG 段指示偽操作AREA 格式:AREA 段名 {,屬性1} {,屬性2}… 程序入口偽操作ENTRY 格式:ENTRY(11)基本ATPCS規則
1.子程序調用過程中寄存器的使用規則
子程序間通過寄存器R0~R3來傳遞參數
在子程序中,使用寄存器R4~R11來保存局部變量 寄存器R12用作子程序內部調用的scratch寄存器 寄存器R13用作數據棧指針,記作sp或SP 寄存器R14用作鏈接寄存器,記作lr或LR 寄存器R15是程序計數器,記作pc或PC。2.數據棧的使用規則;
數據棧為滿遞減FD類型,并對數據棧的操作是8字節對齊的
3.參數的傳遞規則。
(a)參數個數可變的子程序參數傳遞規則
(b)參數個數固定的子程序參數傳遞規則(c)子程序結果返回規則
四、存儲器與接口技術
1.SRAM:靜態隨機訪問存儲
(1)組成:地址線、數據線、讀寫控制、片選信號線(2)工作原理:讀寫均先輸送地址,在進行數據的輸入和輸出
(3)SRAM與CPU的鏈接: 2.DRAM:
有行地址和列地址,工作時有地址鎖存器,先輸送行地址在輸送列地址,選中單元后輸送單元,讀數據時需要刷新電路
3.SDRAM:與SRAM相比多了同步時鐘信號,同時增添了BLOCK,地址分行地址、列地址,也需要刷新電路,BLOCK為最大讀寫單元,引腳BA選擇塊兒 4.FLASH:
(1)NOR FLASH:存儲容量絞小,讀速度較快,采用線性尋址,可直接找到存儲位置
(2)HAND FLASH:存儲密度大,寫入和擦除速度較快,有BLOCK存儲單元,有塊兒地址,頁地址,頁內地址,數據地址線復用,傳送地址需要四個周期
5.MCS-51單片機
P0口作為地址線低八位和數據線,所以需要地址鎖存器,p0口分時復用,由ALE管理,P2輸出地址高八位,PSEN接程序存儲器使能端OE 進行存儲其擴展時可用與門或者先選來鏈接存儲器片選信號進行擴展。
鏈接程序存儲器數據存儲器復用時,將PSEN 與RD相與和選通相連連 6.ARM(S3C2410)存儲機制:
(1)與SRAM、DRAM相連(2)高速存儲機制:CASHE(3)NMUI 接口設計:
(1)HAND FLASH啟動:將地址前4KB 的代碼作為啟動代碼
(2)ROM啟動: 可選擇16位或者32位的存儲器,通過M1、M0進行選擇 在與存儲器進行連接時,注意地址線,若存儲器為8位直接位位對應,16位是錯開一位,32位時錯開兩位 7.接口 1.RS-232C 信號電平與邏輯
RS-232C信號采用負邏輯,即以+12V電平視為邏輯“0”,-12V電平視為邏輯“1”
串行接口電路中需要在TTL標準與RS-232C標準之間進行電平轉換 2.SPI接口
總線定義及信號線構成 傳輸技術:同步、全雙工
SPI采用同步、全雙工串行傳輸技術,也稱為同步串行總線接口;SPI總線(Serial Peripheral Interface)稱為串行外圍設備接口 3.USB 總線定義及信號線構成,半雙工傳輸 三種設備Host、Device和HUB USB(Universal Serial Bus)即通用串行總線,主要用于PC與外圍設備互連。USB的輸出特性是差分驅動、支持半雙工方式,接收采用差分接收 USB體系結構中包括三種設備 Host(即主控制器)Device(設備)
HUB(集線器,也是設備)4.I2C總線
總線定義及信號線構成,信號線連接方式 總線仲裁
I2C總線定義了兩根傳輸線:SDA(串行數據)和SCL(串行時鐘),都是雙向傳輸線,通過電阻上拉到正電源,總線空閑時都是高電平5.I2S總線
總線定義及信號線構成 數據傳輸格式
I2S總線(Inter-IC Sound Bus集成電路內置音頻總線 串行數據高位MSB在先,發送器和接收器可以有不同的字長無論有多少位有效數據,最高位MSB總是出現在IISLRCK變化后的第二個IISCLK脈沖處。MSB位置固定,LSB位置取決于字長。這就使得接收端與發送端可以不同的有效位數。如果接收端能處理的有效位數少于發送端的,則可以放棄數據幀中多余的低位數據;如果接收端能處理的有效位數多于發送端的,則剩余低位自行補0。這種同步機制使得數字音頻設備的互連更加方便,而且不會造成數據錯位