第一篇:學習嵌入式Linux系統的筆記和體會
學習嵌入式Linux系統的筆記和體會
一個典型的桌面Linux系統包括3個主要的軟件層---linux內核、C庫和應用程序代碼。
內核是唯一可以完全控制硬件的層,內核驅動程序代表應用程序與硬件之間進行會話。內核之上是C庫,負責把POSIX API轉換為內核可以識別的形式,然后調用內核,從應用程序向內核傳遞參數。應用程序依靠驅動內核來完成特定的任務。
在設計嵌入式應用的時候,可以不按照這種層次,應用程序越過C庫直接和內核會話,或者把應用和內核捆綁在一起,甚至可以把應用寫為內核的一個線程,在內核中運行,雖然這樣在移植上帶來了困難,但考慮嵌入式系統對尺寸要求小的特點,是完全可行的。不過我們使用三層軟件結構的模式來學習嵌入式linux將會是我們認識更清晰,簡單可行并使應用具有彈性。
快速入門
最簡單的建立嵌入式Linux應用的方法就是從我們使用的桌面Linux入手,安裝一個喜愛的版本,把我們的某個應用作為初始化的一部分,框架就算完成了。
當然,嵌入式linux應用遠比我們的桌面版本功能簡單專一,它也許就是一個用于足彩的終端機,或是一個數碼音頻播放器,這些系統除了使用嵌入式CPU外,僅僅再需要一個串口,網口等少量的輸入輸出接口就可以完成它們特定的應用了。
在軟件上,它可以按照三層的概念由內核裝載器,定制的內核和較少的為特定任務設計的靜態連接的應用程序組成。之所以使用靜態連接的應用程序,是因為少量的靜態連接程序所要的存儲空間,比同樣數量的動態連接的程序所占的空間小,這個平衡點需要我們在實際開發中去獲取。也許你正在設計的是個PDA,它的應用程序較多,那么你很可能就要使用動態連接程序來減少存儲空間。在你的/bin或者/sbin目錄下,用廠列表看看bash,ifconfig,vi...,也許只用幾十K,當你運行 ldd /bin/bash 時,你會看到它們都和好幾個庫文件相連。好了,這樣看來,我們得把PC想像成一個嵌入式硬件平臺,再重新制作一個特定功能的嵌入式linux。
基礎知識
再進行實際操作之前,先來搞清楚幾個基礎知識。
內核裝載器Loader,它的作用是把內核從外部存儲器,移動到內存中。它只作這個事情,一旦完成了調入內核的工作,Loader就跳轉到內核位置開始執行。不同架構有不同的 Loader,在x86結構的PC上,通常使用的loader有LILO,GRUB,syslinux,syslinux在嵌入式linux中也同樣工作。其他非x86架構的應用中,你必須使用專門的loader,或者自己編寫loader來裝入內核。也有不使用loader的情況,系統加電以后,內核直接從燒錄有映象的Flash上開始執行。
內核,一旦內核開始執行,它將通過驅動程序初始化所有硬件,這可以從我們的pc機監視器的輸出看出來,每個驅動程序都打印一些有關它的信息。初始化完成后,計算機就準備運行嵌入式應用。也許一個,也許是多個應用程序組成了嵌入式應用,但通常首先調用的是init(通過loader 向核心傳入init=/program 可以定制首先運行的程序)。桌面linux中,init會讀取/etc/inittab文件,來決定執行級別和哪些腳本和命令。嵌入式應用中,可以根據實際的情況決定是否使用標準的init執行方式,也許這個init是個靜態程序,它能夠完成我們的嵌入應用的特定任務,那完全不用考慮inittab了。
initrd文件系統,initrd以一種把內核從存儲介質裝入到內存的相同的機制來裝入一個小型文件系統。這個文件系統最好是以壓縮的方式存儲在介質上的,解壓縮到RAM盤上。通過使用initrd,包含有核心驅動和啟動腳本的小文件系統,就可以直接從介質上和內核一起啟動起來,內核屆壓縮這個文件系統,并執行這個文件系統上叫做/linuxrc的腳本文件,這個腳本通常會把啟動過程中所需要的驅動程序裝入。腳本退出以后,initrd文件系統也卸下了,啟動過程進入真正初始化過程。對于嵌入式來講,可以將需要的應用軟件都運行在這個initrd文件系統上,只要/linxrc文件不結束,內核啟動過程的其他部分就不會繼續。
做個試驗:
cp /boot/initrd-2.4.20.img /tmp
cd /tmp
mv initrd-2.4.2-.img initrd.img.gz
gunzip initrd.img.gz
mount-o loop initrd.img /mnt
cd /mnt
ls
cat linuxrc 可以看到里面執行了加載了兩個模塊的操作,你在啟動linxu的時候會看見屏幕打印信息。
入門試驗,制作一個簡單的應用
我們使用一張軟盤啟動一臺假象的只有一個串口,鍵盤輸入,顯示輸出的x86架構的linux系統,執行的特定應用就是運行minicom,通過串口撥號。需要軟件: minicom-xx.src.tar.gz 和 syslinux-xx.tar.gz,xx代表版本號,開始之前,在主目錄建立一個目錄,來釋放這兩個軟件包:
cd
mkdir-p project/minilinux
cd project/minilinux
tar zxvf minicom-xx.src.tar.gz
tar zxvf syslinux-xx.tar.gz1、裁減linux內核(需要系統安裝內核文件包)
配置內核的時候,我們需要選擇這些:摸塊編入內核,386處理器、物理內存off、支持ELF、標準PC軟盤、支持RAM盤(4096)、支持 initial RAM disk(initrd)、虛你終端、虛擬終端控制臺、標準串口、ext2文件系統、控制臺驅動,VGA text console、DOS FAT、MSDOS文件系統,其他的都可以不要,這樣內核編出來較小。
步驟:
cd /usr/src/linux
make mrproper
make xconfig
make dep && make bzImage
得到 /usr/src/linux/arch/i386/boot/目錄的內核文件bzIamge。
2、編譯一個靜態的minicom,把它作為將來的linuxrc
cd minicom-xx/src
vi Makefile
修改下面這行
minicom: $(minicom_OBJECTS)$(minicom_DEPENDENCIES)
rm-f minicom 下面的行加上-static,連接為靜態程序
(LINK)-static $(minicom_LDFLAGS)$(minicom_OBJECTS)$(minicom_LDADD)$(LIBS)
vi minicom.c
找到 if(real_uid==0 && dosetup==0)刪除這個判斷條件語句,主要是用于權限判斷的,因為這個嵌入應用不關注權限問題,否則會出錯。
make
得到可執行程序,用ldd 檢查一下是不是靜態程序。
3、準備initrd壓縮文件image.gz
dd if=/dev/zero of=image bs=1k count=4096
losetup /dev/loop0 image
mke2fs-m 0 /dev/loop0
mounmt-t ext2 /dev/loop0 /mnt/
mkdir-p /mnt/dev
mkdir-p /mnt/usr/share/terminfo/l/
cd /dev
cp-a consle null tty tty0 zero mem /mnt/dev
cp-P /usr/share/terminfo/l/linux /mnt/usr/share/terminfo/l/linux
cp ~/project/minilinux/mincom/src/minicom /mnt/linuxrc
umount /mnt
losetup-d /dev/loop0
sync
gzip-9 image4、制作軟盤引導,并拷貝文件 bzimage image.gz 到軟盤
A.使用grub
fdformat /dev/fd0
mke2fs /dev/fd0
mount /mnt/fd0 /mnt/floppy
mkdir-p /mnt/floppy/boot/grub
cp /boot/grub/stage1 /boot/grub/stage2 /mnt/floppy/boot/grub
執行 grub,在軟盤上創建引導
grub > root(fd0)
grub > setup(fd0)
grub > quit
cp /usr/src/linux/arch/i386/boot/bzImge /mnt/floppy
cp ~/porject/minilinux/image.gz /mnt/floppy
編輯 /mnt/floppy/boot/grub/grub.conf
default =0
timeout-=10
title minilinux
root(fd0)
kernel /bzImage
initrd /image.gz
卸下軟盤
umount /mnt/floppy
B.使用syslinux
fdformat /dev/fd0
mkfs.msdos /dev/fd0
mount-t msdos /dev/fd0 /mnt/floppy
cp /usr/src/linux/arch/i386/boot/bzImge /mnt/floppy
cp ~/porject/minilinux/image.gz /mnt/floppy
cp syslinux-xx/ldlinxu.sys /mnt/floppy
cat > /mnt/floppy/syslinux.cfg
LABEL linux
KERNEL bzimage
APPEND initrd=image.gz
umont /mnt/floppy
syslinux-xx/syslinux /dev/fd0
sync5、用軟盤啟動計算機,如果幸運,minicom的運行畫面出現在屏幕上。
到此,我們的單應用嵌入式linux做好了,但它還很簡陋,沒有什么實際用途,但通過這個實驗,可以了解嵌入式系統的大致結構和開發過程。在進行實際的嵌入式開發時,通常要在PC機上借助嵌入式linux開發工具包,如:uclinux,bluecat等,對相應的硬件平臺(目標機)進行軟件編寫編譯,調試成功后,將內核及應用程序寫入到目標機的存儲器中,從而完成整個應用。
第二篇:嵌入式linu學習心得
嵌入式Linux學習心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當前的目錄
cd:改變當前操作目錄cd /直接跳到根目錄 cd..回到上一級目錄 cat: 打印顯示當前文件的內容信息
mkdir:創建目錄
fdisk: 查看硬盤分區信息,-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、各系統目錄的功能
drw—r—w--:d代表是目錄,drw代表當前用戶的權限,r代表組用戶的權限,w代表其它用戶的權限。x代表有執行權限。
/boot/gruff.conf: 啟動引導程序
/dev:brw—rw--:b代表是塊設備。Linux設備有三種,塊設備(b開頭)、字符設備(c開頭)、網絡設備。had代表第一個硬盤,hdb代表第二個硬盤。Hdb2代表第二塊硬盤的第二個分區。3,67代表主設備為3,從設備為67./etc:存放的是系統的配置文件。Inittab文件存放不同啟動方式下必須啟動的進程。Inittab文件中有6個啟動level,wait中對應著6個level的目錄,respawn代表當一個進程被意外終止了,但會自動啟動的進程,如守護進程。rc.d目錄中存放了一個rc.sysinit文件,里面存放系統初始化配置信息。/etc還有一個vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫文件,后綴為so的文件代表動態鏈接庫。
/lost+found:系統意外終止,存放一些可以找回的文件。
/mnt:掛載外部設備,如掛載光驅:mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統中,要查看windows中D盤的文件,首先應該將D盤的文件映射過來,mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應用程序
/proc:是系統運行的映射,比較重要。里面的文件數字代表進程號。每個進程號目錄下包含進程的基本信息。還有其他信息,如cpuinfo等,內核支持的文件系統filesystem等。系統支持的中斷interrupts,iomen代表內存分配情況。ioport存放IO端口號。還有分區信息,modole信息,狀態信息,版本信息
對于Linux的設備驅動程序,有兩種加載模式,一種是直接加載進linux內核,一種是以模塊的方式加載到內核。
/sbin: 系統管理的一些工具。如poweroff關機工具。
/usr: 安裝系統時很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫文件,src包含Linux2.4的內核源碼
/var:存放是臨時變量
3、
第三篇:學習嵌入式系統感言
個人覺得培訓學校都是差不多,所學的內容都是一樣的。您不妨自己找幾個學校的課程對比下,你就知道大同小異了,培訓主要就是C、Linux和ARM課程。
我原來也想去培訓,可是家里條件不允許,我沒有那么多錢,后來我只好自學了,不懂的就上論壇問,我自己學了四個月,差不多也入門了,現在也是在做嵌入式開發。想想我自己走過的路,其實我發現,其實嵌入式并沒有想象的難,關鍵是要花時間去學,要堅持幾個月就可以了。
如果樓主還有時間,不妨自己學下。實在覺得困難的話再去培訓吧。當然,樓主如果家里經濟不錯的話,也可以去培訓吧。但是如果真的下決心要學的話,其實可以去找找自學的方法。
我把我前階段看到的一篇一個專科生如何自學嵌入式,里面有介紹了他的學習方法和學習過程的文章,給樓主看看,希望對你有幫助。
專科生學嵌入式到找到工作的前前后后--學習的榜樣
先做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說出來獻丑了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不到希望,我就退學了。
退學后我也迷茫,大專都沒有畢業,我真的不知道我能干什么,我在糾結著我能做什么。所以輟學后我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘做技術的,可是處處碰壁。
一次偶然的機會,我才聽到嵌入式這個行業。那天我去新華書店,在計算機分類那邊想找本書學習。后來有個女孩子走過來,問我是不是讀計算機的,有沒有興趣學習嵌入式,然后給我介紹了一下嵌入式現在的火熱情況,告訴我學嵌入式多么的有前景,給我了一份傳單,嵌入式培訓的廣告。聽了她的介紹,我心里癢癢的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
回家后,我就上網查了下嵌入式,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相對比較高。我就下決心想學嵌入式了。于是我去找嵌入式培訓的相關信息,說真的,我也很迷茫,我不知道培訓是否真的能像他們宣傳的那樣好,所以我就想了解一段時間再做打算。
后來,我在百度知道看到一篇讓我很鼓舞的文章《如何學習嵌入式》,是一個嵌入式高手介紹沒有基礎的朋友怎么自學入門學嵌入式,文章寫的很好,包含了如何學習,該怎么學習。他提到一個方法就是看視頻,因為看書實在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
我在想,為什么別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會我再去培訓。
主意一定,我就去搜索嵌入式的視頻,雖然零星找到一些嵌入式的視頻,但是都不系統,我是想找一個能夠告訴我該怎么學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教,不懂可以請教的。
后來我又找到一份很好的視頻,是在嵌入式學習網推出的一份視頻《從零基礎開始學嵌入式》,網址:http://www.FASHIONWEEKDAILY.info/evem.htm里面的教程還不錯,很完整,可以讓我從基礎的開始學起。視頻不便宜啊,但是我也忍了,畢竟買幾本書都要幾百了,何況他們還有半年的技術咨詢和服務,算值了。
下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所幫助。
收到他們寄過來的光盤后,我就開始學習了,由于我沒有什么基礎,我就從最簡單的C語言視頻教程學起,話說簡單,其實我還是很多不懂的,我只好請教他們,他們還是很熱心的,都幫我解決了。C語言我差不多學了一個禮拜,接下來我就學了linux的基本命令,我在他們提供linux虛擬機上都有做練習,敲linux的基本命令,寫簡單的C語言代碼,差不多也就三個禮拜。我每天都在不停的寫一些簡單的代碼,這樣一月后我基本掌握了C和linux的基本操作。
接下來我就去學習了人家的視頻的培訓教程,是整套的,和去參加培訓沒有多大的區別,這一看就是兩個月,學習了ARM的基本原理,學習嵌入式系統的概念,也掌握了嵌入式的環境的一些搭建,對linux也有更深層次的理解了,明白了嵌入式應用到底是怎么做的,但是驅動我只是有一點點的了解,這個相對難一點,我想以后再慢慢啃。
這兩個月,除了吃飯睡覺,我幾乎都在學習。因為我知道幾乎沒有基礎,比別人差勁,我只能堅持努力著,我不能放棄,我必要要靠自己來養活自己,必須學好這門技術,同時我不懂的就問,這里真的很感謝他們的技術客服對我的任何問題都是耐心的解答,每天都我幾乎都有好幾個問題問他們,然后我就把不懂的問題總結記下來,這樣慢慢積累了一段時間,我發現自己真的有點入門了。
最后的一個月,我就去看關于實踐部分的內容,了解嵌入式項目具體的開發流程,需要什么樣的知識,我就開始準備這方面的知識,也就是學習這方面的視頻,同時他們建議我去找了找一些嵌入式面試的題目,為自己以后找工作做準備。我就到網上找了很多嵌入式的題目,把他們理解的記下來,這樣差不多準備了20天左右
我覺得自己差不多入門了,會做一些簡單的東西了。我就想去找工作看看,于是我就到51job瘋狂的投簡歷,因為我學歷的問題,專科沒有畢業,說真的,大公司沒有人會要我,所以我投的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天過后,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了準備,但是他們的要求比較嚴格,需要有一年的項目經驗,所以我沒有被選中。
后來陸續面試了幾家公司,終于功夫不負有心人。我終于面試上的,是在閔行的一家民營的企業,公司規模比較小,我的職務是嵌入式linux應用開發,做安防產品的應用的。我想我也比較幸運,經理很看重我的努力,就決定錄用我,開的工資是3500一個月,雖然我知道在上海3500只能過溫飽的生活,但是我想我足夠了。我至少不用每天都要靠父母養,我自己也能養活自己的。我想只要我繼續努力,我工資一定會翻倍的。
把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有必要自卑,我們不比別人笨,只要我們肯努力,我們一樣會成功。
在大學生如則的身上,我們看到了一種精神,就是對認準的事情,不管多困難,多曲折,都不放棄,而且要堅定地、執著地做下去。這是在許多成功者身上我們看到的共同的東西。搞發明創造是寂寞的、艱苦的,但當一個人將它視作自己的事業和理想,它就是快樂的、充實的,堅持下去,必將看到成功的果實,世界上的許多事情亦是同理。(完)
第四篇:學習嵌入式系統心得
學習嵌入式系統心得
說實在話在沒有學習之前,以及在學之前通過一些口中得知這是一門很不錯,很有意思的一門課。而且目前是十分吃香的一門課程,如果學好了工作很好找并且待遇也很好。聽到這些,我內心非常期待上這門含金量如此之高的一門技術課。據我了解,嵌入式系統是一個很有前景的行業。學會嵌入式技術,就相當于給自己創造了更多的機會。那么,在可以預計的將來,嵌入式技術的應用會越來越廣泛。(大量的人才需求,未來五年內,國內LINUX嵌入式軟件開發的人才缺口達到120萬)
說實在的,第一天,我滿懷期望的去上這門課。可是一上課聽到老師的介紹,我就頭昏腦脹了。這是什么課啊,誰會聽得懂。猶如天書一般。
實事求是的說,嵌入式技術的全面掌握是有相當難度的。可以輕輕松松學會嵌入式技術的說法是夸大其詞了。這個就像學英語一樣,學英語無論怎樣學,不管是“瘋狂學”還是用新理念來學,真正掌握的話還是需要一步步積累才能熟練掌握。在此,我們通過短短的幾個星期簡單的了解和學習一下嵌入式,想成為這方面的高手。這些想法本身是不太現實的。我心里清楚我們需要做的是:
第一:把心踏實下來,做好打硬仗的準備。
第二:注意學習方法。盡量不要走彎路,爭取一鼓作氣入門。一旦入門了以后呢就好辦了。嵌入式技術的掌握,本身呢就比較難,要是再走些彎路,時間上會浪費,甚至會影響學習的信心。
這就是我這段時間的學習心得。
魯增慶 110402110 A11電氣
第五篇:軟考嵌入式系統設計師筆記歸納總結
軟考嵌入式系統設計師筆記
1.嵌入式系統的組成:硬件層、中間層、系統軟件層和應用軟件層
(1)硬件層:嵌入式微處理器、存儲器、通用設備接口和I/O 接口。
嵌入式核心模塊=微處理器+電源電路+時鐘電路+存儲器
Cache:位于主存和嵌入式微處理器內核之間,存放的是最近一段時間微處理器使用最多的程序代碼和數據。它的主要目標是減小存儲器給微處理器內核造成的存儲器訪問瓶頸,使處理速度更快。
(2)中間層(也稱為硬件抽象層HAL 或者板級支持包BSP):它將系統上層軟件和底層硬件分離開來,使系統上層軟件開發人員無需關系底層硬件的具體情況,根據BSP 層提供的接口開發即可。
BSP 有兩個特點:硬件相關性和操作系統相關性。
設計一個完整的BSP 需要完成兩部分工作:
A、嵌入式系統的硬件初始化和BSP 功能。
片級初始化:純硬件的初始化過程,把嵌入式微處理器從上電的默認狀態逐步設置成系統所要求的工作狀態。
板級初始化:包含軟硬件兩部分在內的初始化過程,為隨后的系統初始化和應用程序建立硬件和軟件的運行環境。
系統級初始化:以軟件為主的初始化過程,進行操作系統的初始化。
B、設計硬件相關的設備驅動。
(3)系統軟件層:由RTOS、文件系統、GUI、網絡系統及通用組件模塊組成。
RTOS 是嵌入式應用軟件的基礎和開發平臺。
(4)應用軟件:由基于實時系統開發的應用程序組成。2.嵌入式系統的定義
(1)定義:以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
(2)嵌入式系統發展的4 個階段:無操作系統階段、簡單操作系統階段、實時操作系統階段、面向Internet 階段。
(3)知識產權核(IP 核):具有知識產權的、功能具體、接口規范、可在多個集成電路設計中重復使用的功能模塊,是實現系統芯片(SOC)的基本構件。
(4)IP 核模塊有行為、結構和物理3 級不同程度的設計,對應描述功能行為的不同可以分為三類:軟核、固核、硬核。3.實時系統的調度
(1)調度:給定一組實時任務和系統資源,確定每個任務何時何地執行的整個過程。
(2)搶占式調度:通常是優先級驅動的調度,如uCOS。優點是實時性好、反應快,調度算法相對簡單,可以保證高優先級任務的時間約束;缺點是上下文切換多。
(3)非搶占式調度:通常是按時間片分配的調度,不允許任務在執行期間被中斷,任務一旦占用處理器就必須執行完畢或自愿放棄,如WinCE。優點是上下文切換少;缺點是處理器有效資源利用率低,可調度性不好。
(4)靜態表驅動策略:系統在運行前根據各任務的時間約束及關聯關系,采用某種搜索策略生成一張運行時刻表,指明各任務的起始運行時刻及運行時間。
(5)優先級驅動策略:按照任務優先級的高低確定任務的執行順序。
(6)實時任務分類:周期任務、偶發任務、非周期任務。
(7)實時系統的通用結構模型:數據采集任務實現傳感器數據的采集,數據處理任務處理采集的數據、并將加工后的數據送到執行機構管理任務控制機構執行。4.實時系統
(1)定義:能在指定或確定的時間內完成系統功能和對外部或內部、同步或異步時間做出響應的系統。
(2)區別:通用系統一般追求的是系統的平均響應時間和用戶的使用方便;而實時系統主要考慮的是在最壞情況下的系統行為。
(3)特點:時間約束性、可預測性、可靠性、與外部環境的交互性。
(4)硬實時(強實時):指應用的時間需求應能夠得到完全滿足,否則就造成重大安全事故,甚至造成重大的生命財產損失和生態破壞,如:航天、軍事。
(5)軟實時(弱實時):指某些應用雖然提出了時間的要求,但實時任務偶爾違反這種需求對系統運行及環境不會造成嚴重影響,如:監控系統、實時信息采集系統。
(6)任務的約束包括:時間約束、資源約束、執行順序約束和性能約束。5.嵌入式微處理器體系結構
(1)馮諾依曼結構:程序和數據共用一個存儲空間,程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置,采用單一的地址及數據總線,程序和數據的寬度相同。例如:8086、ARM7、MIPS?
(2)哈佛結構:程序和數據是兩個相互獨立的存儲器,每個存儲器獨立編址、獨立訪問,是一種將程序存儲和數據存儲分開的存儲器結構。例如:AVR、ARM9、ARM10?
(3)CISC 與RISC 的特點比較(參照教程22 頁)。
計算機執行程序所需要的時間P 可以用下面公式計算:
P=I×CPI×T
I:高級語言程序編譯后在機器上運行的指令數。
CPI:為執行每條指令所需要的平均周期數。
T:每個機器周期的時間。
(4)流水線的思想:在CPU 中把一條指令的串行執行過程變為若干指令的子過程在CPU 中重疊執行。
(5)流水線的指標:
吞吐率:單位時間里流水線處理機流出的結果數。如果流水線的子過程所用時間不一樣長,則吞吐率應為最長子過程的倒數。
建立時間:流水線開始工作到達最大吞吐率的時間。若m 個子過程所用時間一樣,均為t,則建立時間T=mt。
(6)信息存儲的字節順序
A、存儲器單位:字節(8 位)
B、字長決定了微處理器的尋址能力,即虛擬地址空間的大小。
C、32 位微處理器的虛擬地址空間位2^32,即4GB。
D、小端字節順序:低字節在內存低地址處,高字節在內存高地址處。
E、大端字節順序:高字節在內存低地址處,低字節在內存高地址處。
F、網絡設備的存儲順序問題取決于OSI 模型底層中的數據鏈路層。6.邏輯電路基礎
(1)根據電路是否具有存儲功能,將邏輯電路劃分為:組合邏輯電路和時序邏輯電路。
(2)組合邏輯電路:電路在任一時刻的輸出,僅取決于該時刻的輸入信號,而與輸入信號作用前電路的狀態無關。常用的邏輯電路有譯碼器和多路選擇器等。
(3)時序邏輯電路:電路任一時刻的輸出不僅與該時刻的輸入有關,而且還與該時刻電路的狀態有關。因此,時序電路中必須包含記憶元件。觸發器是構成時序邏輯電路的基礎。常用的時序邏輯電路有寄存器計數器等。
(4)真值表、布爾代數、摩根定律、門電路的概念。(教程28、29 頁)
(5)NOR(或非)和NAND(與非)的門電路稱為全能門電路,可以實現任何一種邏輯函數。
(6)譯碼器:多輸入多輸出的組合邏輯網絡。
每輸入一個n 位的二進制代碼,在m 個輸出端中最多有一個有效。
當m=2n 是,為全譯碼;當m<2n 時,為部分譯碼。
(7)由于集成電路的高電平輸出電流小,而低電平輸出電流相對比較大,采用集成門電路直接驅動LED時,較多采用低電平驅動方式。液晶七段字符顯示器LCD 利用液晶有外加電場和無外加電場時不同的光學特性來顯示字符。
(8)時鐘信號是時序邏輯的基礎,它用于決定邏輯單元中的狀態合適更新。同步是時鐘控制系統中的主要制約條件。
(9)在選用觸發器的時候,觸發方式是必須考慮的因素。觸發方式有兩種:
電平觸發方式:具有結構簡單的特點,常用來組成暫存器。
邊沿觸發方式:具有很強的抗數據端干擾能力,常用來組成寄存器、計數器等。7.總線電路及信號驅動
(1)總線是各種信號線的集合,是嵌入式系統中各部件之間傳送數據、地址和控制信息的公共通路。在同一時刻,每條通路線路上能夠傳輸一位二進制信號。按照總線所傳送的信息類型,可以分為:數據總線(DB)、地址總線(AB)和控制總線(CB)。
(2)總線的主要參數:
總線帶寬:一定時間內總線上可以傳送的數據量,一般用MByte/s 表示。
總線寬度:總線能同時傳送的數據位數(bit),即人們常說的32 位、64 位等總線寬度的概念,也叫總線位寬。總線的位寬越寬,總線每秒數據傳輸率越大,也就是總線帶寬越寬。
總線頻率:工作時鐘頻率以MHz 為單位,工作頻率越高,則總線工作速度越快,也即總線帶寬越寬。
總線帶寬= 總線位寬×總線頻率/8,單位是MBps。
常用總線:ISA 總線、PCI 總線、IIC 總線、SPI 總線、PC104 總線和CAN 總線等。
(3)只有具有三態輸出的設備才能夠連接到數據總線上,常用的三態門為輸出緩沖器。
(4)當總線上所接的負載超過總線的負載能力時,必須在總線和負載之間加接緩沖器或驅動器,最常用的是三態緩沖器,其作用是驅動和隔離。
(5)采用總線復用技術可以實現數據總線和地址總線的共用。但會帶來兩個問題:
A、需要增加外部電路對總線信號進行復用解耦,例如:地址鎖存器。
B、總線速度相對非復用總線系統低。
(6)兩類總線通信協議:同步方式、異步方式。
(7)對總線仲裁問題的解決是以優先級(優先權)的概念為基礎。8.電平轉換電路
(1)數字集成電路可以分為兩大類:雙極型集成電路(TTL)、金屬氧化物半導體(MOS)。
(2)CMOS 電路由于其靜態功耗極低,工作速度較高,抗干擾能力較強,被廣泛使用。
(3)解決TTL 與CMOS 電路接口困難的辦法是在TTL 電路輸出端與電源之間接一上拉電阻R,上拉電阻R 的取值由TTL 的高電平輸出漏電流IOH 來決定,不同系列的TTL 應選用不同的R 值。9.差錯控制編碼
(1)根據碼組的功能,可以分為檢錯碼和糾錯碼兩類。檢錯碼是指能自動發現差錯的碼,例如奇偶檢驗碼;糾錯碼是指不僅能發現差錯而且能自動糾正差錯的碼,例如循環冗余校驗碼。
(2)奇偶檢驗碼、海明碼、循環冗余校驗碼(CRC)。(教程70 到77 頁)10.嵌入式系統的度量項目
(1)性能指標:分為部件性能指標和綜合性能指標,主要包括:吞吐率、實時性和各種利用率。
(2)可靠性與安全性
可靠性是嵌入式系統最重要、最突出的基本要求,是一個嵌入式系統能正常工作的保證,一般用平均故障間隔時間MTBF 來度量。
(3)可維護性:一般用平均修復時間MTTR 表示。
(4)可用性
(5)功耗
(6)環境適應性
(7)通用性
(8)安全性
(9)保密性
(10)可擴展性
性價比中的價格,除了直接購買嵌入式系統的價格外,還應包含安裝費用、若干年的運行維修費用和軟件租用費。
11.嵌入式系統中信息表示與運算基礎
(1)進位計數制與轉換:這樣比較簡單,也應該掌握怎么樣進行換算,有出題的可能。
(2)計算機中數的表示:源碼、反碼與補碼。
正數的反碼與源碼相同,負數的反碼為該數的源碼除符號位外按位取反。
正數的補碼與源碼相同,負數的補碼為該數的反碼加一。
例如-98 的源碼:11100010B
反碼:10011101B
補碼:10011110B
(3)定點表示法:數的小數點的位置人為約定固定不變。
浮點表示法:數的小數點位置是浮動的,它由尾數部分和階數部分組成。
任意一個二進制N 總可以寫成:N=2P×S。S 為尾數,P 為階數。(4)漢字表示法(教程67、68 頁),搞清楚GB2318-80 中國標碼和機內碼的變換。
(5)語音編碼中波形量化參數(可能會出簡單的計算題目哦)
采樣頻率:一秒內采樣的次數,反映了采樣點之間的間隔大小。
人耳的聽覺上限是20kHz,因此40kHz 以上的采樣頻率足以使人滿意。
CD 唱片采用的采樣頻率是44.1kHz。
測量精度:樣本的量化等級,目前標準采樣量級有8 位和16 位兩種。
聲道數:單聲道和立體聲雙道。立體聲需要兩倍的存儲空間。12.嵌入式系統的評價方法:測量法和模型法
(1)測量法是最直接最基本的方法,需要解決兩個問題:
A、根據研究的目的,確定要測量的系統參數。
B、選擇測量的工具和方式。
(2)測量的方式有兩種:采樣方式和事件跟蹤方式。
(3)模型法分為分析模型法和模擬模型法。分析模型法是用一些數學方程去刻畫系統的模型,而模擬模型法是用模擬程序的運行去動態表達嵌入式系統的狀態,而進行系統統計分析,得出性能指標。
(4)分析模型法中使用最多的是排隊模型,它包括三個部分:輸入流、排隊規則和服務機構。
(5)使用模型對系統進行評價需要解決3 個問題:設計模型、解模型、校準和證實模型。13.1.嵌入式微處理器的基本結構
(1)嵌入式硬件系統一般由嵌入式微處理器、存儲器和輸入/輸出部分組成。
(2)嵌入式微處理器是嵌入式硬件系統的核心,通常由控制單元、算術邏輯單元和寄存器3大部分組成:
A、控制單元:主要負責取指、譯碼和取數等基本操作并發送主要的控制指令。
B、算術邏輯單元:主要處理數值型數據和進行邏輯運算工作。
C、寄存器:用于暫存臨時性的數據。
2.嵌入式微處理器的分類(根據用途)
(1)嵌入式微控制器(MCU):又稱為單片機,片上外設資源一般比較豐富,適合于控制。最大的特點是單片化,體積小,功耗和成本低,可靠性高。目前約占70%的市場份額。
(2)嵌入式微處理器(EMPU):又稱為單板機,由通用計算機中的CPU 發展而來,它的特征是具有32位以上的處理器,具有較高的性能。通常嵌入式微處理器把CPU、ROM、RAM 及I/O 等模塊做到同一個芯片上。
(3)嵌入式DSP 處理器(DSP):專門用于信號處理方面的處理器,其在系統結構和指令算法方面進行了特殊設計,使其處理速度比最快的CPU 還快10~50倍,在數字濾波、FFT、頻譜分析等方面獲得了大量的應用。
(4)嵌入式片上系統(SOC):追求產品系統最大包容的集成器件,其最大的特點是成功實現了軟硬件的無縫結合,直接在微處理器片內嵌入操作系統的代碼模塊。
3.典型8位微處理器(具有8位數據總線)的結構和特點
該部分參考《教程》86~94頁,以8051為重點,徹底搞清楚8位單片機的工作原理,外設控制、存儲分布、尋址方式以及典型應用。2007年11月下午的第一道題目就考查了8051的定時器使用、外部時鐘連接、實際應用的流程設計以及典型的尋址方式。這些考點幾乎可以在《教程》上找到,例如外部時鐘連接那個問題的答案就是《教程》89頁上面的原圖。4.典型16位微處理器的結構和特點
該部分參考《教程》94~97頁。典型的微處理器可以參考MSP430,找一本這方面的書看看關于MSP430的結構原理以及典型應用。
5.典型32位微處理器的結構和特點
該部分參考《教程》97~112頁。32位處理器采用32位的地址和數據總線,其地址空間達到了2^32=4GB。
目前主流的32位嵌入式處理器系統主要有ARM 系列、MIPS 系列、PoewrPC 系列等。ARM 微處理器體系結構目前被公認為是嵌入式應用領域領先的32位嵌入式RISC 處理器結構。按照目前的發展形式,ARM 幾乎成了嵌入式應用的代名詞。按照我個人的意見,作為嵌入式系統設計師考試,逐漸增加考查ARM 體系結構與編程方面的題目是大勢所趨。2006年沒有一道關于ARM 的題目,2007年出了少量題目,可能在2008年會繼續增加。在下午題方面,2006年考查了X86方面的應用、2007年考查了8051方面的應用,這個可能是一個過度過程,以目前ARM 在嵌入式領域的廣泛應用和普及程度,下午題目考查ARM 應用方面或者32位其他的微處理器方面的應用題目可能在不就將來的考試中就會出現。14.單片機系統的基本概念
(1)單片機組成:中央處理器、存儲器、I/O 設備。
(2)存儲器:物理實質是一組或多組具備數據輸入/輸出和數據存儲功能的集成電路,用于充當設備緩存或保存固定的程序及數據。
A、ROM(只讀存儲器):一般用于存放固定的程序或數據表格等,數據在掉電后仍然會保留下來。
B、RAM(隨機存儲器):用于暫存程序和數據、中間計算結果,或用作堆棧用等,數據在掉電后就會丟失。
(3)I/O端口:單片機與外界聯系的通道,它可以對各類外部信號(開關量、模擬量、頻率信號)進行檢測、判斷、處理,并可控制各類外部設備。現在的單片機I/O 口已經集成了更多的特性和功能,對I/O端口的功能進行了拓展和復用,例如外部中斷、ADC 檢測以及PWM 輸出等等。
(4)輸出電平:高電平電壓(輸出“1”時)和低電平電壓(輸出“0”時)
A、TTL 電平:正邏輯,5V 為邏輯正,0V 為邏輯負,例如單片機的輸出。
B、RS232電平:負邏輯,-12V 為邏輯正,+12V 為邏輯負,例如PC 的輸出。
注:因此在單片機和PC 進行通訊的時候需要一個MAX232芯片進行電平轉換。
(5)堆棧:它是一種線性的數據結構,是一個只有一個進出口的一維空間。
A、堆棧特性:后進先出(LIFO)
B、堆棧指針:用于指示棧頂的位置(地址),當發生壓棧或者出棧操作時,導致棧頂位置變化時,堆棧指針會隨之變化。
C、堆棧操作:壓棧操作(PUSH)和出棧操作(POP)。
D、堆棧類型:“向上生長”型堆棧,每次壓棧時堆棧指針加1;“向下生長”型堆棧,每次壓棧堆棧時指針減1。
E、堆棧應用:調用子程序、響應中斷時,堆棧用于保護現場;還可以用作臨時數據緩沖區來使用。
F、使用注意:堆棧溢出問題,壓棧和出棧的匹配問題。
(6)定時/計數器:實質都是計數器。用作定時器時是對單片機內部的時鐘脈沖進行計數,而在用作計數器時是對單片機外部的輸入脈沖進行計數,其作用如下:
A、計時、定時或延時控制;
B、脈沖技術;
C、測量脈沖寬度或頻率(捕獲功能)
(7)中斷:優先級更高的事件發生,打斷優先級低的時間進程。引起中斷的事件稱為中斷源。一個單片機可能支持多個中斷源,這些中斷源可以分為可屏蔽中斷和非可屏蔽中斷,而這些中斷源并不都是系統工作所需的,我們可以根據系統需求屏蔽那些不需要的中斷源。
A、中斷嵌套:當一個低級中斷尚未執行完畢,又發生了一個高級優先級的中斷,系統轉而執行高級中斷服務程序,待處理完高級中斷后再回過頭來執行低級中斷服務程序。
B、中斷響應時間是指從發出中斷請求到進入中斷處理所用的時間;中斷處理時間是指中斷處理開始到中斷處理結束的時間。
C、中斷響應過程:
a、保護現場:將當前地址、累加器ACC、狀態寄存器保存到堆棧中。
b、切換PC 指針:根據不同的中斷源所產生的中斷,切換到相應的入口地址。
c、執行中斷服務處理程序。
d、恢復現場:將保存在堆棧中的主程序地址、累加器ACC、狀態寄存器恢復。
e、中斷返回:從中斷處返回到主程序,繼續執行。
D、中斷入口地址:單片機為每個中斷源分配了不同的中斷入口地址,也稱為中斷向量。
(8)復位:通過外部電路給單片機的復位引進一個復位信號,讓系統重新開始運行。
A、復位發生時的動作:
a、PC 指針從起始位置開始執行(大多數單片機都時從0x0000處開始執行)。
b、I/O 端口設置成缺省狀態(高阻態、或者輸出低電平)。
c、部分專用控制寄存器SFR 恢復到缺省狀態。
d、普通RAM 不變(如果時上電復位,則是隨即數)。
B、兩種不同的復位啟動方式:
a、冷啟動:也叫上電復位,指在斷電狀態下給系統加電,讓系統開始正常運行。
b、熱啟動:在不斷電的狀態下,給單片機復位引進一個復位信號,讓系統重新開始。
C、兩種類型的復位電路:高電平復位和低電平復位。
D 注意事項:
a、注意復位信號的電平狀態及持續時間必須滿足系統要求。
b、注意避免復位信號抖動。
(9)時鐘電路:單片機是一種時序電路,必須提供脈沖電路才能正常工作。時鐘電路相當于單片機的心臟,它的每一次跳動(振動節拍)都控制著單片機的工作節奏。振蕩得慢時,系統工作速度就慢,振蕩得快時,系統工作速度就快(功耗也增大)。
A、振蕩周期:振蕩源的振蕩節拍。
B、機器周期:單片機完成一個基本操作需要的振蕩周期(節拍)。
C、指令周期:執行一條指令需要幾個機器周期。不同的指令需要的機器周期數不同。15.地址映射
地址映射也叫地址重定位。
邏輯地址和物理地址是完全不同的,不能用邏輯地址來直接訪問內存單元。
為了保證CPU 在執行指令的時候,可以正確地訪問內存單元,需要將用戶程序中的邏輯地址轉換為運行時由機器直接尋址的物理地址。這個過程稱為:地址映射。
地址映射由存儲管理單元MMU 來完成。
地址映射主要有兩種方式:靜態地址映射和動態地址映射。
靜態地址映射:當用戶程序被裝入內存時,直接對指令代碼進行修改,一次性地實現邏輯地址到物理地址的轉換。
動態地址映射:當用戶程序被裝入內存時,不對指令代碼做任何修改,而是在程序的運行過程中,當它需要訪問內存單元的時候,再來進行地址轉換。
在具體實現時,這項轉換工作一般是由硬件的地址映射機制來完成的。通常設置一個基地址寄存器,或者叫重定位寄存器。當一個任務被調度運行時,就把它所在分區的起始地址裝入到整個寄存器中。然后,在程序運行的過程中,當需要訪問某個內存單元時,硬件就會自動地將其中的邏輯地址加上基地址寄存器中的內容,從而得到實際的物理地址,并且按照這個物理地址區執行。
這個基地址寄存器位于MMU 的內部,整個地址映射過程是自動運行的。從理論上說,每訪問一次內存都要進行一次地址映射。16.ARM體系結構的基本概念
(1)ARM:Advanced RISC Machine。
(2)ARM體系結構中支持兩種指令集:ARM 指令集和Thumb 指令集。
(3)ARM內核有T、D、M、I四個功能模塊:
A、T 模塊:表示16位Thumb,可以在兼顧性能的同時減少代碼尺寸。
B、D 模塊:表示Debug,內核中放置了用于調試的結構,通常為一個邊界掃描鏈JTAG。
C、M 模塊:表示8位乘法器。
D、I 模塊:表示EmbeddedICE Logic,用于實時斷點觀測及變量觀測的邏輯電路部分。
(4)ARM處理器有7種運行模式:
A、用戶模式(User):正常程序執行模式,用于應用程序。
D、快速中斷模式(FIQ):快速中斷處理,用于高速數據傳輸和通道處理。
C、外部中斷模式(IRQ):用于通用的中斷處理。
D、管理模式(SVE):供操作系統使用的一種保護模式。
E、數據訪問中止模式(Abort):用于虛擬存儲及存儲保護。
F、未定義指令中止模式(Undefined):當未定義指令執行時進入該模式。
G、系統模式(System):用于運行特權級的操作系統任務。
除了用戶模式之外的其他6種處理器模式稱為特權模式,在這些模式下,程序可以訪問所有的系統資源,也可以任意地進行處理器模式切換,其中,除了系統模式外,其他的5種特權模式又稱為異常模式。
處理器模式可以通過軟件控制進行切換,也可以通過外部中斷或異常處理過程進行切換。大多數的用戶程序運行在用戶模式下,這時,應用程序不能訪問一些受操作系統保護的系統資源,應用程序也不能直接進行處理器模式切換。當需要進行處理器模式切換時,應用程序可以產生異常處理,在異常處理中進行處理器模式的切換。這種體系結構可以使操作系統控制整個系統的資源。
當應用程序發生異常中斷時,處理器進入相應的異常模式。在每一種異常模式種都有一組寄存器,供相應的異常處理程序使用,這樣就可以保證進入異常模式時,用戶模式下的寄存器不被破壞。系統模式并不是通過異常過程進入的,它和用戶模式具有完全一樣的寄存器,但是系統模式屬于特權模式,可以訪問所有的系統資源,也可以直接進行處理器模式切換,它主要供操作系統任務使用。17.嵌入式操作系統概述
(1)內核
內核是指操作系統中的一個組件,它包含了OS 的主要功能,即OS 的各種特性及其相
互之間的依賴關系,這些功能主要包括:
A、任務管理:對系統中運行的軟件進行描述和管理,并完成處理器資源分配和調度。
B、存儲管理:提高內存的利用率,方便用戶使用,提供足夠的存儲空間。
C、設備管理:方便設備的使用,提高CPU 和I/O 設備的利用率。
D、文件管理:解決文件資源存儲、共享、保密和保護等問題。
注:不同嵌入式操作系統的內核設計各不相同,取決于系統設計和實際需求。
(2)嵌入式操作系統分類:
A、按系統類型:商業系統、專用系統、開源系統。
B、按響應時間:硬實時系統、軟實時系統。
C、按軟件結構:單體結構(uCOS)、分層結構(MS-DOS)、微內核結構(Vxworks)。18.嵌入式軟件基礎
(1)嵌入式軟件的特點:
A、規模較小。
B、開發難度大。
C、實時性和可靠性要求高。
D、要求固化存儲。
(2)嵌入式軟件分類:
A、系統軟件:控制和管理嵌入式系統資源,如嵌入式操作系統、驅動程序、中間件等。
B、應用軟件:定義嵌入式設備的主要功能和用途,負載與用戶進行交互。
C、支撐軟件:輔助軟件開發的工具軟件。
(3)無操作系統的嵌入式軟件的兩種實現方式:
A、循環輪轉
優點:簡單、直觀、開銷小、可預測。
缺點:過于簡單,所有代碼順序執行,無法處理異步事件,缺乏并行處理能力。
B、前后臺系統(在循環輪轉的基礎上增加了中斷處理功能)
前臺(事件處理級):中斷服務程序,負載處理異步事件。
后臺(任務級):一個無限循環,負載資源分配、任務管理和系統調度。
(4)有操作系統的三大優點:
A、提高系統的可靠性。
B、提高了系統的開發效率,降低了開發成本,縮短了開發周期。
C、有利于系統的擴展與移植。
(5)設備驅動層(也叫板級支持包BSP:包含了嵌入式系統中所有與硬件相關的代碼)
大多數的嵌入式硬件設備都需要某種類型軟件的初始化和管理。這部分工作由設備驅動層來完成的,它負責直接與硬件大交道,對硬件進行管理和控制,為上層軟件提供所需的驅動支持,類似PC 系統中的BIOS 和驅動程序。19.設備管理
(1)設備管理基礎
一個I/O 單元通常由兩個部分組成:
A、機械部分:I/O 設備本身。
B、電子部分:設備控制器或設備適配器。
硬件寄存器的編址方式有三種:
A、I/O獨立編址:對于各種設備控制器中的每一個寄存器,分配一個唯一的I/O端口編號,也叫I/O 端口地址,然后用專門的I/O 指令對這些端口進行操作。這些端口地址構成的地址空間是完全獨立的,與內存地址空間沒有任何關系。
B、內存映象編址:把各種設備控制器當中的每一個寄存器都映射為一個內存單元,這內存單元專門用于I/O 操作。端口地址空間與內存地址空間是統一編址的,端口地址空間是內存地址空間的一部分。
C、混合編址:對于設備控制器當中的寄存器采用獨立編址的方法,每個寄存器有一個獨立的I/O 端口地址;而對于設備的數據緩沖區,則采用內存映象編址的方法,把他們統一到內存地址空間當中。
(2)I/O控制方式:
A、程序循環檢測:要一直占用CPU,浪費CPU 的時間。
B、中斷驅動方式:前后臺系統。
C、直接內存訪問:DMA 控制,減少了中斷的次數。20.任務管理
(1)嵌入式操作系統的任務管理可以分為:
A、單道程序技術:操作系統中,任何時候只能有一個程序在運行。
B、多道程序技術:操作系統中,允許多個程序同時存在并運行。
(2)進程
進程,簡單的說,是一個正在運行的程序。
進程與程序既有聯系又有區別,主要表現為下面結構方面:
A、程序由數據和代碼兩部分內容組成,它是一個靜態的概念。而進程是正在執行的程序,它也由兩部分組成:程序和該程序的運行上下文。它是一個動態的概念。
B、程序和進程之間并不是一一對應的。一個進程在運行的時候可以啟動一個或多個程序。反之,同一個程序也可能由多進程同時執行。
C、程序可以作為一種軟件資源長期保存,以文件的形式存放在光盤或硬盤上,而進程則是一次執行的過程,它是暫時的,是動態的產生和終止。
一個進程至少應包括三個方面:相應的程序、CPU上下文、一組系統資源。
進程有三個特性:
A、動態性:進程是正在運行的程序,而程序的運行狀態是不斷變化的。
B、獨立性:進程是系統資源的使用單位,每個進行有自己的運行上下文和內部狀態。
C、并發性:宏觀來看,系統中同時有多個進程存在,它們相互獨立地運行。
注:對于并發的理解。
在單CPU 的情況下,所謂的并發性指的是宏觀上的并發運行,而微觀上還是順序進行,各個進程輪流去使用CPU 資源。在單核CPU 中,真正的、物理上的PC 寄存器只有一個,進程在輪流執行的時候,物理PC 的取值也在不斷變化。而邏輯PC 其實就是一個內存變量。每個進程都有一個邏輯PC,當一個進程要運行的時候,就把它的邏輯PC 裝載到物理PC 中去;反之,當一個進程暫不運行的時候,就把物理PC中的值保存在它的邏輯PC 當中。
(3)線程
線程就是進程當中的一條執行流程。
進程其實包含兩個部分:資源平臺和執行流程(線程)。
在一個進程當中,或者說在一個資源平臺上,可以同時存在多個線程;可以用線程作為CPU 的基本調度單位,使得各個線程之間可以并發執行;對于同一個進程當中的各個線程來說,他們可以共享該進程的大部分資源。每個線程都有自己獨立的CPU運行上下文和棧,這是不能共享的。21.文件系統
(1)嵌入式文件系統概述
文件系統就是操作系統中用以組織、存儲、命名、使用和保護文件的一套管理機制。
常見的嵌入式文件系統有:
A、FAT:VxWorks、QNX、WindowsCE 等
B、NFS:網絡文件系統,基于遠程調用和擴展數據表示。
C、FFS:用于Flash 存儲器的文件系統。
(2)文件和目錄
A、當一個文件被創建時,必須給它指定一個名字,用戶就是通過文件名來訪問這個文件的。
B、文件命是一個有限長度的字符串,由兩部分組成:文件名和擴展名。
C、文件的邏輯結構主要有三種:無結構、簡單的記錄結構和復雜結構。現代文件系統通常采用的是無結構的形式。
D、除了文件名之外,操作系統會給每個文件附加一些其他信息,稱為文件的屬性。
E、文件的存取方法有兩種:順序存取和隨機存取。
F、目錄也稱為文件夾,它是一張表格,記錄了在該目錄下每個文件名和其他的一些管理信息。
G、在多級目錄結構中,訪問文件或目錄主要有兩種方法:絕對路徑名和相對路徑名。22.存儲器系統的層次架構
計算機系統的存儲器被組織城一個金字塔的層次結構。
自上而下為:CPU 內部寄存器、芯片內部高速緩存(cache)、芯片外部高速緩存(SRAM、SDRAM、DRAM)、主存儲器(FLASH、EEPROM)、外部存儲器(磁盤、光盤、CF 卡、SD 卡)和遠程二級存儲器(分布式文件系統、WEB 服務器),6個層次的結構。
上述設備從上而下,依次速度更慢、容量更大、訪問頻率更小,造價更便宜。22.高速緩存(cache)
工作原理(參照教程126頁,博客畫不了圖):主要利用了程序的局部性特點。
地址映象是指把主存地址空間映象到cache 的地址空間。
地址變換是指當程序或數據已經裝入到cache 后,在實際運行過程中,把主存地址如何編程cache 空間的地址。
常用的地址映象和地址變換的方式有:(教程127頁)
直接映象和變換:速度快,造價低,但有局限性,不能充分利用cache 的好處。
組相聯地址映象和變換:速度稍慢但是命中率高。
全相聯地址映象和變換:可以任意映射。
常用的cache 替換算法:輪轉法和隨機替換算法。
高速緩存的分類:
統一cache 和獨立的數據/指令cache
寫通cache 和寫回cache
讀操作分配cache 和寫操作分配cache 23.存儲管理單元(MMU)
MMU 在CPU 和物理內存之間進行地址轉換,將地址從邏輯空間映射到物理空間,這個過程稱為內存映射。
MMU 主要完成下面的工作:
A.虛擬存儲空間到物理空間的映射。
B.存儲器訪問權限的控制。
C.設置虛擬存儲空間的緩沖特性。
嵌入式系統中常常采用頁式存儲管理。為了管理這些頁引入了頁表的概念。
頁表是位于內存中的表,它的每一行對應虛擬存儲空間的一個頁,該行包含了該虛擬內存頁對應的物理內存頁的地址、該頁的訪問權限和該頁的緩沖特性等。
從虛擬地址到物理地址的變換過程就是查詢頁表的過程。
由于頁表存儲在內存中的,整個查詢過程需要付出很大的代價。根據程序局部性的特點,增加了一個小容量、高速度的存儲部件來存放當前訪問需要的地址變換條目,這個存儲部件稱為:地址轉換后備緩沖器(TLB)。
當CPU 訪問內存時,首先在TLB 中查找需要的地址變換條目,如果該條目不存在,CPU 再從內存中的頁表中查詢,并把相應的結果添加到TLB 中,更新它的內容。
嵌入式系統中虛擬存儲空間到物理空間的映射以內存塊為單位進行。即虛擬存儲空間中一塊連續的存儲空間被映射到物理存儲空間中同樣大小的一塊連續存儲空間。
在頁表和TLB 中,每一個地址變換條目實際上記錄了一個虛擬存儲空間的內存塊的基地址與物理存儲空間相對應的一個內存塊的基地址之間的對應關系。
在MMU 中實現虛擬地址到物理地址的映射是通過兩級頁表來實現的。
禁止MMU 時,所有物理地址和虛擬地址相等,即使用平板存儲模式。24.內存保護
操作系統通常利用MMU 來實現操作系統內核與應用程序之間的隔離,以及應用程序與應用程序之間的隔離。
內存保護包含兩個方面的內容:
A.防止地址越界,每個應用程序都有自己獨立的地址空間。
B.防止越權操作,每個應用程序都有自己的訪問權限。25.實模式與保護模式
在嵌入式系統中,常見的存儲管理方案可以分為兩大類:實模式和保護模式。
實模式:內存的平面使用模式。特點有:
A.不劃分“系統空間”與“用戶空間”,無須進行地址映射。
B.操作系統與應用程序之間不再有物理的邊界。
C.系統中的“任務”或“進程”,實際上全是內核線程。
在實模式下,內存布局可以分為5個段:
A.代碼段:包含操作系統和應用程序的所有代碼。
B.數據段:所有帶有初始值的全局變量。
C.BSS 段:所有未帶初始值的全局變量。
D.堆空間:動態分配的內存空間。
E.棧空間:保存上下文以及函數調用時的局部變量和形參。
在實模式存儲管理方案下,主要的工作在于堆空間的管理,即如何來管理空閑的堆空間、如何來分配內存、如何來回收內存等等。
保護模式:處理器中必須有MMU 硬件并啟用。特點有:
A.系統內核和用戶程序都有各自獨立的地址空間。
B.每個應用程序只能訪問自己的地址空間,不能去破壞操作系統和其他應用程序的代碼和數據。26.分區存儲管理
為了實現多道程序系統而采用的最簡單的內存管理。
基本思路:把整個內存劃分為兩大區域,即系統區和用戶區,然后再把用戶區劃分為若干個分區,每個任務占有其中的一個分區。這樣,在內存當中就同時保留多個任務,讓他們共享整個用戶區,從而實現多個任務的并發運行。
分區存儲管理又可以分為兩類:固定分區和可變分區。
固定分區:各個用戶分區的個數、位置和大小一旦確定后,就固定不變,不能再修改。
優點:易于實現,系統開銷較小。
缺點:內存利用率不高,分區總數固定。
可變分區:動態創建,在裝入一個程序時,系統將根據它的需求和內存空間的使用情況來決定是否分配。
優點:動態變化,非常靈活。
缺點:可能存在外碎片。
在實現可變存儲管理技術的時候,需要考慮三個方面的問題:
A.內存管理的數據結構
B.內存的分配算法
C.內存的回收算法
27.嵌入式系統的特點、分類、發展與應用,熟悉嵌入式系統的邏輯組成。
(1)特點:
專用性
隱蔽性(嵌入式系統是被包裝在內部)
資源受限(要求小型化、輕型化、低功耗及低成本,因此軟硬件資源受到限制)
高可靠性(任何誤動作都可能會產生致命的后果)
軟件固化(軟件都固化在只讀存儲器ROM中,用戶不能隨意更改其程序功能)
實時性
(2)邏輯組成
硬件:1)處理器(運算器、控制器、存儲器)
目前所有的處理器都是微處理器 中央處理器(CPU)和協助處理器(數字信號處理器DSP、圖像處理器、通信處理器)
2)存儲器(隨機存儲器RAM和只讀存儲器ROM)
RAM分為動態DRAM和靜態SRAM兩種。DRAM電路簡單、集成度高、功耗小、成本低,但速度稍慢慢;SRAM電路較復雜、集成度低、功耗較大、成本高,但工作速度很快,適合用作指令和數據的高速緩沖存儲器
RAM當關機或斷電時,其中的信息都會消失,屬于易失性存儲器
ROM屬于不易失性存儲器。分為電可擦可編程只讀存儲器(存放
固件)和閃速存儲器(Flash ROM簡稱內存)。內存的工作原理:在低
壓下,存儲的信息可讀但不可寫,這類似于ROM;在較高的電壓下,所存儲的信息可以更改和刪除,這有類似于RAM。
3)I/O設備與I/O接口
4)數據總線
軟件
(3)分類
按嵌入式系統的軟硬件技術復雜程度進行分類:
1)低端系統 采用4位或8位單片機,在工控領域和白色家電領域占主導地位,如計算器、遙控器、充電器、空調、傳真機、BP機等。
2)中端系統 采用8位/16位/32位單片機,主要用于普通手機、攝像機、錄像機、電子游戲機等。
3)高端系統采用32位/64位單片機,主要用于智能手機、調制解調器、掌上計算機、路由器、數碼相機等。
(4)發展
20世紀60年代初,第一個工人的現代嵌入式系統(阿波羅導航計算機)
20世紀60年代中期,嵌入式計算機批量生產
20世紀70年代,微處理器出現
20世紀80年代中期,外圍電路的元器件被集成到處理器芯片中,昂貴的模擬電路元件能被數字電路替代
20世紀90年代中期SOC出現,集成電路進入超深亞微米乃至納米加工時代。28.嵌入式系統的組成與微電子技術(集成電路、EDA、SoC、IP核等技術的作用和發展)
(1)集成電路IC 集成電路的制造大約需要幾百道工序,工藝復雜。集成電路是在硅襯底上制作而成的。硅襯底是將單晶硅錠經切割、研磨和拋光后制成的像鏡面一樣光滑的圓形薄片,它的厚度不足1mm,其直徑可以是6、8、12英寸甚至更大這種硅片稱為硅拋光片,用于集成電路的制造。制造集成電路的工藝技術稱為硅平面工藝,包括氧化、光刻、摻雜等多項工序。把這些工序反復交叉使用,最終在硅片上制成包含多層電路及電子元件的集成電路。集成電路的特點:體積小、重量輕、可靠性高。其工作速度主要取決于邏輯門電路的晶體管的尺寸。尺寸越小,工作頻率就越高,門電路的開關速度就越快。(2)EDA(電子信號自動化)(3)SoC芯片(片上系統)
既包含數字電路,也可以包含模擬電路,還可以包含數模混合電路和射頻電路。SoC芯片可以是一個CPU,單核SoC,也可以由多個CPU和/或DSP,即多核SoC。開發流程:
(1)總體設計
可以采用系統設計語言System C(或稱IEEE 1666,它是C++的擴充)或System Vetilog語言對SoC芯片的軟硬件作統一的描述,按照系統需求說明書確定SoC的性能能參數,并據此進行系統全局的設計。
(2)邏輯設計
將總體設計的結果用RTL(寄存器傳輸級描述語言)語言進行描述(源文件)后,在使用邏輯綜合將源文件進行綜合生成,生成最簡的布爾表達式核心好的連接關系(以類型為EDF的EDA工業標準文件表示)(3)綜合和仿真
(4)芯片制造
借助EDA中的布局布線工具(4)IP核
IC設計文件:邏輯門級,包括各種基本的門電路;寄存器傳輸級,如寄存器、譯碼器、數據轉換器;行為級,如CPU、DSP、存儲器、總線與接口電路等。核庫中的設計文件均屬于知識產權IP保護的范疇,所以稱為“知識產權核”或“IP核”。IP核是開發SoC的重要保證。按IC設計文件的類型,IP通常分為:軟核、固核、硬核。IP核的復用可以減少研發成本,縮短研發時間,是實現SoC的快速設計,盡早投放市場的有效途徑。
目前主要的CPU內核有ARM、MIPS、PowerPC、Coldfile、x86、8051等。ARM內核占所有32位嵌入式RISC處理器的90%以上。
29.嵌入式系統與數字媒體(文本、圖像和音頻/視頻等數字媒體的表示與處理)(1)文本
含義:在計算機中的文字信息,最常用的一種數字媒體。字符集及其編碼
1)西方字符的編碼
ASCII字符集和ASCII編碼,基本的ASCII字符集共128個字符,每個字符使用7個二進位(最高位為奇偶校驗位,預留位)制進行編碼。2)漢字的編碼
漢子國家編碼標準有GB2312和GB18030。每個漢字用2個字節表示。GB2312只有6763個漢字,經常不夠用。GB18030字符集與UCS/Unicode字符集基本兼容,采用不等長的編碼方法,單字節編碼表示ASCII字符,與ASCII碼兼容;雙字節表示漢字,與GB2312保持向下兼容(即GB2312中有的GB18030字符集都有)3)UCS/Unicode編碼 文本類型 1)簡單文本
只能順序閱讀。2)豐富格式文本
有插圖、對文字顏色等定義,調整頁面,文本布局,插入聲音視頻等。3)超文本
通過超鏈接實現跳轉、導航、回溯等操作(2)圖像
圖像獲取過程的核心是模擬信號的數字化,處理步驟為:
1)掃描
將畫面網格化,每個網格為一個取樣點 2)分色
將每個取樣點的顏色分解成三原色
3)取樣
測量每個取樣點的每個分量(基色)亮度值
4)量化
把模擬量使用數字量來表示,A/D轉換
數字圖像的主要參數:圖像大小(水平分辨率*豎直分辨率)、位平面數目、像素深 度、顏色模型
一幅圖像的數據量計算公式:
圖像數據量=圖像大小*像素深度/8(3)音頻/視頻
音頻/視頻信息的數字化,處理步驟為: 1)取樣
2)量化
3)編碼
數字音頻的主要參數:取樣頻率、量化位數、聲道數目、使用的壓縮編碼方法、比特率(每秒鐘的數據量)
壓縮前
波形聲音的碼率(比特率)= 取樣頻率 * 量化為數 * 聲道數(單位b/s)壓縮后
碼率 = 壓縮前碼率 / 壓縮倍數(壓縮比)
30.嵌入式系統與網絡通信技術(數字通信與計算機網絡,TCP/IP協議,互聯網接入技術等)(1)數字通信(2)計算機網絡(3)音頻/ TCP/IP協議(4)互聯網接入技術
31.ARM處理器內核的體系結構(工作狀態,工作模式,寄存器組織,異常,數據類型與存儲格式等)(1)工作狀態
一是ARM狀態,二是Thumb指令狀態及Thumb-2狀態,三是調試狀態。ARM處理器復位后開始執行代碼時總是只處于ARM狀態,如果需要,可通過下面的方法切換到Thumb狀態或Thumb-2狀態
ARM狀態切換到Thumb指令狀態:通過BX指令,將操作數寄存器的最低位設置為1即可。如果R0[0]=1,則執行BX R0指令將進入Thumb狀態
Thumb狀態切換到ARM狀態:通過BX指令,將操作數寄存器的最低位設置為0即可。如果R0[0]=0,則執行BX R0指令將進入ARM狀態。(2)七種工作模式
(3)寄存器組織
ARM處理器共有37種寄存器,包括31個通用寄存器(含PC)和6個狀態寄存器。無論何種模式,R15均作為PC使用;CPSR為當前程序狀態寄存器;R7-R0為公用的通用寄存器。所有通用寄存器均為32位結構。程序狀態寄存器的格式: 31 30 29 28 27
26??8
0
條件碼標志含義如下:
N為符號標志位,N=1為負數,N=0為正數。Z為全0標志位,運算結果為0,則Z=1,否則Z=0; C為進借位標志,有進/借位時C=1,否則C=0.V為溢出標志,加減法運算結果溢出時V=1,否則V=0.Q為增強的DSP運算指令溢出標志,溢出時Q=1,否則Q=0.控制位含義如下:
I為中斷禁止控制位,I=1禁止IRQ中斷,I=0,允許中斷。
F為禁止快速中斷FIQ的控制位,F=1禁止FIQ中斷,F=0允許。
T為ARM和Thumb指令切換,T=1時執行Thumb指令,否則執行ARM指令。
M4-M0為模式選擇位(4)存儲格式
大端模式:32位數據字的高字節存儲在低地址,而數據字的低字節則存放在高地址中。
小端模式:32位數據字的高字節存儲在高地址,而數據字的低字節則存放在低地址中。系統復位時,自動默認為小端模式。
例如:一個32位數據字0x12345678,存放在起始地址為0x30001000,則大端模式下0x30001000單元存放0x12,0x30001001單元存放0x34,0x30001002單元存放0x56,0x30001003單元存放0x78;而小端模式下0x30001000單元存放0x78,0x30001001單元存放0x56,0x30001002單元存放0x34,0x30001003單元存放0x12。(5)數據類型
8位、16位、32位三種數據類型(6)ARM處理器中MMU和MPU
MMU存儲器管理單元(memory management unit)功能:
1)虛擬地址到物理地址映射
2)存儲器訪問權限受限
3)虛擬存儲空間的緩沖特性設置
MPU存儲器保護單元(memory protect unit)(7)異常(7種)
32.嵌入式處理器的結構、特點與分類(不同類型的典型嵌入式處理器及其特點,嵌入式處理器分類等)
(1)不同內核嵌入式微控制器性能比較
(2)馮–諾依曼結構和哈佛結構的區別
兩者連接CPU程序存儲器和數據存儲器的方式不同 馮–諾依曼結構
CPU 程序/數據存儲器
哈佛結構
程序存儲器 CPU 數據存儲器程序總線
數據總線(3)分類
按指令集分為:復雜指令集結構CISC和精簡指令集結構RISC 按存儲機制分為:馮–諾依曼結構和哈佛結構 按字長分為:8位、16位、32位、64位結構
按不同內核系列可以分為:
51、AVR、PIC、MSP430、PowerPC、Coldfile、ARM(4)不同典型內核簡介
32.ARM處理器指令系統及匯編語言程序設計(指令格式,尋址方式,指令集,偽指令,語句格式與程序結構,ARM匯編語言與C的混合編程等)(1)指令格式
指令一般格:
{}{S} ,{,}
其中<>不可省
指令格式說明:
關于#imm8m的說明:#表示立即數,其后可以是十進制或十六進制數。
對于ARM指令集,#imm8m表示一個由8位立即數經循環右移任意偶數位次形成的32位操作數。
對于Thumb指令集,#imm8m表示一個由8位立即數經左移任意位次形成的32位操作數。尋址方式:
33.典型ARM處理器內核(ARM9,Cortex-A,Cortex-M,Cortex-R等的技術特點與應用領域)(1)Cortex-A系列是面向高端嵌入式應用的處理器核:具有MMU、Cache、最快頻率、最高性能、合理功耗。
(2)Cortex-R系列是面向實時控制的處理器:具有MPU、Cache、實時響應、合理性能、較低功耗。(3)Cortex-M系列是面向低端微控制器的處理器,沒有MMU但有MPU,極高性價比、最低成本,極低功耗。
34.嵌入式硬件組成與嵌入式處理芯片(組成,特點,類型,ARM的AMBA總線,嵌入式處理芯片的選型)
基于ARM內核的典型嵌入式應用系統硬件組成
典型嵌入式系統硬件由嵌入式最小硬件系統(電源電路、時鐘(晶振)電路、復位電路、JTAG測試接口)、前向通道(輸入接口)、后向通道(輸出接口)、人機交互通道(鍵盤,觸摸屏以及LED或LCD顯示輸出接口)以及相互互聯通信通道(CAN通信接口、以太網通信接口、USB通信接口)等組成。
電源電路為整個嵌入式系統提供能量,是整個系統工作的基礎,具有極其重要的位置。一般來說,如果電源電路處理得好,整個系統的故障往往能顯著減少。選擇設計電源電路是主要考慮以下因素:輸出電壓電流、輸入電壓電流(交流還是直流)、安全因素、體積限制、功耗限制、成本限制。
常用的電源模塊是交流變直流(AC-DC)模塊、直流變直流模塊(DC-DC)、低壓穩壓器(LDO)。穩壓器包括普通穩壓器和低壓差穩壓器LDO。78XX系列屬于普通穩壓器,LM2576/2596為開關穩壓芯片,CAT6219/AS2815/1117/2908等屬于低壓穩壓器。穩壓器的最大特點就是低噪聲、低成本、紋波小、精度高、電路簡單。35.基于ARM內核的典型嵌入式芯片的硬件組成1)存儲器及控制器
片內程序存儲器通常是用Flash ROM,一般配有幾KB到幾MB不等。片內數據存儲器通常使用SRAM,一般幾KB到幾百KB。2)中斷控制器
一般采用向量中斷(VIC)或嵌套向量中斷(NVIC)。Cortex-M支持嵌套的向量中斷。3)DMA控制器(直接存儲器訪問控制器)
使用DMA控制器,可將數據塊從外設傳輸至內存、從內存傳輸至外設或從內存傳輸至內存。
4)電源管理與時鐘控制器
5)GPIO接端口(General Purpose Input Output通用輸入/輸出端口)
作為輸入時具有緩沖功能,而作為輸出是具有鎖存功能,GPIO也可以作為雙向I/O使用。在ARM處理芯片中,GPIO引腳通常是多功能的,以減少引腳數,減少功耗。6)定時計數組件
主要包括看門狗定時器(WDT)監視著程序的運行狀態 Timer通用定時器
用于一般的定時
RTC可直接提供年月日時分秒,使應用系統具有獨立的日期和時間
脈沖寬度調制解調器(PWM)用于脈沖寬度的調制,比如電機控制、用于變頻調整等。7)模擬通道組件
8)互聯通信組件
36.嵌入式處理芯片的選型 1)性價比原則
性能高,價格低 2)參數選擇原則
ARM內核(指令流水線、支持Thumb/Thumb-2指令集、最高時鐘頻率的限制、最低功耗要求以及低成本要求)系統時鐘頻率(頻率越高,處理速度越快;通常ARM芯片的速度主要取決于ARM內核)芯片內部存儲器的容量
片內外圍電路(GPIO外部引腳條數、定時計數器、LCD液晶顯示控制器、多核處理器、ADC、通信接口)
37.常用ARM嵌入式處理芯片
1)NXP的典型ARM芯片
2)TI的典型ARM芯片
3)Samsung的典型ARM芯片
4)Atmel的典型ARM芯片
5)ST的典型ARM芯片
6)Freescale的典型ARM芯片
7)Nuvoton的典型ARM芯片
8)Intel的典型ARM芯片
9)其他ARM芯片廠家 38.頁式存儲管理(重點)
基本思路:把物理內存劃分為許多固定大小的內存塊,稱為物理頁面;把邏輯地址空間也劃分為大小相同的塊,稱為邏輯頁面。當一個用戶程序被裝入內存時,不是以整個程序為單位,把它存放在一整塊連續的區域,而是以頁面為單位來進行分配的。對于一個大小為N 的頁面程序,需要有N 個空閑的物理頁面來把它裝載。這些物理頁面不一定是要連續的。
在頁式存儲管理中需要解決三個問題:數據結構、內存分配與回收、地址映射。
數據結構有兩個:頁表和物理頁面表。
A.頁表:給出了任務邏輯頁面號和內存中物理頁面號之間的對應關系。
B.物理頁面表:描述內存空間中,各個物理頁面的使用情況。
具體的例子請參考《教程》317頁(博客中畫不了圖,有興趣自己看)。
內存的分配過程:
A.對于一個新來的任務,計算它所需要的頁面數N,然后查看位示圖,看是否還有N 個空閑的物理頁面。
B.如果有足夠的空閑物理頁面,就去申請一個頁表,其長度為N,并把頁表的起始地址填入到該任務的控制塊中。
C.分配N 個空閑的物理頁面,把他們的變換填到頁表中,建立邏輯頁面與物理頁面直接的對應關系。
D.修改位示圖,對剛剛被占用的那些物理頁面進行標記。地址映射的基本思路:
A.邏輯地址分析:對邏輯地址,找到它所在的邏輯頁面,以及它在頁面內的偏移地址。
B.頁表查找:根據邏輯頁面號,從頁表中找出它對應的物理頁面號。
C.物理地址合成:根據物理頁面號和頁內偏移地址,最終確定物理地址。
邏輯地址分析:
頁面的大小都是2的整數次冪。對于給定的一個邏輯地址,可以直接把它的高位部分作為邏輯頁面號,把它的低位部分作為頁內偏移地址。例如,假設頁面的大小是4KB,即2的12次冪,邏輯地址為32為,那么在一個邏輯地址當中,最低12位為頁內偏移地址,而剩下的20位就是邏輯頁面號。
計算方法:
邏輯頁面號=邏輯地址/頁面大小
頁內偏移量=邏輯地址%頁面大小
頁表查找:
頁表作為操作系統的一個數據結構,通常保存在內核的地址空間中。
頁表基地址寄存器用來指向頁表的起始地址;頁表長度寄存器用來指示頁表的大小,即對于當前任務,它總共包含有多少個頁面。
物理地址合成:
假設物理頁面號為f,頁內偏移地址為offset,每個頁面大小為2n,那么相應的物理地址為:f×2n+offset。39.虛擬存儲管理
程序局部性原理:時間局限性和空間局限性。
虛擬頁式存儲管理:在頁式管理的基礎上,增加了請求調頁和頁面置換的功能。
基本思路:當一個用戶程序需要調入內存去運行時,不是將這個程序的所有頁面都裝入內存,而是只裝載部分的頁面,就可以啟動這個程序運行。在運行過程中,如果發現要執行的指令或者訪問的數據不在內存當中,就向系統發出缺頁中斷請求,然后系統在處理這個中斷請求時,就會將保存在外存中的相應頁面調入內存,從而使該程序能繼續運行。
在虛擬頁式存儲管理中,頁表包含:邏輯頁面號、物理頁面號、駐留位、保護位、修改位和訪問位。
常用的頁面置換算法:
A.最優頁面置換算法:理想化算法。
B.最近最久未使用算法:鏈表法和棧方法。尋找長時間沒有被訪問的頁面。
C.最不常用算法:每個頁面設置一個訪問計數器。
D.先進先出算法:性能比較差。
E.時鐘頁面置換算法:把頁面組成環形鏈表,類似時鐘面。
一般來說,當一個任務剛剛啟動的時候,它會不斷去訪問一些新的頁面,然后逐步建立一個比較穩定的工作集。工作集是指當前任務正在使用的邏輯頁面的集合。如果分配給一個任務的物理頁面數太少,不能包含整個的工作集,任務將會造成很多缺頁中斷,需要頻繁地進行頁面置換,這種現象稱為“抖動”。40.Flash存儲器
(1)Flash 存儲器是一種非易失性存儲器,根據結構的不同可以將其分為NOR Flash 和NAND Flash 兩種。
(2)Flash存儲器的特點:
A、區塊結構:在物理上分成若干個區塊,區塊之間相互獨立。
B、先擦后寫:Flash 的寫操作只能將數據位從1寫成0,不能從0寫成1,所以在對存儲器進行寫入之前必須先執行擦除操作,將預寫入的數據位初始化為1。擦除操作的最小單位是一個區塊,而不是單個字節。
C、操作指令:執行寫操作,它必須輸入一串特殊指令(NOR Flash)或者完成一段時序(NAND Flash)才能將數據寫入。
D、位反轉:由于Flash 的固有特性,在讀寫過程中偶爾會產生一位或幾位的數據錯誤。位反轉無法避免,只能通過其他手段對結果進行事后處理。
E、壞塊:區塊一旦損壞,將無法進行修復。對已損壞的區塊操作其結果不可預測。
(3)NOR Flash的特點:
應用程序可以直接在閃存內運行,不需要再把代碼讀到系統RAM 中運行。NOR Flash 的傳輸效率很高,在1MB~4MB 的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。
(4)NAND Flash的特點
能夠提高極高的密度單元,可以達到高存儲密度,并且寫入和擦除的速度也很快,這也是為何所有的U盤都使用NAND Flash 作為存儲介質的原因。應用NAND Flash 的困難在于閃存需要特殊的系統接口。41.RAM存儲器
(1)SRAM 的特點:
SRAM 表示靜態隨機存取存儲器,只要供電它就會保持一個值,它沒有刷新周期,由觸發器構成基本單元,集成度低,每個SRAM 存儲單元由6個晶體管組成,因此其成本較高。它具有較高速率,常用于高速緩沖存儲器。
通常SRAM 有4種引腳:
CE:片選信號,低電平有效。
R/W:讀寫控制信號。
ADDRESS:一組地址線。
DATA:用于數據傳輸的一組雙向信號線。
(2)DRAM 的特點:
DRAM 表示動態隨機存取存儲器。這是一種以電荷形式進行存儲的半導體存儲器。它的每個存儲單元由一個晶體管和一個電容器組成,數據存儲在電容器中。電容器會由于漏電而導致電荷丟失,因而DRAM器件是不穩定的。它必須有規律地進行刷新,從而將數據保存在存儲器中。
DRAM 的接口比較復雜,通常有一下引腳:
CE:片選信號,低電平有效。
R/W:讀寫控制信號。
RAS:行地址選通信號,通常接地址的高位部分。
CAS:列地址選通信號,通常接地址的低位部分。
ADDRESS:一組地址線。
DATA:用于數據傳輸的一組雙向信號線。
(3)SDRAM 的特點:
SDRAM 表示同步動態隨機存取存儲器。同步是指內存工作需要同步時鐘,內部的命令發送與數據的傳輸都以它為基準;動態是指存儲器陣列需要不斷的刷新來保證數據不丟失。它通常只能工作在133MHz的主頻。
(4)DDRAM 的特點
DDRAM 表示雙倍速率同步動態隨機存取存儲器,也稱DDR。DDRAM 是基于SDRAM 技術的,SDRAM 在一個時鐘周期內只傳輸一次數據,它是在時鐘的上升期進行數據傳輸;而DDR 內存則是一個時鐘周期內傳輸兩次次數據,它能夠在時鐘的上升期和下降期各傳輸一次數據。在133MHz 的主頻下,DDR內存帶寬可以達到133×64b/8×2=2.1GB/s。42.存儲器系統的層次架構
計算機系統的存儲器被組織成一個金字塔的層次結構。
自上而下為:CPU內部寄存器、芯片內部高速緩存(cache)、芯片外部高速緩存(SRAM、SDRAM、DRAM)、主存儲器(FLASH、EEPROM)、外部存儲器(磁盤、光盤、CF卡、SD卡)和遠程二級存儲器(分布式文件系統、WEB服務器),6個層次的結構。
上述設備從上而下,依次速度更慢、容量更大、訪問頻率更小,造價更便宜。
2、高速緩存(cache)
工作原理(參照教程126頁,博客畫不了圖):主要利用了程序的局部性特點。
地址映象是指把主存地址空間映象到cache的地址空間。
地址變換是指當程序或數據已經裝入到cache后,在實際運行過程中,把主存地址如何編程cache空間的地址。
常用的地址映象和地址變換的方式有:(教程127頁)
直接映象和變換:速度快,造價低,但有局限性,不能充分利用cache的好處。
組相聯地址映象和變換:速度稍慢但是命中率高。
全相聯地址映象和變換:可以任意映射。
常用的cache替換算法:輪轉法和隨機替換算法。
高速緩存的分類:
統一cache和獨立的數據/指令cache
寫通cache和寫回cache
讀操作分配cache和寫操作分配cache 43.I/O接口、I/O設備以及外部通信接口(GPIO、IC、SPI、UART、USB、HDMI等;鍵盤、LED、LCD、觸摸屏、傳感器等;RS-232/RS-485、CAN、以太網和常用無線通信接口)(1)GPIO(通用輸入輸出接口)
在嵌入式處理器內部,輸入具備緩沖功能,輸出具有鎖存功能。GPIO一般有三態:0態、1態、高阻狀態。
(2)集成電路互連總線接口IIC 集成電路互連總線用于連接嵌入式處理器及外圍器件,采用串行半雙工傳輸的總線標準。IIC總線具有的接口線少,控制方式簡單,器件封裝緊湊,通信速率較高(100kb/s,400kb/s,高速模式可達3.4Mb/s)等優點。IIC總線的操作時序
IIC總線只有兩條信號線,一條是數據線SDA,另一條是時鐘線SCL,所有的操作均通過這兩條信號線完成。數據線SDA上的數據必須在時鐘的高電平周期保持穩定,它的高/低電平狀態只有在SCL時鐘信號線是低電平時才能改變。1)啟動和停止條件
總線上的所有器件都不使用總線時,SCL線和SDA線各自的上拉電阻把電平拉高,使它們均處于高電平。主控制器啟動總線操作的條件是當SCL線保持高電平時SDA線有高電平轉為低電平,此時主控制器在SCL產生時鐘信號,SDA線開始傳輸數據。若SCL線為高電平時SDA由低轉為高,則總線工作停止,恢復空閑狀態 2)數據傳送格式 3)應答(ACK)信號傳送 4)讀/寫操作 5)總線仲裁 6)異常中斷條件(3)串行外設接口SPI
(4)串行異步通信接口UART(5)高清多媒體接口HDMI
(6)常用簡單輸入設備(鍵盤、觸摸屏、傳感器)(7)常用簡單輸出設備(LED、數碼管、LCD、)
(8)基于UART的RS—232/RS—485 CAN總線接口
以太網通信接口常用無線通信接口(GPS模塊、GPRS模塊、WiFi模塊、藍牙模塊、射頻無線收發模塊)43.存儲管理單元(MMU)memory management unit MMU在CPU和物理內存之間進行地址轉換,將地址從邏輯空間映射到物理空間,這個過程稱為內存映射。
MMU主要完成下面的工作:
A.虛擬存儲空間到物理空間的映射。
B.存儲器訪問權限的控制。
C.設置虛擬存儲空間的緩沖特性。
嵌入式系統中常常采用頁式存儲管理。為了管理這些頁引入了頁表的概念。
頁表是位于內存中的表,它的每一行對應虛擬存儲空間的一個頁,該行包含了該虛擬內存頁對應的物理內存頁的地址、該頁的訪問權限和該頁的緩沖特性等。
從虛擬地址到物理地址的變換過程就是查詢頁表的過程。
由于頁表存儲在內存中的,整個查詢過程需要付出很大的代價。根據程序局部性的特點,增加了一個小容量、高速度的存儲部件來存放當前訪問需要的地址變換條目,這個存儲部件稱為:地址轉換后備緩沖器(TLB)。
當CPU訪問內存時,首先在TLB中查找需要的地址變換條目,如果該條目不存在,CPU再從內存中的頁表中查詢,并把相應的結果添加到TLB中,更新它的內容。
嵌入式系統中虛擬存儲空間到物理空間的映射以內存塊為單位進行。即虛擬存儲空間中一塊連續的存儲空間被映射到物理存儲空間中同樣大小的一塊連續存儲空間。
在頁表和TLB中,每一個地址變換條目實際上記錄了一個虛擬存儲空間的內存塊的基地址與物理存儲空間相對應的一個內存塊的基地址之間的對應關系。
在MMU中實現虛擬地址到物理地址的映射是通過兩級頁表來實現的。
禁止MMU時,所有物理地址和虛擬地址相等,即使用平板存儲模式。內存保護
操作系統通常利用MMU來實現操作系統內核與應用程序之間的隔離,以及應用程序與應用程序之間的隔離。
內存保護包含兩個方面的內容:
A.防止地址越界,每個應用程序都有自己獨立的地址空間。
B.防止越權操作,每個應用程序都有自己的訪問權限。44.實模式與保護模式
在嵌入式系統中,常見的存儲管理方案可以分為兩大類:實模式和保護模式。
實模式:內存的平面使用模式。特點有:
A.不劃分“系統空間”與“用戶空間”,無須進行地址映射。
B.操作系統與應用程序之間不再有物理的邊界。
C.系統中的“任務”或“進程”,實際上全是內核線程。
在實模式下,內存布局可以分為5個段:
A.代碼段:包含操作系統和應用程序的所有代碼。
B.數據段:所有帶有初始值的全局變量。
C.BSS段:所有未帶初始值的全局變量。
D.堆空間:動態分配的內存空間。
E.棧空間:保存上下文以及函數調用時的局部變量和形參。
在實模式存儲管理方案下,主要的工作在于堆空間的管理,即如何來管理空閑的堆空間、如何來分配內存、如何來回收內存等等。
保護模式:處理器中必須有MMU硬件并啟用。特點有:
A.系統內核和用戶程序都有各自獨立的地址空間。
B.每個應用程序只能訪問自己的地址空間,不能去破壞操作系統和其他應用程序的代碼和數據。45.分區存儲管理
為了實現多道程序系統而采用的內存管理。
基本思路:把整個內存劃分為兩大區域,即系統區和用戶區,然后再把用戶區劃分為若干個分區,每個任務占有其中的一個分區。這樣,在內存當中就同時保留多個任務,讓他們共享整個用戶區,從而實現多個任務的并發運行。
分區存儲管理又可以分為兩類:固定分區和可變分區。
固定分區:各個用戶分區的個數、位置和大小一旦確定后,就固定不變,不能再修改。
優點:易于實現,系統開銷較小。
缺點:內存利用率不高,分區總數固定。
可變分區:動態創建,在裝入一個程序時,系統將根據它的需求和內存空間的使用情況來決定是否分配。
優點:動態變化,非常靈活。
缺點:可能存在外碎片。
在實現可變存儲管理技術的時候,需要考慮三個方面的問題:
A.內存管理的數據結構
B.內存的分配算法
C.內存的回收算法 46.地址映射
地址映射也叫地址重定位。
邏輯地址和物理地址是完全不同的,不能用邏輯地址來直接訪問內存單元。
為了保證CPU在執行指令的時候,可以正確地訪問內存單元,需要將用戶程序中的邏輯地址轉換為運行時由機器直接尋址的物理地址。這個過程稱為:地址映射。
地址映射由存儲管理單元MMU來完成。
地址映射主要有兩種方式:靜態地址映射和動態地址映射。
靜態地址映射:當用戶程序被裝入內存時,直接對指令代碼進行修改,一次性地實現邏輯地址到物理地址的轉換。
動態地址映射:當用戶程序被裝入內存時,不對指令代碼做任何修改,而是在程序的運行過程中,當它需要訪問內存單元的時候,再來進行地址轉換。
在具體實現時,這項轉換工作一般是由硬件的地址映射機制來完成的。通常設置一個基地址寄存器,或者叫重定位寄存器。當一個任務被調度運行時,就把它所在分區的起始地址裝入到整個寄存器中。然后,在程序運行的過程中,當需要訪問某個內存單元時,硬件就會自動地將其中的邏輯地址加上基地址寄存器中的內容,從而得到實際的物理地址,并且按照這個物理地址區執行。
這個基地址寄存器位于MMU的內部,整個地址映射過程是自動運行的。從理論上說,每訪問一次內存都要進行一次地址映射。47.頁式存儲管理(重點)
基本思路:把物理內存劃分為許多固定大小的內存塊,稱為物理頁面;把邏輯地址空間也劃分為大小相同的塊,稱為邏輯頁面。當一個用戶程序被裝入內存時,不是以整個程序為單位,把它存放在一整塊連續的區域,而是以頁面為單位來進行分配的。對于一個大小為N的頁面程序,需要有N個空閑的物理頁面來把它裝載。這些物理頁面不一定是要連續的。
在頁式存儲管理中需要解決三個問題:數據結構、內存分配與回收、地址映射。
數據結構有兩個:頁表和物理頁面表。
A.頁表:給出了任務邏輯頁面號和內存中物理頁面號之間的對應關系。
B.物理頁面表:描述內存空間中,各個物理頁面的使用情況。
具體的例子請參考《教程》317頁(博客中畫不了圖,有興趣自己看)。
內存的分配過程:
A.對于一個新來的任務,計算它所需要的頁面數N,然后查看位示圖,看是否還有N個空閑的物理頁面。
B.如果有足夠的空閑物理頁面,就去申請一個頁表,其長度為N,并把頁表的起始地址填入到該任務的控制塊中。
C.分配N個空閑的物理頁面,把他們的變換填到頁表中,建立邏輯頁面與物理頁面直接的對應關系。
D.修改位示圖,對剛剛被占用的那些物理頁面進行標記。
地址映射的基本思路:
A.邏輯地址分析:對邏輯地址,找到它所在的邏輯頁面,以及它在頁面內的偏移地址。
B.頁表查找:根據邏輯頁面號,從頁表中找出它對應的物理頁面號。
C.物理地址合成:根據物理頁面號和頁內偏移地址,最終確定物理地址。
邏輯地址分析:
頁面的大小都是2的整數次冪。對于給定的一個邏輯地址,可以直接把它的高位部分作為邏輯頁面號,把它的低位部分作為頁內偏移地址。例如,假設頁面的大小是4KB,即2的12次冪,邏輯地址為32為,那么在一個邏輯地址當中,最低12位為頁內偏移地址,而剩下的20位就是邏輯頁面號。
計算方法:
邏輯頁面號=邏輯地址/頁面大小
頁內偏移量=邏輯地址%頁面大小
頁表查找:
頁表作為操作系統的一個數據結構,通常保存在內核的地址空間中。
頁表基地址寄存器用來指向頁表的起始地址;頁表長度寄存器用來指示頁表的大小,即對于當前任務,它總共包含有多少個頁面。
物理地址合成:
假設物理頁面號為f,頁內偏移地址為offset,每個頁面大小為2n,那么相應的物理地址為:f×2n+offset。48.虛擬存儲管理
程序局部性原理:時間局限性和空間局限性。
虛擬頁式存儲管理:在頁式管理的基礎上,增加了請求調頁和頁面置換的功能。
基本思路:當一個用戶程序需要調入內存去運行時,不是將這個程序的所有頁面都裝入內存,而是只裝載部分的頁面,就可以啟動這個程序運行。在運行過程中,如果發現要執行的指令或者訪問的數據不在內存當中,就向系統發出缺頁中斷請求,然后系統在處理這個中斷請求時,就會將保存在外存中的相應頁面調入內存,從而使該程序能繼續運行。
在虛擬頁式存儲管理中,頁表包含:邏輯頁面號、物理頁面號、駐留位、保護位、修改位和訪問位。
常用的頁面置換算法:
A.最優頁面置換算法:理想化算法。
B.最近最久未使用算法:鏈表法和棧方法。尋找長時間沒有被訪問的頁面。
C.最不常用算法:每個頁面設置一個訪問計數器。
D.先進先出算法:性能比較差。
E.時鐘頁面置換算法:把頁面組成環形鏈表,類似時鐘面。
一般來說,當一個任務剛剛啟動的時候,它會不斷去訪問一些新的頁面,然后逐步建立一個比較穩定的工作集。工作集是指當前任務正在使用的邏輯頁面的集合。如果分配給一個任務的物理頁面數太少,不能包含整個的工作集,任務將會造成很多缺頁中斷,需要頻繁地進行頁面置換,這種現象稱為“抖動”。49.嵌入式系統軟件 .嵌入式系統的軟件組成與實時操作系統(嵌入式系統軟件組成,嵌入式操作系統的發展,實時系統與實時操作系統,微內核與宏內核,嵌入式操作系統的仿真平臺等).板級支持軟件包(BSP)和引導加載程序Bootloader(硬件抽象層HAL,BSP 的功能和移植,Bootloader 的執行過程,U-boot 及其移植等).嵌入式Linux 操作系統(嵌入式Linux 的發展和自由軟件,嵌入式Linux 內核的結構、系統調用接口,常見嵌入式Linux 等).嵌入式操作系統μC/OS-II(基本特點、代碼結構、任務管理與調度、任務通信、中斷處理、移植等)50.嵌入式系統的開發
1.嵌入式系統的開發過程和工具(開發步驟,交叉開發平臺和工具,系統的調試工具等)
2.系統開發工具軟件(ADS、RVDS的特點與使用,GCC的常用命令與參數)
3.以S3C2410/S3C2440為背景的應用系統開發(硬件接口及部件的綜合使用;無操作系統環境下的系統開發;μC/OS-II環境下的系統開發)51.嵌入式系統的定義
(1)定義:以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
(2)嵌入式系統發展的4 個階段:無操作系統階段、簡單操作系統階段、實時操作系統階段、面向Internet 階段。
(3)知識產權核(IP 核):具有知識產權的、功能具體、接口規范、可在多個集成電路設計中重復使用的功能模塊,是實現系統芯片(SOC)的基本構件。
(4)IP 核模塊有行為、結構和物理3 級不同程度的設計,對應描述功能行為的不同可以分為三類:軟核、固核、硬核。
52.嵌入式系統的組成:硬件層、中間層、系統軟件層和應用軟件層
(1)硬件層:嵌入式微處理器、存儲器、通用設備接口和I/O 接口。
嵌入式核心模塊=微處理器+電源電路+時鐘電路+存儲器
Cache:位于主存和嵌入式微處理器內核之間,存放的是最近一段時間微處理器使用最多的程序代碼和數據。它的主要目標是減小存儲器給微處理器內核造成的存儲器訪問瓶頸,使處理速度更快。
(2)中間層(也稱為硬件抽象層HAL 或者板級支持包BSP):它將系統上層軟件和底層硬件分離開來,使系統上層軟件開發人員無需關系底層硬件的具體情況,根據BSP 層提供的接口開發即可。
BSP 有兩個特點:硬件相關性和操作系統相關性。
設計一個完整的BSP 需要完成兩部分工作:
A、嵌入式系統的硬件初始化和BSP 功能。
片級初始化:純硬件的初始化過程,把嵌入式微處理器從上電的默認狀態逐步設置成系統所要求的工作狀態。
板級初始化:包含軟硬件兩部分在內的初始化過程,為隨后的系統初始化和應用程序建立硬件和軟件的運行環境。
系統級初始化:以軟件為主的初始化過程,進行操作系統的初始化。
B、設計硬件相關的設備驅動。
(3)系統軟件層:由RTOS、文件系統、GUI、網絡系統及通用組件模塊組成。
RTOS 是嵌入式應用軟件的基礎和開發平臺。
(4)應用軟件:由基于實時系統開發的應用程序組成。53.實時系統
(1)定義:能在指定或確定的時間內完成系統功能和對外部或內部、同步或異步時間做出響應的系統。
(2)區別:通用系統一般追求的是系統的平均響應時間和用戶的使用方便;而實時系統主要考慮的是在最壞情況下的系統行為。
(3)特點:時間約束性、可預測性、可靠性、與外部環境的交互性。
(4)硬實時(強實時):指應用的時間需求應能夠得到完全滿足,否則就造成重大安全事故,甚至造成重大的生命財產損失和生態破壞,如:航天、軍事。
(5)軟實時(弱實時):指某些應用雖然提出了時間的要求,但實時任務偶爾違反這種需求對系統運行及環境不會造成嚴重影響,如:監控系統、實時信息采集系統。