第一篇:嵌入式linux復習2
判斷
1、版本號為2.5 的linux內核比2.4的要更好更穩(wěn)定。(錯)
2、bootloader就是uboot。(錯)
3、啟動加載模式是bootloader的正常工作模式。(對)
4、在目標機上遠程掛載nfs文件系統(tǒng)要用網線將宿主機和目標機相連接。(對)
5、在linux中,執(zhí)行當前目錄中的應用程序可以不指定路徑。(錯 用./)
6、宿主機和目標機一般是通過串口進行通迅交互的。(對)
7、Makefile的規(guī)則命令行要以空格開頭。(錯 以
8、在宿主機上能執(zhí)行的程序就可以在目標板上執(zhí)行。(錯)
9、槽就是一個可以被調用處理特定信號的函數。(對)
選擇題
1、redhat9下重啟nfs服務的命令為(service nfs reboot)。
2、uboot環(huán)境變量中,用來設置uboot啟動后自動執(zhí)行的命令的環(huán)境變量是(setenv bootcmd
“run bootlunux”)。
3、Linux環(huán)境中登錄訪問遠程開發(fā)板的命令為(minicom)。
4、將test.c編譯為應用程序test的命令為(gcc test.c –o test)。
5、Linux 2.4內核的編譯過程中,make命令的正確順序為(make mrorper make menuconfig
make dep make bzlmage make modules)。
6、uboot中用來設置tftp下載服務器ip地址,對應命令為(setenv serverip 192.168.12.3)。
7、uboot下載模式中經常通過以下(tftp)下載方式利用網絡接口從宿主機下載程序。
8、下命令中,將ip為192,168,1,180的主機上/tftpboot掛載到目標機的/mnt/nfs,正確的為
()。
名詞解釋
1、交叉編譯: 在一種平臺上編譯出能在另一種平臺(體系結構不同)上運行的程序。
在PC平臺(X86 CPU)上編譯出能運行在arm平臺上的程序,編譯得到的程序在X86 CPU平臺上是不能運行的,必須放到arm平臺上才能運行。
2、啟動代碼:由于ARM軟件編程一般采用高級語言,如C語言,因此在系統(tǒng)啟動后必須有一段程序能夠將CPU帶入到能夠運行C語言的狀態(tài),這段程序就是啟動代碼。啟動代碼通常用匯編語言完成,并在系統(tǒng)復位入口點(ARM系統(tǒng)中為0地址)運行
3、嵌入式系統(tǒng):以應用為中心,以計算機技術為基礎,軟硬件可裁減,以適應應用系統(tǒng)對功能、可靠性、成本、體積和功耗等有嚴格要求的專用計算機系統(tǒng)。
填空題
1、Linux系統(tǒng)中的設備分為_塊設備_、_字符設備_、_網絡設備_三類
2、bootloader的兩種工作模式分別為_啟動加載模式_和_下載模式_模式。
3、QSocket套接字中“準備讀”信號是:readyRead4、QT處理事件的辦法是:調用虛擬函數
問答題
1、說明嵌入式linux的移植主要有哪些內容。
bootoader的移植,內核的移植,根文件系統(tǒng)的移植。
2、Qt的qmake編譯生成應用程序的過程
make mrorper make menuconfig make dep make bzlmage make modules
第二篇:嵌入式linu學習心得
嵌入式Linux學習心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當前的目錄
cd:改變當前操作目錄cd /直接跳到根目錄 cd..回到上一級目錄 cat: 打印顯示當前文件的內容信息
mkdir:創(chuàng)建目錄
fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看
->代表是鏈接文件,類似window下的快捷方式。
cp: 復制命令,例子cp 文件名 /home/dir/
mv: 移動或改名,如mv sonf.confsonf.txt(改名)移動:mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d
man:查看某個命令的幫助,man 命令
2、各系統(tǒng)目錄的功能
drw—r—w--:d代表是目錄,drw代表當前用戶的權限,r代表組用戶的權限,w代表其它用戶的權限。x代表有執(zhí)行權限。
/boot/gruff.conf: 啟動引導程序
/dev:brw—rw--:b代表是塊設備。Linux設備有三種,塊設備(b開頭)、字符設備(c開頭)、網絡設備。had代表第一個硬盤,hdb代表第二個硬盤。Hdb2代表第二塊硬盤的第二個分區(qū)。3,67代表主設備為3,從設備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動方式下必須啟動的進程。Inittab文件中有6個啟動level,wait中對應著6個level的目錄,respawn代表當一個進程被意外終止了,但會自動啟動的進程,如守護進程。rc.d目錄中存放了一個rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫文件,后綴為so的文件代表動態(tài)鏈接庫。
/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。
/mnt:掛載外部設備,如掛載光驅:mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應該將D盤的文件映射過來,mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應用程序
/proc:是系統(tǒng)運行的映射,比較重要。里面的文件數字代表進程號。每個進程號目錄下包含進程的基本信息。還有其他信息,如cpuinfo等,內核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內存分配情況。ioport存放IO端口號。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息
對于Linux的設備驅動程序,有兩種加載模式,一種是直接加載進linux內核,一種是以模塊的方式加載到內核。
/sbin: 系統(tǒng)管理的一些工具。如poweroff關機工具。
/usr: 安裝系統(tǒng)時很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫文件,src包含Linux2.4的內核源碼
/var:存放是臨時變量
3、
第三篇:嵌入式復習總結
一:嵌入式系統(tǒng)概述 1嵌入式定義
2嵌入式與通用計算機
A.嵌入式系統(tǒng)具有應用針對性
B.嵌入式系統(tǒng)硬件一般對擴展能力要求不高
C.嵌入式一般采用專門針對嵌入式應用設計的處理器 D.嵌入式不一定有操作系統(tǒng) E.嵌入式一般有實時性要求
F.嵌入式一般有較高的成本控制要求 G.嵌入式系統(tǒng)軟件一般有固化的要求
H.嵌入式系統(tǒng)軟件一般采用交叉開發(fā)的模式
I.嵌入式在體積,功耗,可靠性和環(huán)境適應性上一般有特殊要求 J.嵌入式標準化程度不高 3嵌入式系統(tǒng)的組成
嵌入式系統(tǒng)包括硬件和軟件兩個組成部分
嵌入式系統(tǒng)硬件部分一嵌入式處理器為核心,擴展存儲器和外部設備控制器 嵌入式系統(tǒng)軟件運行在硬件平臺之上,硬件抽象層向下管理硬件資源,向上為操作系統(tǒng)提供一個虛擬硬件平臺,是操作系統(tǒng)支持多硬件平臺的關鍵 4嵌入式的分類
A.按處理器位寬分類 B.按有無操作系統(tǒng)
C.按實時性(硬實時:一定,軟實時:從統(tǒng)計角度)D.按應用分類
二:嵌入式處理器 1嵌入式處理器的原理
A.嵌入式的指令系統(tǒng)(一條完整的指令包括操作碼和操作數)B.嵌入式處理器的類型
根據結構可分為哈弗結構(數據指令分開存儲,使用兩套彼此獨立的存儲總線,故可以同時訪問程序和指令)和馮諾依曼結構(程序指令和數據采用統(tǒng)一的存儲器,尋址不能同時進行)根據指令格式的不同可以分為復雜指令計算機處理器(CISC)和精簡指令計算機處理器(RISC)RISC的最大特點是指令長度固定,指令種類少,尋址方式種類少,大多數是簡單指令且都能在一個時鐘周期內完成,易于設計高性能的流水線。
RISC還有特點(1)芯片面積小(2)開發(fā)時間段(3)性能高 C.嵌入式處理器的結構(1)運算器
包括算數邏輯單元,累加器,暫存器及標志寄存器等(2)控制器
指令寄存器,指令譯碼器,邏輯控制電路(3)寄存器陣列及連接各部分的內部總線 D.大端方式和小端方式
E.影響嵌入式處理器性能的因素(1)主頻
(2)指令效率與單指令執(zhí)行所需要的時間(3)處理器的字長(4)內存總線速度(5)高緩存設計
(6)CPU的系統(tǒng)構架 2.嵌入式處理器的分類(1)嵌入式微處理器(2)嵌入式微控制器(3)嵌入式DSP(4)嵌入式片上系統(tǒng) 3.嵌入式處理器的特點
(1)嵌入式處理器種類繁多,功能多樣且性能跨度大(2)嵌入式處理器功耗低
(3)提供靈活的地址空間尋址能力(4)支持靈活的功耗控制
(5)功能密集,提供豐富的外部接口 4.8051單片機
(1)采用哈弗結構,除了一個8位處理器核心外,還集成了中斷控制器,RAM,ROM,定時器和通用異步收發(fā)器。(2)主要特征:
5ARM處理器及實例 A.ARM處理器片內總線
6嵌入式X86處理器及實例 7DSP處理器及實例
實際應用中有兩種形式:一:一種是作為主處理器的協(xié)處理器,,,8SOC處理器及實例
9:嵌入式處理器的選擇
10:嵌入式處理器的JTAG調試接口 它在嵌入式開發(fā)過程中的重要作用 A.硬件基本功能的測試 B.軟件下載 C.軟件調試 D.Flash燒寫
三:嵌入式系統(tǒng)總線
1:計算機總線的基本概念
2嵌入式系統(tǒng)總線的特點 A.機械結構上的差別
B.嵌入式系統(tǒng)對總線標準功能的補充 3:ISA總線原理
ISA總線最初是IMB公司為PC機制定的總線標準,采用8位數據寬度,能尋址1MB的地址空間。1984年IBM推出PC/AT系統(tǒng),ISA從8位擴充到16位,地址線從20擴充到24條,可尋址空間達到16MB,16位ISA總線時鐘頻率為8MHz,峰值數據傳輸速率為8MB/S。A:ISA總線信號(1)地址信號(2)數據信號(3)總線命令信號(4)時序控制信號(5)DMA相關信號(6)中斷相關信號
(7)總線數據寬度控制信號(8)其他信號 4:PCI總線原理
在嵌入式中以PC/104,CompactPCI,miniPCI等形式出現 A:pci總線的特點(1)高性能
(2)資源豐富且成本低(3)易于使用(4)可擴展性好(5)支持不同的平臺 B:PCI總線信號(1)系統(tǒng)信號
(2)地址與數據信號(3)接口控制信號(4)總線仲裁信號(5)錯誤告信號(6)中斷信號(7)附加信號
(8)64位總線擴展信號(9)JTAG邊界掃描信號 C:PCI設備的配置空間
PCI配置空間是PCI設備上一組256字節(jié)的特殊功能寄存器,用于存儲與設備相關的信息,計算機系統(tǒng)根據配置空間實現對PCI總線設備的管理。(1)配置空間的功能與組織(2)設備標識
(3)設備控制寄存器(4)設備狀態(tài)寄存器(5)基址地址寄存器 5:PC/104系列總線標準
6:CompactPCI總線
CompactPCI是PCI總線的另一種工業(yè)版本,采用Eurocard結構標準,主要應用在工業(yè),軍事,電信等行業(yè)。除了兼容桌面PCI總線所有的硬件和軟件資源外,還有一個重要特點——支持熱插拔,該技術對實現高可靠的計算機系統(tǒng)至關重要。四:嵌入式系統(tǒng)常見電路
系統(tǒng)復位與電源監(jiān)控,I2C總線,實時時鐘和RS-232串行接口是嵌入式系統(tǒng)最常見的四種基本電路
1系統(tǒng)復位與電源監(jiān)控 A.復位有四種類型(1)上電自動復位(2)手動復位(3)看門狗復位
看門狗是一種定時器,必須由軟件定期對該定時器進行清零,否則計時器到期將產生系統(tǒng)復位信號,看門狗可以使系統(tǒng)在軟件崩潰/死機后自動復位。(4)系統(tǒng)異常復位
B.復位與電源管理控制器
為了產生更可靠的系統(tǒng)復位,可以用專用復位管理控制器如MAX705 2I2C總線原理
I2C是一種簡單的只有兩條信號線的串行總線,在嵌入式中應用很廣泛,盡管簡單,她仍然能支持多主設備,并且具有總線仲裁的功能。3.實時時鐘 4.RS-232接口 RS-232串行接口是實現計算機與計算機以及計算機與外圍設備連接的一種簡單且成本低的方法,除了實現一般的數據通信外,在系統(tǒng)調試中還常用于實現程序下載和系統(tǒng)控制臺的功能。
RS-232接口支持全雙工傳輸方式,可同時收,發(fā)數據,接受方的接收比特率與發(fā)送方必須相同。
是串行接口,采用負邏輯。第五章:嵌入式系統(tǒng)存儲器 1靜態(tài)隨機存儲器
SRAM容量小,成本高,在PC機中已經不作為主存使用,但他的接口簡單,在嵌入式系統(tǒng)中還有很多應用,常與單片機,DSP等處理器配套使用。比如
IDT7146靜態(tài)RAM存儲器 2雙端口存儲器(DPRAM)雙端口RAM是一種很特殊的存儲器,有兩套讀寫端口,可以同時被兩個處理器訪問,在嵌入式系統(tǒng)中常用于實現兩個處理期間的緊耦合數據通信,相當于一個共享存儲區(qū)。3同步動態(tài)隨機存儲器(DRAM)DRAM容量大,成本低,在嵌入式系統(tǒng)應用很廣泛 4NOR Flash Flash是嵌入式系統(tǒng)中常用的一類非易失性存儲器分為NOR flash和NAND flash兩類 5NAND flash 廣泛應用于手機,PDA,數碼相機,MP3播放器等 6串行EEPROM 小型價格低廉的EEPROM可作為flash的替代品
六嵌入式系統(tǒng)引導程序
引導程序是計算機系統(tǒng)上電或復位后,實現系統(tǒng)初始化,將系統(tǒng)引入一個可運行的狀態(tài),并將操作系統(tǒng)加載到系統(tǒng)RAM中運行的程序。1.PC機中的引導程序
BIOS的主要功能是為計算機提供最底層,最直接的硬件設置和控制,包括硬件初始化,上電自測試,I/O設備管理,中斷服務,引導加載操作系統(tǒng)等。
BIOS并不直接加載操作系統(tǒng),而是加載操作系統(tǒng)引導程序,再把執(zhí)行權交給引導程序,由引導程序繼續(xù)完成操作系統(tǒng)的后續(xù)加載任務。2.嵌入式系統(tǒng)中的引導程序 典型的嵌入式系統(tǒng)中,軟件分為4個部分:引導程序,操作系統(tǒng)內核,文件系統(tǒng)和應用程序。應用程序和操作系統(tǒng)內核之間可能包括嵌入式圖形用戶界面。
在有操作系統(tǒng)的嵌入式計算機中,引導程序是必備的軟件,完成上電初始化,加載操作系統(tǒng)并最終啟動應用系統(tǒng),在嵌入式系統(tǒng)中,通常由引導程序獨立完成硬件初始化,上電自測試及操作系統(tǒng)加載啟動等任務。A.嵌入式系統(tǒng)引導程序的主要功能(1)硬件初始化
(2)加載啟動嵌入式操作系統(tǒng)(3)提供人機交互命令
(4)支持目標機與開發(fā)機之間的通信(5)支持FLASH燒寫
B.引導程序有兩種模式:啟動加載模式和下載模式,系統(tǒng)的最終用戶只關心啟動加載模式,而下載模式對系統(tǒng)的開發(fā)與維護有很重要的作用。3.嵌入式系統(tǒng)引導程序的啟動過程
A.引導程序的執(zhí)行過程可分為兩個階段:階段1和階段2.階段1完成硬件初始化,工作模式設置等與硬件平臺密切相關的操作,該階段的程序代碼一般用匯編語言編寫,階段2完成一些相對高級,復雜的功能,如通信,文件下載,FLASH燒寫,該階段的程序代碼一般由C語言實現。B.階段1(1)硬件設備初始化
(2)為加載引導程序的階段2代碼準備RAM空間(3)將階段2二進制代碼復制到RAM空間中(4)設置好堆棧指針(5)執(zhí)行階段2程序代碼 C.階段2(1)其他硬件設備的初始化(2)檢測系統(tǒng)內存映射
(3)將操作系統(tǒng)內核映像及文件系統(tǒng)映像從FLASH讀取到系統(tǒng)RAM中(4)為內核設置啟動參數(5)調用內核 4.U-Boot 是一種應用廣泛的嵌入式引導程序 七嵌入式操作系統(tǒng)
嵌入式實時操作系統(tǒng)具有模塊化,可移植,可定制,高實時,高可靠等特點。,1概述 A.與桌面 操作系統(tǒng)相比,嵌入式操作系統(tǒng)一下特點:(1)模塊化,可定制(2)實時性強(3)資源占用少(4)穩(wěn)定性要求高(5)代碼有固化要求
(6)具有良好的硬件適應性,便于移植 2.嵌入式操作系統(tǒng)硬件抽象層 3嵌入式操作系統(tǒng)實時性 A.實時系統(tǒng)具有以下特點
(1)實時系統(tǒng)具有復雜的約束性(2)實時任務的執(zhí)行具有可預測性(3)實時系統(tǒng)具有高可靠性的要求(4)實時系統(tǒng)需要與外部環(huán)境進行交互(5)實時系統(tǒng)需要滿足一定的峰值負荷要求 B.嵌入式系統(tǒng)實時性 C.裸機中的實時軟件設計 D.嵌入式實時操作系統(tǒng)
(1)通用操作系統(tǒng)與嵌入式操作系統(tǒng)差異 a.任務調度策略不同 b.內存管理方式不同 c.中斷處理方式不同
d.共享資源的互斥訪問機制不同
e.系統(tǒng)調用和系統(tǒng)內部操作的時間開銷有差別 f.系統(tǒng)的可重入性 g.輔助工具
(2)實時操作系統(tǒng)的一些要求 a.直接訪問存儲 b.高速緩存
(3)評價實時操作系統(tǒng)的方面 a.任務調度機制 b.內存管理 c.最小內存開銷
d.中斷禁止時間與中斷延遲時間 e.任務切換時間 4.嵌入式Linux A.嵌入式Linux的特點(1)支持多硬件平臺(2)高效穩(wěn)定的系統(tǒng)內核(3)開放源碼,軟件豐富(4)完善的開發(fā)工具(5)完善的網絡通信(6)支持多種文件系統(tǒng)(7)支持多種圖形用戶界面 B.常見的嵌入式Linux操作系統(tǒng)(1)RTLinux(2)uCLinux(3)EOSunx和Midnux(4)
第四篇:嵌入式復習總結a4
一、嵌入式系統(tǒng)基本知識
1、什么是嵌入式系統(tǒng)、分層結構:根據IEEE(國際電氣和電子工程師協(xié)會)的定義:嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機器和設備的裝置”,此定義是從應用上考慮的,嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機電等附屬裝置;一般定義:“以應用為中心、以計算機技術為基礎、軟件硬件可裁剪、功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)”;微機學會的定義:嵌入式系統(tǒng)是以嵌入式應用為目的的計算機系統(tǒng)。可分為系統(tǒng)級、板級、片級(系統(tǒng)級:各種類型的工控器、PC104模塊;板級:各種類型的帶CPU的主板及OEM產品;片級:各種以單片機、DSP、微處理器為核心的產品)。分層結構:嵌入式系統(tǒng):硬件、驅動、操作系統(tǒng)、中間件、應用。
2、嵌入式系統(tǒng)與單片機、PC系統(tǒng)的區(qū)別:(單片機與嵌入式系統(tǒng)比較,一般沒有操作系統(tǒng),就沒有辦法同時運行多個任務,單片機總是運行單個任務)目前嵌入式系統(tǒng)的主流是以32位嵌入式微處理器為核心的硬件設計和基于實時操作系統(tǒng)(RTOS)的軟件設計;單片機系統(tǒng)多為4位、8位、16位機,不適合運行操作系統(tǒng),難以進行復雜的運算及處理功能;嵌入式系統(tǒng)強調基于平臺的設計、軟硬件協(xié)同設計,單片機大多采用軟硬件流水設計;嵌入式系統(tǒng)設計的核心是軟件設計(占70%左右的工作量),單片機系統(tǒng)軟硬件設計所占比例基本相同;單片機學習一般從硬件入手,從硬件體系結構、匯編語言到硬件設計、軟件設計;嵌入式系統(tǒng)學習可以從軟件入手,從應用層編程到操作系統(tǒng)移植、硬件平臺設計較好,按單片機設計的學習流程較難掌握。嵌入式系統(tǒng)與pc系統(tǒng)區(qū)別:嵌入式系統(tǒng)一般是專用系統(tǒng),而PC是通用計算平臺;嵌入式系統(tǒng)的資源比PC少得多;嵌入式系統(tǒng)軟件故障帶來的后果比PC機大得多;嵌入式系統(tǒng)一般采用實時操作系統(tǒng);嵌入式系統(tǒng)大都有成本、功耗的要求;嵌入式系統(tǒng)得到多種微處理體系的支持;嵌入式系統(tǒng)需要專用的開發(fā)工具。
3、常見的嵌入式操作系統(tǒng)有哪些?可分為商用型和免費型。免費型:實時操作系統(tǒng)在價格方面具有優(yōu)勢,目前主要有Linux和μC/OS,穩(wěn)定性與服務性存在挑戰(zhàn)。Linux:是開放源碼的,不存在黑箱技術,遍布全球的眾多Linux愛好者又是Linux開發(fā)的強大技術后盾;Linux的內核小、功能強大、運行穩(wěn)定、系統(tǒng)健壯、效率高,易于定制剪裁,在價格上極具競爭力;Linux不僅支持x86 CPU,還可以支持其他數十種CPU芯片。嵌入式Linux是指對Linux經過小型化裁剪后,能夠固化在容量只有幾百K字節(jié)或幾兆字節(jié)的存儲器芯片或單片機中,應用于特定嵌入式場合的專用Linux操作系統(tǒng)。主要有RTLinux和CLinux。商用型:實時操作系統(tǒng)功能穩(wěn)定、可靠,有完善的技術支持和售后服務,但往往價格昂貴,如Vxworks、QNX、WinCE、Palm OS等。VxWorks,是一種嵌入式實時操作系統(tǒng),具有良好的持續(xù)發(fā)展能力、高性能的內核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領域牢牢占據著一席之地。特點是:可靠性、實時性和可裁減性;它支持多種處理器,如x86、i960、Sun Sparc、Motorola MC68xxx、MIPS、POWER PC等。Windows CE 3.0:一種針對小容量、移動式、智能化、32位、連接設備的模塊化實時嵌入式操作系統(tǒng);針對掌上設備、無線設備的動態(tài)應用程序和服務提供了一種功能豐富的操作系統(tǒng)平臺,WindowsCE嵌入但不夠實時,屬于軟實時操作系統(tǒng);由于其Windows背景,界面比較統(tǒng)一認可;操作系統(tǒng)的基本內核需要至少200K的ROM。
4、嵌入式系統(tǒng)的特點:(1)系統(tǒng)內核小:由于嵌入式系統(tǒng)一般是應用于小型電子裝置的,系統(tǒng)資源相對有限;(2)專用性強:嵌入式系統(tǒng)個性化很強,其中的軟件系統(tǒng)和硬件的結合非常緊密,一般要針對硬件進行系統(tǒng)的移植;即使在同一品牌、同一系列的產品中也需要根據系統(tǒng)硬件的變化和增減不斷進行修改;針對不同的任務,往往需要對系統(tǒng)進行較大更改,這種修改和通用軟件的“升級”是完全不同的概念;(3)系統(tǒng)精簡:嵌入式系統(tǒng)一般沒有系統(tǒng)軟件和應用軟件的明顯區(qū)分,不要求其功能設計及實現上過于復雜,這樣一方面利于控制系統(tǒng)成本,同時也利于實現系統(tǒng)安全;(4)高實時性OS:這是嵌入式軟件的基本要求,而且軟件要求固態(tài)存儲,以提高速度。軟件代碼要求高質量和高可靠性、實時性;(5)嵌入式軟件開發(fā)走向標準化:嵌入式系統(tǒng)的應用程序可以沒有操作系統(tǒng)直接在芯片上運行。為了合理地調度多任務、利用系統(tǒng)資源、系統(tǒng)函數以及和專家?guī)旌瘮到涌冢脩舯仨氉孕羞x配RTOS開發(fā)平臺,這樣才能保證程序執(zhí)行的實時性、可靠性,并減少開發(fā)時間,保障軟件質量;(6)嵌入式系統(tǒng)需要開發(fā)工具和環(huán)境:其本身不具備自主開發(fā)能力,即使設計完成以后,用戶通常也是不能對其中的程序功能進行修改,必須有一套開發(fā)工具和環(huán)境才能進行開發(fā)。
二、嵌入式系統(tǒng)的設計原則及開發(fā)方法:
1、軟硬件協(xié)同設計概念:基于體系結構,對系統(tǒng)的軟件、硬件進行詳細設計,為了縮短產品開發(fā)周期,設計往往是并行的(既是先從邏輯入手,設計出功能模塊,最后再區(qū)分是由硬件還是軟件來實現該功能)。舉例:SOC系統(tǒng):嵌入式片上系統(tǒng),結合許多功能區(qū)塊,將功能坐在一個芯片上,微處理器核心是通信接口單元等。SOC是追求產品系統(tǒng)最大包容的集成器件,最大特點是成功實現了軟硬件無縫結合,直接在處理器片內嵌入操作系統(tǒng)的代碼模塊,運用VHDL等硬件描述語言,不需要像傳統(tǒng)系統(tǒng)設計一樣,繪制龐大復雜的電路板,一點一點的連接焊制,只需使用精確的語言,綜合時序設計,直接在器件庫中調用各種通用處理器標準,通過仿真后,可交付芯片廠家進行生產。
2、項目開發(fā)生命周期:(識別需求-提出解決方案-執(zhí)行項目-結束項目)。系統(tǒng)開發(fā)步驟:系統(tǒng)需求分析(規(guī)格說明書):確定設計任務和目標,并提煉出設計規(guī)格說明書,作為正式設計指導和驗收的標準。系統(tǒng)的需求一般分功能性需求和非功能性需求兩方面。功能性需求是系統(tǒng)的基本功能,如輸入輸出信號、操作方式等;非功能需求包括系統(tǒng)性能、成本、功耗、體積、重量等因素。體系結構設計:描述系統(tǒng)如何實現所述的功能和非功能需求,包括對硬件、軟件和執(zhí)行裝置的功能劃分以及系統(tǒng)的軟件、硬件選型等。一個好的體系結構是設計成功與否的關鍵。硬件/軟件協(xié)同設計:基于體系結構,對系統(tǒng)的軟件、硬件進行詳細設計。為了縮短產品開發(fā)周期,設計往往是并行的。
系統(tǒng)集成:把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進行調試,發(fā)現并改進單元設計過程中的錯誤。系統(tǒng)測試:對設計好的系統(tǒng)進行測試,看其是否滿足規(guī)格說明書中給定的功能要求。
三、ARM處理器體系結構:
1、馮·諾依曼體系結構:程序和數據共用一個存儲空間,CPU無法同時訪問程序和數據;哈佛體系結構:程序和數據分開存放,CPU可以同時訪問程序存儲器和數據存儲器。(2)CISC:復雜指令集,具有大量的指令和尋址方式;8/2原則:80%的程序只使用20%的指令;大多數程序只使用少量的指令就能夠運行。RISC:精簡指令集,在通道中只包含最有用的指令;確保數據通道快速執(zhí)行每一條指令;使CPU硬件結構設計變得更為簡單。(3)體系結構與處理器的區(qū)別:知識產權核(IP核):電路或核是設計好并經過驗證的集成電路功能單元;IP復用意味著設計代價降低(時間,價格);ARM體系結構是知識產權,是IP核的一種,并不是某一具體的芯片,而微處理器一般指與RAM、ROM等硬件固化在一起的某一類芯片。(4)IP核的種類:Soft Cores(“code”)(軟核):HDL語言描述;靈活度高,可修改;與工藝獨立,可根據具體的加工工藝重新綜合;IP很難保護。Firm cores(“code+structure”)(固核):邏輯綜合后的描述,與工藝相關。Hard cores(“physical”)(硬核):物理綜合后的描述,準備流片,包含工藝相關的布局和時序信息,IP很容易保護,多數的處理器和存儲器。
2、ARM的七種基本工作模式:User用戶模式:非特權模式,大部分任務執(zhí)行在這種模式*正常程序執(zhí)行的模式;FIQ快速中斷模式:當一個高優(yōu)先級(fast)中斷產生時將會進入這種模式*高速數據傳輸和通道處理;IRQ外部中斷模式:當一個低優(yōu)先級(normal)中斷產生時將會進入這種模式*通常的中斷處理;Supervisor管理模式:當復位或軟中斷指令執(zhí)行時將會進入這種模式*供操作系統(tǒng)使用的一種保護模式;Abort數據訪問中止模式: 當存取異常時將會進入這種模式*虛擬存儲及存儲保護;Undef未定義指令中止模式: 當執(zhí)行未定義指令時會進入這種模式*軟件仿真硬件協(xié)處理器;System系統(tǒng)模式: 使用和User模式相同寄存器集的特權模式,特權級的操作系統(tǒng)任務。注意:模式之間的轉換實際上是寄存器組之間的切換,當使用某種寄存器組,就進入了某種相應的工作模式。(1)寄存器組織(37 寄存器):31 個通用32位寄存器,包括未分組寄器R0-R7、分組寄存器R8-R14、程序計數器PC(R15);6 個狀態(tài)寄存器。15個通用寄存器(R0 to R14), 以及1或者2個狀態(tài)寄存器和程序計數器在任何時候都是可以訪問的;可訪問的寄存器取決于處理器的模式;其它寄存器的狀態(tài)在支持IRQ, FIQ, 管理員, 中止和未定義模式處理時被切換。*FIR要求速度要快,故其專用的寄存器最多。(2)R0 到 R15 可以直接訪問;R0 到 R14 是通用寄存器;R13: 堆棧指針(sp)(通常);每種處理器模式都有單獨的堆棧;R14: 鏈接寄存器(lr);R15 包含程序計數器(PC);CPSR:當前程序狀態(tài)寄存器,包括代碼標志狀態(tài)和當前模式位;5個SPSRs(程序狀態(tài)保存寄存器):當異常發(fā)生時保存CPSR狀態(tài);SPSR和CPSR的功能是:保存ALU當前操作信息、控制允許和禁止中斷、設置處理器操作模式。(3)程序狀態(tài)寄存器:*條件位:N = 1-結果為負,0-結果為正或0;Z = 1-結果為0,0-結果不為0;C =1-進位,0-借位;V =1-結果溢出,0結果沒溢出。*中斷禁止位:I=1:禁止IRQ;F=1:禁止FIQ。*T Bit:僅ARM xT架構支持;T = 0:處理器處于ARM狀態(tài);T=1:處理器處于Thumb狀態(tài)。*Mode位(處理器模式位):0b10000 User;0b10001 FIQ;0b10010 IRQ;0b10011 Supervisor;0b10111 Abort;0b11011 Undefined;0b11111 System。(4)程序指針PC(r15):當處理器執(zhí)行在ARM狀態(tài):所有指令 32 bits 寬;所有指令必須 word 對齊;所以 pc值由bits [31:2]決定, bits [1:0] 未定義(所以指令不能halfword / byte對齊)。當處理器執(zhí)行在Thumb狀態(tài):所有指令 16 bits 寬;所有指令必須 halfword 對齊;所以 pc值由bits [31:1]決定, bits [0] 未定義(所以指令不能 byte對齊)。
3、ARM的異常:(1)異常定義:內部或外部中斷源產生并引起處理器處理一個事件,如外部中斷或試圖執(zhí)行未定義指令都會引起異常。處理異常之前必須保留處理器的狀態(tài)。(2)異常的類型:復位RESET:當處理器的復位電平有效時,產生復位異常,程序跳轉到復位異常的處理程序處執(zhí)行;DABT數據中止:若處理器數據訪問指令地址不存在或該地址不允許當前指令訪問,產生異常;FIQ快速中斷請求:當快速中斷請求引腳有效,且CPSR中F=0,產生異常;IRQ外部中斷請求:當外部中斷請求引腳有效,且且CPSR中I=0;PABT指令預取中止:若預取指令地址不存在或該地址不允許當前的指令訪問,存儲器向處理器發(fā)出中止信號,但是只有當取指的指令被執(zhí)行時,才產生異常;UDEF未定義指令:當處理器或協(xié)處理器遇到不能處理的指令時產生該異常,可利用該機制進行軟件仿真;SWI軟件中斷:由執(zhí)行SWI指令產生,用于用戶模式下的程序調用特權操作指令,利用該異常機制實現系統(tǒng)功能調用。(3)異常處理過程(只能在ARM態(tài)執(zhí)行,若進入異常前是Thumb態(tài),進入異常后轉為ARM態(tài),返回后自動進入Thumb):當異常產生時,處理器執(zhí)行以下動作:改變處理器狀態(tài)進入 ARM 態(tài);改變處理器模式進入相應的異常模式;保存返回地址到 LR_
IF
5、ARM狀態(tài)和Thumb狀態(tài)關系:在程序的執(zhí)行過程中,微處理器可以隨時地在兩種工作狀態(tài)之間切換且不影響處理器的工作模式和相應寄存器的內容。Thumb狀態(tài)是ARM狀態(tài)的一個映射,最終也要映射成ARM指令來執(zhí)行,但字長較小,提高空間利用率,低功耗,節(jié)省代碼空間,用于便捷設備,不能用于異常模式;ARM微處理器在開始執(zhí)行代碼時,應該處于ARM態(tài)。進入Thumb態(tài)操作:當操作數寄存器的狀態(tài)位為1時,執(zhí)行BX指令,從ARM態(tài)進入Thumb態(tài)。當處于Thumb態(tài)時發(fā)生異常,則異常返回時,自動切換回到Thumb態(tài)。進入ARM態(tài)操作:當操作數寄存器的狀態(tài)位為0時,執(zhí)行BX指令進入ARM態(tài)。此外當進行異常處理時,把PC指針放入異常模式鏈接寄存器R14中,并從異常向量地址開始執(zhí)行程序,也能切換到ARM態(tài);Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個子集。
四、ARM指令集:
1、ARM編程模型:(1)3級指令流水線技術:幾個指令可以并行執(zhí)行,提高了CPU的運行效率;內部信息流要求通暢流動(為了增加處理器指令流速度,提高運行效率);允許多個操作同時處理,比逐條指令執(zhí)行要快;PC指向正被取指的指令,而非正在執(zhí)行的指令。(2)存儲器模式:大端模式(字數據的高位字節(jié)存儲在低地址中,字數據的低字節(jié)則存放在高地址中)和小端模式。(3)數據和指令類型:ARM采用32位架構;ARM約定:字節(jié)8位,半字16位,字32位;大部分ARM核提供ARM指令集和Thumb指令集(T變種);Jazelle 核支持Java bytecode(J變種,4TEJ),所有指令8位寬,處理器執(zhí)行字存取,一次取4條指令。
2、指令結構:采用馮?諾依曼體系結構,需要把指令從存儲器加載到寄存器,沒有專門的IO指令,故存在load/store結構——從存儲器中讀某個值,操作完后再將其放回存儲器中。指令分類:a.數據處理指令–使用和改變寄存器的值;b.數據傳送指令–把存儲器的值拷貝到寄存器中(load)or 把寄存器中的值拷貝到存儲器中(store);c.控制流指令 :分支、分支和鏈接, 保存返回的地址,以恢復最先的次序、陷入系統(tǒng)代碼。
3、ARM與Thumb指令的關系:(1)Thumb指令的特點:Thumb 指令的長度為 16 位,是針對代碼密度問題而提出的;所有的 Thumb 指令和編程模型與ARM指令和編程模型相對應;Thumb 子程序和 ARM 子程序就可以互相調用;Thumb 指令集中的操作數和指令地址仍為32 位 ;大多數的 Thumb指令是無條件執(zhí)行的,而幾乎所有的 ARM 指令都是有條件執(zhí)行的;Thumb不是一個完整的體系結構,不能指望處理器只執(zhí)行Thumb指令集而不支持ARM指令集。(2)Thumb 指令與ARM 指令的時間效率和空間效率關系 :Thumb 代碼所需的存儲空間約為ARM 代碼的60%~70%;Thumb 代碼使用的指令數比ARM 代碼多約30%~40%;若使用32 位的存儲器,ARM 代碼比Thumb 代碼快約40%;若使用16 位的存儲器,Thumb 代碼比ARM 代碼快約40%~50%;與ARM 代碼相比較,使用Thumb 代碼,存儲器的功耗會降低約30%。
五、典型的ARM核芯片結構:
1、LPC2000系列處理器結構:LPC2000系列微控制器將ARM7TDMI配置為小端模式;內部存儲器包括無等待SRAM和Flash;系統(tǒng)功能包括維持芯片工作的一些基本功能,如系統(tǒng)時鐘、復位等;向量中斷控制器(VIC)可減少中斷響應時間,最多可管理32個中斷請求;外部存儲器控制器(EMC)支持4個BANK的外部SRAM和Flash,每個BANK最大16MB;I2C串行接口為標準I2C總線接口,支持最大速度400KB;具有兩個完全獨立的SPI控制器;具有兩個UART接口,均包含16字節(jié)的接受/發(fā)送FIFO,內置波特率發(fā)生器,UART1具調制解調接口功能;LPC2119/2129/2290/2292包含CAN總線接口;看門狗定時器;通用IO,可受5V電壓,每個IO口可獨立設置為輸入輸出模式;PWMO脈寬調制器,可靈活設置,以適應不同的場合,單邊沿/雙邊沿輸出方式,頻率、占空比可調;實時時鐘,具可編程積存時鐘分頻器,以適應不同的晶振頻率。
2、LPC處理器的啟動過程:一般在32位ARM應用系統(tǒng)中,大多數采用C語言進行軟件編程,但是在運行應用代碼前需要進行系統(tǒng)初始化,常用一匯編文件做啟動代碼,它可以實現異常向量表定義、堆棧初始化、系統(tǒng)變量初始化、地址重映射等操作。
3、時鐘編程方法
4、存儲器映射控制原理:用于控制地址范圍為0x0000-0x0037存儲區(qū)域的重新映射,該區(qū)域存放著異常向量表,發(fā)生異常時,程序總是跳轉到地址為0x0000-0x0037的對應入口處,而實際異常向量表可能存在內部Flash、SRAM、Boot Block,為了讓運行在不同存儲器空間的程序對異常進行控制,可通過存儲器映射控制,將位于不同存儲空間的異常向量表重新映射到固定地址0x0000-0x0037處,以實現異常向量表的來源控制,通過設置存儲器映射控制寄存器的值來實現。流程:內核產生的地址0x0000-0x0037,經過地址轉換器后,映射到物理存儲器的地址空間(0x80000000-0x80000037(外部存儲器)/0x7FFFE000-0x7FFFE037(Boot Block)/0x40000000-0x40000037(內部SRAM)/0x00000000-0x00000037(內部Flash))。
5、存儲器加速模塊MAM
6、外部存儲器控制器(EMC):EMC模塊為AHB系統(tǒng)總線和外部存儲器件之間提供了一個接口;EMC支持4個獨立配置的存儲器組,每個最大支持16MB,支持字節(jié)定位讀取。
7、GPIO:特性:可獨立控制每個GPIO的方向(輸入、輸出模式);可獨立設置每個GPIO的輸出狀態(tài);所有GPIO復位后,默認為輸入態(tài)。IOxPIN[0-31]: GPIO引腳值;IOxDIR[0-31]:
方向控制位,寫入1-輸出,0-輸入; IOxSET[0-31]: 輸出置位,寫入1-高電平,0-無效;IOxCLR[0-31]:寫入1-清零,0-無效。示例:設置P0.0輸出高電平代碼:PINSEL0 &=0xFFFFFFFC;//設置引腳連接模塊,P0.0為GPIO IO0DIR |=0x00000001;IO0SET=0x00000001;
8、UART0
六、實時操作系統(tǒng)概念及操作系統(tǒng)原理:
1、概念:(1)實時系統(tǒng):(指任務要求在限定時間內完成)如果邏輯和時序出現偏差將會引起嚴重后果的系統(tǒng)。(2)軟實時系統(tǒng):系統(tǒng)的宗旨是使各個任務運行得越快越好,并不要求限定某一任務必須在多長時間內完成。(3)硬實時系統(tǒng):各任務不僅要執(zhí)行無誤而且要做到準時。(4)前后臺系統(tǒng):或超循環(huán)系統(tǒng),應用程序是一個無限的循環(huán),循環(huán)中調用相應的函數完成相應的操作,這部分可以看成后臺行為。中斷服務程序處理異步事件,這部分可以看成前臺行為。后臺也可以叫做任務級。前臺也叫中斷級。時間相關性很強的關鍵操作一定是靠中斷服務來保證的。(5)代碼的臨界段:也稱為臨界區(qū),指處理時不可分割的代碼。一旦這部分代碼開始執(zhí)行,則不允許任何中斷打入。為確保臨界段代碼的執(zhí)行,在進入臨界段之前要關中斷,而臨界段代碼執(zhí)行完以后要立即開中斷。(6)資源:任何為任務所占用的實體都可稱為資源。資源可以是輸入輸出設備或一個變量,結構,數組等。(7)共享資源:可以被一個以上任務使用的資源叫做共享資源。為了防止數據被破壞,每個任務在與共享資源打交道時,必須獨占該資源,這叫做互斥。(8)多任務:多任務運行的實現實際上是靠CPU(中央處理單元)在許多任務之間轉換、調度。CPU只有一個,輪番服務于一系列任務中的某一個。多任務運行使CPU的利用率得到最大的發(fā)揮,并使應用程序模塊化。在實時應用中,多任務化的最大特點是,開發(fā)人員可以將很復雜的應用程序層次化。使用多任務,應用程序將更容易設計與維護。(9)任務狀態(tài):典型地、每個任務都是一個無限的循環(huán)。每個任務都處在以下5種狀態(tài)之一的狀態(tài)下,這5種狀態(tài)是休眠態(tài),就緒態(tài)、運行態(tài)、掛起態(tài)(等待某一事件發(fā)生)和被中斷態(tài)。休眠態(tài)相當于該任務駐留在內存中,但并不被多任務內核所調度。就緒意味著該任務已經準備好,可以運行了,但由于該任務的優(yōu)先級比正在運行的任務的優(yōu)先級低,還暫時不能運行。運行態(tài)的任務是指該任務掌握了CPU的控制權,正在運行中。掛起狀態(tài)也可以叫做等待事件態(tài)WAITING,指該任務在等待,等待某一事件的發(fā)生,(例如等待某外設的I/O操作,等待某共享資源由暫不能使用變成能使用狀態(tài),等待定時脈沖的到來或等待超時信號的到來以結束目前的等待,等等)。最后,發(fā)生中斷時,CPU提供相應的中斷服務,原來正在運行的任務暫不能運行,就進入了被中斷狀態(tài)。(10)任務切換:當多任務內核決定運行另外的任務時,它保存正在運行任務的當前狀態(tài),即CPU寄存器中的全部內容。這些內容保存在任務的當前狀況保存區(qū),也就是任務自己的棧區(qū)之中。入棧工作完成以后,就是把下一個將要運行的任務的當前狀況從該任務的棧中重新裝入CPU的寄存器,并開始下一個任務的運行。(11)內核:多任務系統(tǒng)中,內核負責管理各個任務,或者說為每個任務分配CPU時間,并且負責任務之間的通訊。內核提供的基本服務是任務切換。(12)調度:是內核的主要職責之一,就是要決定該輪到哪個任務運行了。多數實時內核是基于優(yōu)先級調度法的。每個任務根據其重要程度的不同被賦予一定的優(yōu)先級。基于優(yōu)先級的調度法指,CPU總是讓處在就緒態(tài)的優(yōu)先級最高的任務先運行。(13)不可剝奪型內核:要求每個任務自我放棄CPU的所有權。異步事件還是由中斷服務來處理。中斷服務可以使一個高優(yōu)先級的任務由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務以后控制權還是回到原來被中斷了的那個任務,直到該任務主動放棄CPU的使用權時,那個高優(yōu)先級的任務才能獲得CPU的使用權。優(yōu)點是響應中斷快;幾乎不需要使用信號量保護共享數據。缺陷在于其響應時間,高優(yōu)先級的任務已經進入就緒態(tài),但還不能運行,要等,也許要等很長時間,直到當前運行著的任務釋放CPU。無法保證系統(tǒng)的實時性。(14)可剝奪型內核:最高優(yōu)先級的任務一旦就緒,總能得到CPU的控制權。當一個運行著的任務使一個比它優(yōu)先級高的任務進入了就緒態(tài),當前任務的CPU使用權就被剝奪了。如果是中斷服務子程序使一個高優(yōu)先級的任務進入就緒態(tài),中斷完成時,中斷了的任務被掛起,優(yōu)先級高的那個任務開始運行。保證了系統(tǒng)的實時性。(15)可重入型函數:可以被一個以上的任務調用,而不必擔心數據的破壞。可重入型函數任何時候都可以被中斷,一段時間以后又可以運行,而相應數據不會丟失。可重入型函數或者只使用局部變量,即變量保存在CPU寄存器中或堆棧中。如果使用全局變量,則要予以保護。(16)時間片輪番調度法:當兩個或兩個以上任務有同樣優(yōu)先級,內核允許一個任務運行事先確定的一段時間,叫做時間額度,然后切換給另一個任務。(17)任務優(yōu)先級:是表示任務被調度的優(yōu)先程度。每個任務都有其優(yōu)先級。任務越重要,賦予的優(yōu)先級應越高。(18)靜態(tài)優(yōu)先級:應用程序執(zhí)行過程中諸任務優(yōu)先級不變,在靜態(tài)優(yōu)先級系統(tǒng)中,諸任務以及它們的時間約束在程序編譯時是已知的。(19)動態(tài)優(yōu)先級:應用程序執(zhí)行過程中,任務的優(yōu)先級是可變的,實時內核應當避免出現優(yōu)先級反轉問題。(20)優(yōu)先級反轉:優(yōu)先級高和優(yōu)先級低的任務在運行時,由于共享資源的占用問題,而出現的優(yōu)先級反轉問題,即在執(zhí)行過程中,優(yōu)先級高的任務反而要等優(yōu)先級低的任務先運行完后,釋放共享資源,才能運行。糾正的方法:提高正在使用共享資源的任務的優(yōu)先級,但耗費CPU時間;內核能自動變換任務的優(yōu)先級,稱優(yōu)先級繼承,但是UCOSII不支持。(21)任務優(yōu)先級分配:單調執(zhí)行率調度法RMS:基于哪個任務執(zhí)行的次數最頻繁,執(zhí)行最頻繁的任務優(yōu)先級最高(22)任務互斥:實現任務間通訊最簡便到辦法是使用共享數據結構,但是必須保證每個任務在處理共享數據時的排它性,以避免競爭和數據的破壞。與共享資源打交道時,使之滿足互斥條件最一般的方法有:關中斷;使用測試并置位指令TAS;禁止做任務切換;利用信號量。(23)信號量:信號量實際上是一種約定機制,用于:控制共享資源的使用權(滿足互斥條件);標志某事件的發(fā)生;使兩個任務的行為同步。注意:信號,只取兩個值0和1的信號量;計數器型,值有多種形式。對信號量只能實施三種操作:初始化(INITIALIZE),也可稱作建立(CREATE);等信號(WAIT)也可稱作掛起(PEND);給信號(SIGNAL)或發(fā)信號(POST)。信號量初始化時要給信號量賦初值,等待信號量的任務表(Waiting list)應清為空。P/V操作:P操作既是減1操作,任務執(zhí)行等待(WAIT)操作,有可能執(zhí)行P操作;V操作既是加1操作,任務以發(fā)信號操作(SIGNAL)釋放信號量。(24)死鎖:也稱作抱死,指兩個任務無限期地互相等待對方控制著的資源。最簡單的防止發(fā)生死鎖的方法是讓每個任務都:先得到全部需要的資源再做下一步的工作;用同樣的順序去申請多個資源;釋放資源時使用相反的順序。(25)同步:可以利用信號量使某任務與中斷服務同步(或者是與另一個任務同步,這兩個任務間沒有數據交換)。單向同步:任務與中斷服務之間/兩任務之間;雙向同步:兩任務之間可以用信號量同步它們的行為,兩個任務需要互相等待對方執(zhí)行,等待自身所需的事件發(fā)生(信號量),同步執(zhí)行。(26)任務間的通訊:有時很需要任務間的或中斷服務與任務間的通訊。任務間信息的傳遞有兩個途徑:通過全程變量或發(fā)消息給另一個任務。用全程變量時,必須保證每個任務或中斷服務程序獨享該變量。中斷服務中保證獨享的唯一辦法是關中斷。如果兩個任務共享某變量,各任務實現獨享該變量的辦法可以是關中斷再開中斷,或使用信號量(如前面提到的那樣)。(27)消息郵箱:通過內核服務可以給任務發(fā)送消息。典型的消息郵箱也稱作交換消息,是用一個指針型變量,通過內核服務,一個任務或一個中斷服務程序可以把一則消息(即一個指針)放到郵箱里去。同樣,一個或多個任務可以通過內核服務接收這則消息。發(fā)送消息的任務和接收消息的任務約定,該指針指向的內容就是那則消息。內核一般提供以下郵箱服務:郵箱內消息的內容初始化,郵箱里最初可以有,也可以沒有消息;將消息放入郵箱(POST);等待有消息進入郵箱(PEND);如果郵箱內有消息,就接受這則消息。如果郵箱里沒有消息,則任務并不被掛起(ACCEPT),用返回代碼表示調用結果,是收到了消息還是沒有收到消息。消息郵箱也可以當作只取兩個值的信號量來用。郵箱里有消息,表示資源可以使用,而空郵箱表示資源已被其它任務占用。(28)消息隊列:消息隊列用于給任務發(fā)消息。消息隊列實際上是郵箱陣列。通常,先進入消息隊列的消息先傳給任務,也就是說,任務先得到的是最先進入消息隊列的消息,即先進先出原則(FIFO)。然而μC/OS-Ⅱ也允許使用后進先出方式(LIFO)。內核提供的消息隊列服務如下:消息隊列初始化。隊列初始化時總是清為空;放一則消息到隊列中去(Post);等待一則消息的到來(Pend);如果隊列中有消息則任務可以得到消息,但如果此時隊列為空,內核并不將該任務掛起(Accept)。如果有消息,則消息從隊列中取走。沒有消息則用特別的返回代碼通知調用者,隊列中沒有消息。
2、任務的組成:代碼、TCB、私有堆棧。一個任務通常是一個無限的循環(huán),絕不會返回的,但可通過調用函數自我刪除,也可建立新任務。
3、OS的內核原理:(1)任務狀態(tài)圖(任務狀態(tài)的切換過程):睡眠態(tài)(DORMANT)指任務駐留在程序空間之中,還沒有交給μC/OS-Ⅱ管理,把任務交給μC/OS-Ⅱ是通過調用下述兩個函數之一:OSTaskCreate()或OSTaskCreateExt()。當任務一旦建立,這個任務就進入就緒態(tài)準備運行。任務的建立可以是在多任務運行開始之前,也可以是動態(tài)地被一個運行著的任務建立。如果一個任務是被另一個任務建立的,而這個任務的優(yōu)先級高于建立它的那個任務,則這個剛剛建立的任務將立即得到CPU的控制權。一個任務可以通過調用OSTaskDel()返回到睡眠態(tài),或通過調用該函數讓另一個任務進入睡眠態(tài)。調用OSStart()可以啟動多任務。OSStart()函數運行進入就緒態(tài)的優(yōu)先級最高的任務。就緒的任務只有當所有優(yōu)先級高于這個任務的任務轉為等待狀態(tài),或者是被刪除了,才能進入運行態(tài)。
正在運行的任務可以通過調用兩個函數之一將自身延遲一段時間,這兩個函數是OSTimeDly()或OSTimeDlyHMSM()。這個任務于是進入等待狀態(tài),等待這段時間過去,下一個優(yōu)先級最高的、并進入了就緒態(tài)的任務立刻被賦予了CPU的控制權。等待的時間過去以后,系統(tǒng)服務函數OSTimeTick()使延遲了的任務進入就緒態(tài)。正在運行的任務期待某一事件的發(fā)生時也要等待,手段是調用以下3個函數之一:OSSemPend(),OSMboxPend(),或OSQPend()。調用后任務進入了等待狀態(tài)(WAITING)。當任務因等待事件被掛起(Pend),下一個優(yōu)先級最高的任務立即得到了CPU的控制權。當事件發(fā)生了,被掛起的任務進入就緒態(tài)。事件發(fā)生的報告可能來自另一個任務,也可能來自中斷服務子程序。正在運行的任務是可以被中斷的,除非該任務將中斷關了,或者μC/OS-Ⅱ將中斷關了。被中斷了的任務就進入了中斷服務態(tài)(ISR)。響應中斷時,正在執(zhí)行的任務被掛起,中斷服務子程序控制了CPU的使用權。中斷服務子程序可能會報告一個或多個事件的發(fā)生,而使一個或多個任務進入就緒態(tài)。在這種情況下,從中斷服務子程序返回之前,μC/OS-Ⅱ要判定,被中斷的任務是否還是就緒態(tài)任務中優(yōu)先級最高的。如果中斷服務子程序使一個優(yōu)先級更高的任務進入了就緒態(tài),則新進入就緒態(tài)的這個優(yōu)先級更高的任務將得以運行,否則原來被中斷了的任務才能繼續(xù)運行。當所有的任務都在等待事件發(fā)生或等待延遲時間結束,μC/OS-Ⅱ執(zhí)行空閑任務(idle task),執(zhí)行OSTaskIdle()函數。(2)局部結構——任務控制塊TCB:一旦任務建立了,任務控制塊OS_TCBs將被賦值。任務控制塊是一個數據結構,當任務的CPU使用權被剝奪時,μC/OS-Ⅱ用它來保存該任務的狀態(tài)。當任務重新得到CPU使用權時,任務控制塊能確保任務從當時被中斷的那一點絲毫不差地繼續(xù)執(zhí)行。實際上,任務狀態(tài)的改變就是修改TCB的過程,OS_TCBs全部駐留在RAM中。任務建立的時候,OS_TCBs就被初始化了。
應用程序中可以有的最多任務數(OS_MAX_TASKS)是在文件OS_CFG.H中定義的。這個最多任務數也是μC/OS-Ⅱ分配給用戶程序的最多任務控制塊OS_TCBs的數目。將OS_MAX_TASKS的數目設置為用戶應用程序實際需要的任務數可以減小RAM的需求量。所有的任務控制塊OS_TCBs都是放在任務控制塊列表數組OSTCBTbl[]中的。μC/OS-Ⅱ分配給系統(tǒng)任務OS_N_SYS_TASKS若干個任務控制塊,供其內部使用。目前,一個用于空閑任務,另一個用于任務統(tǒng)計。在μC/OS-Ⅱ初始化的時候,所有任務控制塊OS_TCBs
被鏈接成單向空任務鏈表。當任務一旦建立,空任務控制塊指針OSTCBFreeList指向的任務控制塊便賦給了該任務,然后OSTCBFreeList的值調整為指向下鏈表中下一個空的任務控制塊。一旦任務被刪除,任務控制塊就還給空任務鏈表。(3)全局結構——就緒表:將任務放入就緒表程序清單: OSRdyGrp |= OSMapTbl[prio >> 3];OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
任務優(yōu)先級的低三位用于確定任務在總就緒表OSRdyTbl[]中的所在位。接下去的三位用于確定是在OSRdyTbl[]數組的第幾個元素。OSMapTbl[]是在ROM中的屏蔽字,用于限制OSRdyTbl[]數組的元素下標在0到7之間。程序清單:從就緒表中刪除一個任務
if((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07])== 0)OSRdyGrp &= ~OSMapTbl[prio >> 3];
程序清單:找出進入就緒態(tài)的優(yōu)先級最高的任務
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];prio =(y << 3)+ x;
以上代碼將就緒任務表數組OSRdyTbl[]中相應元素的相應位清零,而對于OSRdyGrp,只有當被刪除任務所在任務組中全組任務一個都沒有進入就緒態(tài)時,才將相應位清零。算法理解:預先根據結構,先算好屏蔽字,做好準備,再利用二進制的特點,將優(yōu)先級與查表得出的屏蔽字進行邏輯操作,得出xy值,再對就緒表的相應位進行置位或清零操作,完成對就緒表的修改。利用屏蔽字是為了提高查找就緒表的速度。4)任務調度算法 void OSSched(void){
INT8U y;OS_ENTER_CRITICAL();
if((OSLockNesting | OSIntNesting)== 0){
y = OSUnMapTbl[OSRdyGrp];
OSPrioHighRdy =(INT8U)((y << 3)+ OSUnMapTbl[OSRdyTbl[y]]);
if(OSPrioHighRdy!= OSPrioCur)
{
OSTCBHighRdy= TCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++;
OS_TASK_SW();
}
} OS_EXIT_CRITICAL();}
μC/OS-Ⅱ任務調度所花的時間是常數,與應用程序中建立的任務數無關。
4、空閑任務(Idle Task):μC/OS-Ⅱ總是建立一個空閑任務,這個任務在沒有其它任務進入就緒態(tài)時投入運行。空閑任務[OSTaskIdle()]永遠設為最低優(yōu)先級。空閑任務OSTaskIdle()什么也不做,只是在不停地給一個32位的名叫OSIdleCtr的計數器加1,統(tǒng)計任務使用這個計數器以確定現行應用軟件實際消耗的CPU時間。空閑任務不可能被應用軟件刪除,但可以通過時間中斷喚醒其他任務進入就緒態(tài)后,退出空閑任務。
5、統(tǒng)計任務:提供運行時間統(tǒng)計的任務,叫做OSTaskStat(),如果用戶將系統(tǒng)定義常數OS_TASK_STAT_EN設為1,這個任務就會建立。一旦得到了允許,OSTaskStat()每秒鐘運行一次,計算當前的CPU利用率。注意:在調用系統(tǒng)啟動函數OSStart()之前,用戶初始代碼必須先建立一個任務,在這個任務中調用系統(tǒng)統(tǒng)計初始化函數OSStatInit(),然后再建立應用程序中的其它任務。
6、μC/OS-Ⅱ初始化:μC/OS-Ⅱ要求用戶首先調用系統(tǒng)初始化函數OSIint()。OSIint()初始化μC/OS-Ⅱ所有的變量和數據結構。OSInit()建立空閑任務idle task,統(tǒng)計任務OSTaskStat()并且讓其進入就緒態(tài)。以上兩個任務的任務控制塊(OS_TCBs)是用雙向鏈表鏈接在一起的。還初始化了4個空數據結構緩沖區(qū):空任務控制塊緩沖區(qū)、空事件表、空隊列表、空存儲區(qū)。先做好準備,目的是為了保證CPU的運行速度。注意:初始化后數據結構:包括就緒表、優(yōu)先級表、空閑任務和統(tǒng)計任務TCB、及其各自私有堆棧。
4、μC/OS-Ⅱ的啟動:程序清單初始化和啟動μC/OS-Ⅱ: void main(void){
OSInit();/* 初始化uC/OS-II
*/..通過調用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個任務;..OSStart();/* 開始多任務調度!OSStart()永遠不會返回 */}
5、任務數據結構:void YourTask(void *pdata){ for(;;){
/* 用戶代碼 */ 調用μC/OS-Ⅱ的服務例程之一: OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);
OSTimeDly();OSTimeDlyHMSM();/* 用戶代碼 */ } } 或void YourTask(void *pdata){
/* 用戶代碼 */ OSTaskDel(OS_PRIO_SELF);}
6、事件控制塊ECB:一個數據結構(類似TCB),包含了事件本身的定義,如用于信號量的計數器,用于指向郵箱的指針,以及指向消息隊列的指針數組等,還定義了等待該事件的所有任務的列表。分為OSEventGrp/OSEventTbl兩個變量。任務調度算法也和TCB相似。
程序清單:將一個任務插入到事件的等待任務列表中
pevent->OSEventGrp |= OSMapTbl[prio >> 3];pevent->OSEventTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
其中,prio是任務的優(yōu)先級,pevent是指向事件控制塊的指針。該算法的原理:任務優(yōu)先級的最低3位決定了該任務在相應的.OSEventTbl[]中的位置,緊接著的3位則決定了該任務優(yōu)先級在.OSEventTbl[]中的字節(jié)索引。該算法中用到的查找表OSMapTbl[]一般在ROM中實現。(1)在μC/OS-II中,事件控制塊的總數由用戶所需要的信號量、郵箱和消息隊列的總數決定。在調用OSInit()時,所有事件控制塊被鏈接成一個單向鏈表——空閑事件控制塊鏈表。每當建立一個信號量、郵箱或者消息隊列時,就從該鏈表中取出一個空閑事件控制塊,并對它進行初始化。因為信號量、郵箱和消息隊列一旦建立就不能刪除,所以事件控制塊也不能放回到空閑事件控制塊鏈表中。(2)對于事件控制塊進行的一些通用操作包括:初始化一個事件控制塊;使一個任務進入就緒態(tài);使一個任務進入等待該事件的狀態(tài);因為等待超時而使一個任務進入就緒態(tài)。為了避免代碼重復和減短程代碼長度,μC/OS-II將上面的操作用4個系統(tǒng)函數實現,它們是:OSEventWaitListInit(),OSEventTaskRdy(),OSEventWait()和OSEventTO()。
7、μC/OS-II系統(tǒng)多任務的意義:多任務使事件簡單化,任務與任務之間的關系使松耦合而不是緊耦合,每個任務只要考慮當前事件,而不需考慮全局事件,全局事件由操作系統(tǒng)來考慮,利用操作系統(tǒng)的一些通訊機制,將多個任務聯(lián)系起來共同完成一個功能,同時采用多人機制,OS可以同時運行多個應用程序,提高了CPU的使用效率。
8、操作系統(tǒng)在嵌入式系統(tǒng)中的地位:操作系統(tǒng)在嵌入式系統(tǒng)中扮演管理者的角色,主要任務使完成多任務之間的調度和同步,同時也是上層應用軟件和底層硬件的接口,負責全部軟硬件資源的分配和回收、控制與協(xié)調等并發(fā)活動。同時嵌入式實時操作系統(tǒng)提高了系統(tǒng)的可靠性;提高了開發(fā)效率,縮短了開發(fā)周期,嵌入式RTOS充分發(fā)揮了32位CPU的多任務潛力。
9、文件系統(tǒng):(定義)處理文件的操作系統(tǒng)的部分稱為文件系統(tǒng).是操作系統(tǒng)中統(tǒng)一管理信息資源的一種軟件,管理文件的存儲、檢索、更新,提供安全可靠的共享和保護手段,并且方便用戶使用。功能:文件的構造、命名、存取、保護等。(2)基于NAND FLASH的嵌入式文件系統(tǒng):FLASH讀寫的特點:必須以Page為單位進行讀寫;寫之前必須先擦除原有內容;擦除操作必須對Block進行,即一次至少擦除一個Block的內容。針對這種情況,將Flash的一個Page定為1個扇區(qū),將其1個Block,32個扇區(qū)定為一個簇,這樣,簇的容量剛好為512*32=16K,滿足FAT16對簇大小的要求。(3)FLASH文件系統(tǒng)的要求:掉電安全、平均使用、高效垃圾回收、低空間消耗:指文件系統(tǒng)管理結構在FLASH存儲器上的空間消耗,該空間用于FS建立,而不能用于實際數據的存儲,可以提高有用數據的存儲空間。(4)FLASH文件系統(tǒng)的分類:集中管理文件系統(tǒng)、線性文件系統(tǒng)、日志文件系統(tǒng)。(5)幾種開源文件系統(tǒng):TFS(Tiny File System):線性結構的文件系統(tǒng),優(yōu)點:TFS提供了掉電安全機制和垃圾回收機制。需要額外的輔助空間,用于垃圾回收時的文件緩存和過程狀態(tài),如果出現終止,系統(tǒng)根據輔助空間的信息進行文件系統(tǒng)的恢復。缺點:文件的插入、剪切和個性需要較大的運行開銷,即使是很小的修改,也要求將整個文件重寫。JFFS:主要針對NOR型Flash存儲器設計,提供了掉電安全,平均使用等特性,是基于Linux,由于遵循GPL開放源代碼,易實現移植。日志文件系統(tǒng);提供了更好的崩潰、掉電安全保護;jffs2支持對flash的均勻磨損;在扇區(qū)級別上執(zhí)行閃存擦除/寫/讀操作功能較好;文件系統(tǒng)接近滿時,JFFS2 會大大放慢運行速度——垃圾收集。Nand上yaffs文件系統(tǒng)的優(yōu)勢:專門為Nand flash設計的日志文件系統(tǒng);jffs/jffs2不適合大容量的Nand flash;jffs的日志通過jffs_node建立在RAM中,占用RAM空間:對于128MB的Nand大概需要4MB的空間來維護節(jié)點;啟動的時候需要掃描日志節(jié)點,不適合大容量的Nand flash;FAT系統(tǒng)沒有日志。(6)
NAND和NOR——性能比較:NOR和NAND是現在市場上兩種主要的非易失閃存技術。NOR的讀速度比NAND稍快一些;NAND的寫入速度比NOR快很多;NAND的擦除速度遠比NOR的快;大多數寫入操作需要先進行擦除操作;NAND的擦除單元更小,相應的擦除電路更少。接口差別:NOR flash帶有SRAM接口,線性尋址,可以很容易地存取其內部的每一個字節(jié);NAND flash使用復用接口和控制IO多次尋址存取數據;NAND讀和寫操作采用512字節(jié)的塊,這一點有點像硬盤管理此類操作易于取代硬盤等類似的塊設備。容量和成本:NAND flash生產過程更為簡單,成本低;常見的NOR flash為128KB~16MB,而NANDflash通常有8~128MB;NOR主要應用在代碼存儲介質中,NAND適合于數據存儲;NAND在CompactFlash、Secure Digital、PC Cards和MMC存儲卡市場上所占份額最大。可靠性和耐用性:在NAND中每塊的最大擦寫次數是100萬次,而NOR的擦寫次數是10萬次;位交換的問題NAND flash中更突出,需要ECC糾錯;NAND flash中壞塊隨機分布,需要通過軟件標定——產品量產的問題。(7)FAT:FAT32容量:位數,32位;最大簇數目,268,453,456;每簇大小4KB-32KB;最大磁盤容量,2^41(2T)。FAT文件系統(tǒng)基本結構:保留區(qū) Reserved region,存放引導記錄,BIOS信息等;FAT 區(qū),FAT信息列表(12/16/32 bits);根目錄區(qū),目錄信息列表(32 bytes);文件和目錄區(qū),存放簇信息。典型FLASH文件系統(tǒng)的結構:系統(tǒng)記錄-文件分配表-文件登記表-數據區(qū)域。文件系統(tǒng)的操作流程:打開文件OpenOSFile-操作文件ReadOSFile/WriteOSFile-關閉文件CloseOSFile。
10、GUI技術:GUI的定義:Graphics User Interface, 是指計算機與其使用者之間的圖形化對話接口。GUI的主要特征:——Windows,采用窗口界面,每個窗口是用戶或系統(tǒng)的一個工作區(qū)域。一個屏幕上可以有多個窗口。——Icons,采用形象化的圖標或圖符,易于操作者理解與操作。——Menu,采用菜單,可供用戶選擇的功能提示。——Pointing Devices,指鼠標器、觸摸屏等,便于用戶直接對屏幕對象進行操作。嵌入式GUI的特點:體積小;功能強;圖形算法簡潔、快速,占用系統(tǒng)資源少;可靠性高;模塊結構,便于移植和定制。MiniGUI:支持 GB2312 與 BIG5 字集;支持多種格式字體,例如:TrueType、Adobe Type1等;GUI函數(MoveTo、LineTo、FillBox、Rectangle、Circle、TextOut、DrawText..等)。
11、C/OS的性能特點:公開源代碼;可移植性(Portable),絕大部分? C/OS-II的源碼是用移植性很強的ANSI C寫的。和微處理器硬件相關的那部分是用匯編語言寫的。匯編語言寫的部分已經壓到最低限度,使得 C/OS-II便于移植到其他微處理器上。C/OS-II可以在絕大多數8位、16位、32位以至64位微處理器、微控制器、數字信號處理器(DSP)上運行;可固化(ROMable),C/OS-II是為嵌入式應用而設計的,這就意味著,只要讀者有固化手段(C編譯、連接、下載和固化),C/OS-II可以嵌入到讀者的產品中成為產品的一部分;可裁剪(Scalable),可以只使用C/OS-II中應用程序需要的那些系統(tǒng)服務。也就是說某產品可以只使用很少幾個C/OS-II調用,而另一個產品則使用了幾乎所有? C/OS-II的功能,這樣可以減少產品中的C/OS-II所需的存儲器空間(RAM和ROM)。這種可剪裁性是靠條件編譯實現的;占先式(Preemptive);多任務,C/OS-II可以管理64個任務,然而,目前這一版本保留8個給系統(tǒng)。應用程序最多可以有56個任務;可確定性,全部C/OS-II的函數調用與服務的執(zhí)行時間具有可確定性;任務棧,每個任務有自己單獨的棧,C/OS-II允許每個任務有不同的棧空間,以便壓低應用程序對RAM的需求;系統(tǒng)服務,C/OS-II提供很多系統(tǒng)服務,例如郵箱、消息隊列、信號量、塊大小固定的內存的申請與釋放、時間相關函數等;中斷管理,中斷可以使正在執(zhí)行的任務暫時掛起,如果優(yōu)先級更高的任務被該中斷喚醒,則高優(yōu)先級的任務在中斷嵌套全部退出后立即執(zhí)行,中斷嵌套層數可達255層;穩(wěn)定性與可靠性。相關系統(tǒng)函數:
OS_ENTER_CRITICAL()進入臨界區(qū),關中斷 OSTaskResume(INT8U prio);恢復任務 OS_EXIT_CRITICAL()退出臨界區(qū),開中斷 OSTaskQurery();獲得有關任務的信息 OSInit()系統(tǒng)初始化 OSTaskSuspend(INT8U prio);掛起任務,只能通過OSStart()可啟動多任務,運行進入就緒態(tài)的優(yōu)先級最高的任務 OSTaskResume()來恢復 OSIntEnter()時間: OSIntExit()OSTimeDly();任務延時一定的時鐘節(jié)拍 OSSchedLock()給任務調度上鎖 OSTimeDlyHMSM();任務延時一定毫秒、秒、分、小時 OSSchedUnlock()給任務調度解鎖 OSTimeDlyResume();取消延時,若原先任務調用延時函數,OSTaskIdle()該函數可讓任務進入就緒態(tài),而不必等到等待期滿 任務: OSTimeGet()/OSTimeSet();系統(tǒng)時鐘獲取和設置 OSTaskDel(INT8U prio);非空閑任務刪除,使被刪除任務返回OSTimeTick();時鐘節(jié)拍函數 并處于休眠態(tài),釋放TCB 信號量 OSTaskCreat(*task)(void *pd), void *pdata, OS_STK *ptos, OSSemCreat(void *addr, INT32U nblks ,INT32U blksize, INT8U INT8U prio);建立任務4個參數,不能由中斷服務來建立任務 *err);建立一個信號量 OSTaskCreatExt();上述的擴展版,更為靈活,9個參數 OSSemPend();等待一個信號量 OSTaskChangPrio()改變任務優(yōu)先級,不改變任務狀態(tài) OSSemPost();發(fā)送一個信號量
OSSemAcccept();無等待地請求一個信號量,若信號量暫時無OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata)效,也可以讓任務簡單返回而不是進入睡眠狀態(tài) 消息隊列 OSSemQurery();查詢一個信號量的當前狀態(tài) OSQCreat(); 郵箱(函數意義同上)OSQPost();先進先出原則 OSMBoxCreat(void *msg)OSQPend()OSMBoxPost(OS_EVENT *pevent, void *msg)
OSQPostFront();后進先出原則 OSMBoxAcccept(OS_EVENT *pevent)
OSQFlush();清空一個消息隊列 OSMBoxPend(OS_EVENT *pevent, INT16U timeout, int8u OSQAcccept();
OSQQurery()*err);
與FLASH存儲器的接口函數:
塊擦除:unsignde char Erase_Cluster(unsigned int cluster)頁寫入:int WritePage(unsigned int block, unsigned int page, unsigned char *pPage)頁讀出:Void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)文件系統(tǒng)相關接口函數:
初始化文件系統(tǒng):Void initOSFile(char filename[],U32 OpenMode)讀文件到緩沖區(qū):U32ReadOSFile(FILE *pfile,U8 *Read Buffer, U32 n Readbyte)把緩沖區(qū)內容寫入文件:U32WriteOSFile(FILE *pfile,U8 *Write Buffer, U32 n Writebyte)關閉文件,釋放緩沖區(qū):Void CloseOSFile(FILE *pfile)常見API函數: 數據隊列:
QueueCreat();建立數據隊列 QueueSize();獲取隊列共可以存儲數據的數目 QueueWriteFront();先進先出方式發(fā)送數據 串口驅動: QueueWrite();以后進先出方式發(fā)送數據 UART0Init();初始化UART0 QueueRead();獲取隊列中的數據 UART0Putch();發(fā)送一個字節(jié) QueueFlush();清空隊列 UART0Write();發(fā)送多個字節(jié) QueueNData();獲取隊列中已存儲的數據的數目 UART0Getch();接受一個字節(jié) 調制解調器模塊
I2C: ModemInit();初始化
GetModemState();獲取Modem狀態(tài) I2CInit();
I2CWrite();
I2CRead();
SPI: ModemWrite();通過Modem發(fā)送多個字節(jié)數據
ModemGetch();從Modem獲取一個字節(jié)數據 SPIInit();初始化 ModemDiaUp();通過Modem撥號 GetSPI Flag();獲取SPI狀態(tài) ModemDiaDown();掛斷Modem SPIStart();開始訪問SPI SPIRW();通過SPI發(fā)送并接受一個數據
SPIEND();訪問SPI結束
為了保證系統(tǒng)實時性,UCOII采用了哪些策略?答:占先式內核、準備工作、就緒表機制。
2、你認為設計嵌入式操作系統(tǒng)對硬件是否有要求?硬件支持軟件,如果CPU,沒有定時器,OS時間片管理就無法實現;Linux的虛擬內存功能,ARM上沒有該存儲器,就無法運行Linux。
3、UCOSII操作系統(tǒng)的就緒表用何種機制保證其實時性不受任務個數的限制?UCOSII是占先式實時多任務內核,優(yōu)先級最高的任務準備就緒則擁有CPU的所有權,開始投入運行;不支持時間片輪轉法,每個任務優(yōu)先級是唯一的,查找準備就緒的最高優(yōu)先級的任務并執(zhí)行上下文切換;UCOSII任務調度所花的時間為常數,與應用程序中建立的任務數無關。
消息機制對于多任務系統(tǒng)的意義?使兩個任務獨立性增強,耦合比較松散。P(s){if(s<1)wait();s--}
V(s){s++;} 嵌入式系統(tǒng)的軟/硬件框架:硬件層、驅動層、OS層、中間層和應用層。
第五篇:嵌入式期末復習總結整理
《嵌入式整理提綱》——YOYO左轉
題型:
1、選擇題:20分
2、填空題:20分
3、判斷題:8分
4、簡答題:16分
5、程序分析題:20分
6、編程題16分
第一章
1、嵌入式系統(tǒng)的定義:
根據IEEE的定義,嵌入式系統(tǒng)是“控制、監(jiān)視或者輔助設備、機器和車間運行的裝置”。國內定義:以應用為中心,以計算機技術為基礎,軟硬件可裁,適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。
2、嵌入式系統(tǒng)的組成:
嵌入式系統(tǒng)裝置由嵌入式計算機系統(tǒng)和執(zhí)行裝置組成。嵌入式計算機系統(tǒng)由硬件層、中間層、系統(tǒng)軟件層和應用軟件層組成。(分層結構)
3、立即數(第二操作數)合法性,選擇題:將一個32位數右移偶數位可以得到小于255的數為合法,否則為不合法。例如:
0x6a0=0000 0000 0000 0000 0000 0110 1010 0000 右移4位==> 0000 0000 0000 0000 0000 0000 0110 1010 = 0x6a 小于255,所以合法 0x1a600=0000 0000 0000 0001 1010 0110 0000 0000 無論右移多少偶數位,所得的數仍然大于255,所以不合法
0x16c00=0000 0000 0000 0001 0110 1100 0000 0000 右移10位==> 0000 0000 0000 0000 0000 0000 0101 1011 =0x5b小于255,所以合法
4、全稱:
AMBA: Advanced Microcontroller Bus Architecture 高級微控制器總線 ARM: Advanced RISC Machine
CISC: Complex Instruction Set Computer復雜指令集系統(tǒng) RISC: Reduced Instruction Set Computer精簡指令集系統(tǒng) RTOS: Real-time Operation System 實時多任務操作系統(tǒng) FAT: File Allocation Table 文件分配表系統(tǒng)
UCOS: Micro Controller Operation System 微控制器操作系統(tǒng)
片上系統(tǒng):System On Chip,SOC 知識產權核:Intellectual Property Core,IP Core IP軟核:Soft IP Core IP硬核:Hard IP Core IP固核:Firm IP Core
5、嵌入式微處理器的體系結構可以采用馮*諾依曼體系結構或哈佛體系結構;指令系統(tǒng)可以選用精簡指令集系統(tǒng)RISC(Reduced Instruction Set Computer)和復雜指令集系統(tǒng) 《嵌入式整理提綱》——YOYO左轉
CISC(Complex Instruction Set Computer)。
6、Cache是一種容量小、速度快的存儲器陣列,可分為數據Cache、指令Cache或混合Cache。
7、硬件層和軟件層之間為中間層,也稱為硬件抽象層(Hardware Abstract Layer,HAL)或板級支持包(Board Support Package,BSP)
8、一般可以將嵌入式處理器分為4類:嵌入式微處理器MPU、嵌入式微控制器MCU、嵌入式DSP處理器和嵌入式片上系統(tǒng)SOC。
9、DSP處理器是專門用于信號處理方面的處理器。在數字濾波、FFT、頻譜分析等領域獲得了大規(guī)模應用。
10、硬實時系統(tǒng)和軟實時系統(tǒng)的實現區(qū)別主要是在選擇調度算法上。選擇基于優(yōu)先級調度的算法足以滿足軟實時系統(tǒng)的需求,而且可以提供高速的響應和大的系統(tǒng)吞吐量;而對硬實時系統(tǒng)來說,需要使用的算法就應該是調度方式簡單,反應速度快的實時調度算法。
第二章
1、馮*諾依曼體系結構:程序和數據公用一個存儲空間,程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置。
哈佛體系結構:是一種將程序指令存儲和數據存儲分開的體系結構,兩者都獨立編址。
2、復雜指令集計算機CISC和精簡指令集計算機RISC
3、對于多于一個字節(jié)類型的數據,在存儲器中有2種存放方式:
小端字節(jié)順序存儲法:低字節(jié)數據存放在內存低地址處,高字節(jié)數據存放在內存高地址處; 大端字節(jié)順序存儲法:高字節(jié)數據存放在內存低地址處,低字節(jié)數據存放在內存高地址處。
《嵌入式整理提綱》——YOYO左轉
4、無操作系統(tǒng)的嵌入式軟件實現方式:循環(huán)輪轉和前后臺系統(tǒng)。循環(huán)輪轉方式:
優(yōu)點:簡單、直觀、開銷小、可預測;
缺點:過于簡單,無法處理異步事件,缺乏并發(fā)處理能力。前后臺系統(tǒng):在循環(huán)輪轉方式的基礎上,增加了中斷處理功能。
5、嵌入式系統(tǒng)按響應時間的敏感程度可分為實時操作系統(tǒng)和非實時操作系統(tǒng)。實時操作系統(tǒng)可分成硬實時系統(tǒng)和軟實時系統(tǒng)。
6、嵌入式操作系統(tǒng)的幾個重要概念(書P42 了解)
7、免費型實時操作系統(tǒng):嵌入式Linux和uC/OS。
第三章
1、ARM(Advanced RISC Machine)是一種32位微處理器體系結構。
版本ARMv1:ARM1 版本ARMv2:ARM2、ARM3
2、PC的值:當前指令地址+8
3、指令集可以是以下任一種
bits 長(ARM狀態(tài))16 bits 長(Thumb 狀態(tài))
4、進入Thumb狀態(tài):當操作數寄存器的狀態(tài)位為1時,執(zhí)行BX指令,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài);
進入ARM狀態(tài):當操作數寄存器的狀態(tài)位為0時,執(zhí)行BX指令,使微處理器從Thumb狀態(tài)切換到ARM狀態(tài);
5、ARM寄存器組織(P76-P80 了解)
6、ARM處理器支持7種運行模式
用戶模式(特權模式)
快速中斷模式 外部中斷模式
管理模式
數據訪問終止模式
系統(tǒng)模式(特權模式)
《嵌入式整理提綱》——YOYO左轉
未定義指令中止模式
7、異常發(fā)生時,ARM對異常作出的響應:
①保存返回地址到 LR_
8、異常優(yōu)先級:復位(最高)、未定義指令(最低)
9、掌握ARM指令(課本P86)
10、ARM指令的尋址方式7種(課本P89重點掌握)
11、C語言與匯編語言混合編程(課本P101,PPT重點)
12、Bootloader的功能:
Bootloader是操作系統(tǒng)內核運行之前的一段小程序。通過這段小程序,初始化最基本的硬件設備并建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境。Bootloader包含兩個階段,階段一即Boot階段具有引導功能,初始化硬件配置,通常用匯編語言編寫;階段二即Load階段完成加載功能,即將操作系統(tǒng)映像文件從ROM中加載到RAM,并將控制權交給操作系統(tǒng),通常用C語言編寫。
第四章
1、uC/OS :Micro Controller Operation System 微控制器操作系統(tǒng)
2、uC/OS-II主要特點:公開源代碼、可移植性好、可固化、可剪裁、搶占式內核、多任務、可確定性、任務棧、穩(wěn)定性與可靠性。(了解)
3、uC/OS-II中一個任務叫一個線程;其管理任務達64個,用戶可用有56個;ID號越大,等級數越低;uC/OS-II總是運行進入就緒態(tài)優(yōu)先級最高的任務。
4、任務調度(課本P120-123重點)
5、uC/OS-II的初始化函數編寫 OSInit()
6、uC/OS-II的任務通信機制(P130-P132)
uC/OS-II定義了一個事件控制塊ECB來進行任務間的信號傳遞; uC/OS-II提供了3種任務通信機制:信號量、郵箱、消息隊列。
7、uCOS-II移植的基本要求:
1)處理器的C編譯器能產生可重入代碼 2)在程序中可以打開或關閉中斷
3)處理器支持中斷,并且能產生定時中斷 4)處理器支持硬件堆棧
5)處理器有將堆棧指針和入棧、出棧的指令
8、可重入式函數:指一段代碼可用被多個任務同時調用,而不必擔心會破壞數據。
9、堆棧增長方向設置:
OS_STK_GROWTH為0表示堆棧從下往上增長; OS_STK_GROWTH為1表示堆棧從上往下增長;
《嵌入式整理提綱》——YOYO左轉
第五章
1、三星公司推出S3C2410A處理器,基于ARM920T,采用高級微控制器總線新型總線結構。
2、S3C2410A處理器內核供電1.8V/2V、外存儲器和外部I/O供電為3.3V;4通道DMA;3通道UART;117個通用I/O口和24通道外部中斷源。
3、給出晶振,算CPU時鐘,有公式(書本P146,找例題做)
fclk?fin??MDIV?8??PDIV?2??2SDIV
例如:外部晶振為12MHz MPLLCON=0x62 02 2 其中MDIV=0x62=98,PDIV=0x02=2,SDIV=0x2=2 fclk?12M*(98?8)(2?2)*22?12M*1064*4?79.5MHz
4、S3C2410A處理器啟動2級引導方式(書本P147 了解)
5、存儲器系統(tǒng)的層次,設備從上而下,異常變得速度更慢,訪問頻率更小,容量更大,并且每個字節(jié)的造價也更加便宜。(書本 P148)
6、S3C2410A存儲系統(tǒng)特征(書本P151 了解)
第六章
1、建立文件系統(tǒng)(P197-201)
2、根據32字節(jié)目錄項結構,判斷是目錄還是文件,是文件的話,寫出文件名(包括后綴XXX.XX)
其中從高位數,第12字節(jié)中的bit4是目錄,bit5是文件(相應位置1就為什么)
其中前8字節(jié)為文件名,第9到第11字節(jié)為文件后綴,記得后綴前加點。
簡答題
(一)兩種無操作系統(tǒng)的嵌入式軟件體系結構及其特點:
第一種是循環(huán)輪轉方式,優(yōu)點是簡單,直觀,開銷小,可預測,缺點是過于簡單,缺乏并行處理異步事件的能力。
第二種是前后臺方式,前臺是中斷服務程序,負責處理異步事件,后臺是無限循環(huán),負責軟 《嵌入式整理提綱》——YOYO左轉
硬件資源的分配、管理以及任務的調度。前后臺通過同步信號或數據進行交互。
(二)嵌入式應用軟件的開發(fā)方式:
在宿主機上建立開發(fā)環(huán)境,進行應用程序編碼和交叉編譯,然后在宿主機和目標機之間建立連接,將應用程序下載到目標機上進行交叉調試。經過調試和優(yōu)化,最后將應用程序固化到目標機中實際運行。
(三)RISC體系結構的特點: ①一個大而統(tǒng)一的寄存器文件
②Load/Store結構,數據處理的操作只針對寄存器的內容,而不是直接對存儲器進行操作。③簡單的尋址模式,所有裝載/保存的地址都只由寄存器內容和指令域決定。④統(tǒng)一和固定長度的指令域,簡化了指令的譯碼。⑤使用流水線降低指令尋址周期。
(四)異常發(fā)生時,ARM對異常作出的響應: ①保存返回地址到 LR_
(五)Bootloader的功能:
Bootloader是操作系統(tǒng)內核運行之前的一段小程序。通過這段小程序,初始化最基本的硬件設備并建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境。Bootloader包含兩個階段,階段一即Boot階段具有引導功能,初始化硬件配置,通常用匯編語言編寫;階段二即Load階段完成加載功能,即將操作系統(tǒng)映像文件從ROM中加載到RAM,并將控制權交給操作系統(tǒng),通常用C語言編寫。
(六)Nand Flash和Nor Flash在性能上的區(qū)別: 1)NOR的讀速度比NAND稍快一些 2)NAND的寫入速度比NOR快很多。《嵌入式整理提綱》——YOYO左轉
3)NAND的4ms擦除速度遠比NOR的5s快。4)大多數寫入操作需要先進行擦除操作。
5)NAND的擦除單元更小,相應的擦除電路更少。
(七)可剝奪和任務切換的概念:
任務切換:當多任務內核決定運行另外的任務時,它將任務的當前狀態(tài),即CPU寄存器中的全部內容,保存在任務的堆棧中。入棧工作完成以后,把將要運行的任務的當前狀況從該任務的棧中重新裝入CPU的寄存器,并開始下一個任務的運行。
可剝奪:CPU總是運行就緒條件下優(yōu)先級最高的任務。
(八)uCOS-II移植的基本要求:
1)處理器的C編譯器能產生可重入代碼 2)在程序中可以打開或關閉中斷
3)處理器支持中斷,并且能產生定時中斷 4)處理器支持硬件堆棧
5)處理器有堆棧指針和入棧、出棧的指令
編程:
1、流水燈;
2、串口;
3、信號量;
4、Nand Flash 《嵌入式整理提綱》——YOYO左轉
#include
OS_STK
static void App1(void *pdata);static void App2(void *pdata);static void printf_task_info(INT8U i);
void main(int argc, char *argv[]){
}
void App1(void *pdata){
pdata=pdata;{
OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“this is app1, prio=%un”,OSPrioCur);
while(TRUE)OSInit();
/* Initialize “uC/OS-II”*/ OSTaskCreate(App1,NULL,(OS_STK *)&App1Stk[TASK_STK_SIZE-1],(INT8U)10);//任務1等級為10 NULL,(OS_STK *)&App2Stk[TASK_STK_SIZE-1],(INT8U)5);//任務2的等級為5,比任務1高 App1Stk[TASK_STK_SIZE];OS_STK
App2Stk[TASK_STK_SIZE];
OSTaskCreate(App2,OSStart();
/* Start multitasking */
OSTimeDlyHMSM(0, 0, 3, 0);
/* waiting for 3s */
} }
void App2(void *pdata){
INT8U i;INT8U err;INT8U pname[10]=“task one”;pdata=pdata;{ OS_Printf(“at time %d:n”,(INT8U)(OSTime/100));
while(TRUE)
《嵌入式整理提綱》——YOYO左轉
}
OS_Printf(“this is app2, prio=%un”,OSPrioCur);OSTimeDlyHMSM(0, 0, 4, 0);
OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“set name then suspend task onen”);OSTaskSuspend(10);OSTimeDlyHMSM(0, 0, 4, 0);
OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“Resume the task onenn”);OSTaskResume(10);OSTimeDlyHMSM(0, 0, 4, 0);OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“Delete the task onenn”);if(i=OSTaskDel(10)!= 0){
} getchar();printf(“OSTaskDel()err, the err NO is %dn”,i);return;
}