![嵌入式系統(tǒng)設(shè)計的最后知識點總結(jié)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/dc27ff4d-9edd-492f-bef9-bc459421ed46/dc27ff4d-9edd-492f-bef9-bc459421ed461.gif)
![嵌入式系統(tǒng)設(shè)計的最后知識點總結(jié)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/dc27ff4d-9edd-492f-bef9-bc459421ed46/dc27ff4d-9edd-492f-bef9-bc459421ed462.gif)
![嵌入式系統(tǒng)設(shè)計的最后知識點總結(jié)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/dc27ff4d-9edd-492f-bef9-bc459421ed46/dc27ff4d-9edd-492f-bef9-bc459421ed463.gif)
![嵌入式系統(tǒng)設(shè)計的最后知識點總結(jié)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/dc27ff4d-9edd-492f-bef9-bc459421ed46/dc27ff4d-9edd-492f-bef9-bc459421ed464.gif)
![嵌入式系統(tǒng)設(shè)計的最后知識點總結(jié)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/16/dc27ff4d-9edd-492f-bef9-bc459421ed46/dc27ff4d-9edd-492f-bef9-bc459421ed465.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、系統(tǒng)概念1、 嵌入式系統(tǒng)的定義?以應(yīng)用為中心、以計算機(jī)技術(shù)為基礎(chǔ)、軟硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機(jī)系統(tǒng)。“嵌入”、“專用”、“計算機(jī)”2、 嵌入式系統(tǒng)的軟、硬件組成?以及主要特點?軟件:從底層到上層:bootloader等系統(tǒng)初始化引導(dǎo)程序、設(shè)備驅(qū)動層(包括驅(qū)動程序、板級支持包BSP等)、操作系統(tǒng)、用戶應(yīng)用程序。(底層為上層提供服務(wù))開發(fā)軟件:即集成開發(fā)環(huán)境(asemmbler&&compiler&&linker&&debugger&&loader)硬件組成:核心板+外圍板+外設(shè)(核心
2、板:微控制器(CPU和外設(shè)接口、外設(shè)控制器)、電源、時鐘、復(fù)位、SDRAM、flash。外圍板面向外圍設(shè)備,一般是引腳的集合、電平轉(zhuǎn)換電路。外圍設(shè)備。),當(dāng)然也可以將核心板和外圍板放在一起。硬件特點:通常由嵌入式處理器和嵌入式外圍設(shè)備組成,高度集成,常采用SOC設(shè)計方法,對功耗、體積等有嚴(yán)格要求,定制性決定了它的可裁剪性,沒有像計算機(jī)領(lǐng)域的壟斷,解決方案不唯一。軟件特點:采用交叉開發(fā)方式,系統(tǒng)軟件層次分明,操作系統(tǒng)為用戶程序提供標(biāo)準(zhǔn)API,提供圖形接口和文件系統(tǒng)。用戶調(diào)用系統(tǒng)服務(wù),系統(tǒng)調(diào)用設(shè)備驅(qū)動從而操縱硬件。3、 嵌入式系統(tǒng)產(chǎn)品設(shè)計的基本流程?需求分析 功能性需求是系統(tǒng)的基本功能,如輸入輸出
3、信號、操作方式等; 非功能性需求包括系統(tǒng)性能、成本、功耗、體積、重量等因素。規(guī)格說明精確地反映客戶的需求并且作為設(shè)計時必須明確遵循的要求。體系結(jié)構(gòu)設(shè)計描述系統(tǒng)如何實現(xiàn)所述的功能和非功能需求,包括對硬件、軟件和執(zhí)行裝置的功能劃分以及系統(tǒng)的軟件、硬件選型等。軟硬件設(shè)計基于體系結(jié)構(gòu),對系統(tǒng)的軟件、硬件進(jìn)行詳細(xì)設(shè)計。系統(tǒng)集成把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進(jìn)行調(diào)試,發(fā)現(xiàn)并改進(jìn)單元設(shè)計過程中的錯誤。系統(tǒng)測試對設(shè)計好的系統(tǒng)進(jìn)行測試,看其是否滿足規(guī)格說明書中給定的功能要求。4、 處理器及操作系統(tǒng)的選型主要考慮哪些方面? 操作系統(tǒng)本身所提供的開發(fā)工具。 操作系統(tǒng)向硬件接口移植難度。 操作系統(tǒng)的內(nèi)存要求
4、。 開發(fā)人員是否熟悉此操作系統(tǒng)及其提供的系統(tǒng)API。 操作系統(tǒng)是否提供硬件的驅(qū)動程序,如網(wǎng)卡驅(qū)動程序等。 操作系統(tǒng)的是否具有可剪裁性。 操作系統(tǒng)是否具有實時性能。5、 交叉開發(fā)、交叉開發(fā)環(huán)境?為何需要交叉開發(fā)環(huán)境?在一臺通用計算機(jī)(宿主機(jī))上進(jìn)行軟件的編輯編譯,然后下載到嵌入式設(shè)備(目標(biāo)機(jī))中運(yùn)行調(diào)試的開發(fā)方式交叉開發(fā)環(huán)境一般由運(yùn)行于宿主機(jī)上的交叉開發(fā)軟件(assembler&&compiler&&linker&&debugger&&loader)、宿主機(jī)到目標(biāo)機(jī)的調(diào)試通道組成需要交叉開發(fā)環(huán)境是因為目標(biāo)機(jī)一般對體積、功耗等有嚴(yán)格限
5、制,資源也面向應(yīng)用,較為緊張,要求僅僅能流暢運(yùn)行代碼即可,而將用戶開發(fā)軟件(包括各種庫、工具)放置在主機(jī)上,而且現(xiàn)在的集成開發(fā)環(huán)境提供了各種修改好的功能庫,用起來也方便。6、 嵌入式集成開發(fā)環(huán)境的主要功能?這是由其組成決定的。Assembler將.c源代碼匯編,compiler形成目標(biāo)文件,linker根據(jù)鏈接描述文件將各個目標(biāo)代碼鏈接定位生成可執(zhí)行代碼。Debugger有些交叉開發(fā)工具提供了仿真調(diào)試通道。Loader可以將目標(biāo)文件燒錄進(jìn)設(shè)備中(有時需要內(nèi)部引導(dǎo)代碼的配合)7、 嵌入式Linux 開發(fā)主要流程?搭建開發(fā)環(huán)境-燒寫bootloader-燒寫內(nèi)核-燒寫根文件系統(tǒng)-燒寫應(yīng)用程序。開發(fā)
6、環(huán)境:REDHATLINUX、下載相應(yīng)的GCC 交叉編譯器進(jìn)行安裝、配置開發(fā)主機(jī)(配置MINICOM和配置網(wǎng)絡(luò),MINICOM 軟件的作用是作為調(diào)試嵌入式開發(fā)板信息輸出的監(jiān)視器和鍵盤輸入的工具,配置網(wǎng)絡(luò)主要是配置IP地址、NFS 網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻)燒寫bootloader下載一些公開源代碼的BOOTLOADER根據(jù)自己具體芯片進(jìn)行移植修改。下載時,有些芯片沒有內(nèi)置引導(dǎo)裝載程序,比如三星的ARM7、ARM9 系列芯片,這樣就需要編寫燒寫開發(fā)板上flash 的燒寫程序?;蛘呔W(wǎng)絡(luò)上有免費(fèi)下載的WINDOWS 下通過JTAG 并口簡易仿真器燒寫ARM 外圍flash 芯片的程序。也有LIN
7、UX 下公開源代碼的J-FLASH 程序。下載內(nèi)核如果有專門針對你所使用的CPU 移植好的LINUX 操作系統(tǒng)那是再好不過,下載后再添加自己的特定硬件的驅(qū)動程序,進(jìn)行調(diào)試修改。下載根文件系統(tǒng)從 下載使用BUSYBOX 軟件進(jìn)行功能裁減,產(chǎn)生一個最基本的根文件系統(tǒng)。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,需要使用mkcramfs 、genromfs 等工具產(chǎn)生燒寫映象文件。(文件系統(tǒng)就是把你硬盤上數(shù)據(jù)按照一定格式組織成一棵樹。數(shù)據(jù)塊對應(yīng)名稱。刪了它就相當(dāng)于把硬盤格式化了。根文件系統(tǒng)就是出了內(nèi)核以外,所有的系統(tǒng)文件存儲的地方。之所以成為根,是因為有根才能成生長成樹,是其它文件的最終掛載點。我們要明白
8、根文件系統(tǒng)和內(nèi)核是完全獨立的兩個部分,它是內(nèi)核啟動時所mount的第一個文件系統(tǒng),里面有內(nèi)核啟動所必須的數(shù)據(jù),不然就退出啟動文件系統(tǒng)這種機(jī)制有利于用戶和操作系統(tǒng)的交互。數(shù)據(jù)塊對應(yīng)名稱。盡管內(nèi)核是 Linux 的核心,但文件卻是用戶與操作系統(tǒng)交互所采用的主要工具,尤其是LINUX。)下載用戶程序可以下載到根文件系統(tǒng)中,有的應(yīng)用程序不使用根文件系統(tǒng),而是直接將應(yīng)用程序和內(nèi)核設(shè)計在一起,這有點類似于UCOS-II的方式。8、 嵌入式Linux 開發(fā)環(huán)境中配置NFS服務(wù)的目的?可以使不同機(jī)器、不同操作系統(tǒng)之間通過網(wǎng)絡(luò)共享文件,像訪問本地文件一樣訪問遠(yuǎn)端系統(tǒng)上的文件,在開發(fā)階段,主機(jī)制作基于NFS的文件
9、系統(tǒng),制定開放目錄,開放對象的IP范圍,將目錄掛載到嵌入式設(shè)備后,嵌入式設(shè)備可以方便地訪問、修改主機(jī)主機(jī)文件。9、 硬件重定向?上課的時候老師舉得printf()是個很好的例子,重定向程序是面向編譯環(huán)境中的連接器的,是用戶自己定義的C庫函數(shù),有了它,在程序連接時連接器會連接用戶自己編寫的C庫中的功能函數(shù)而不是標(biāo)準(zhǔn)C庫。相當(dāng)于將標(biāo)準(zhǔn)C庫進(jìn)行了一次移植。從主機(jī)環(huán)境到實際運(yùn)行環(huán)境的移植。比如:本來庫函數(shù)fputc()是把字符輸出到調(diào)試器控制窗口中去的,但用戶把輸出設(shè)備改成了UART端口,這樣一來,所有基于fputc()函數(shù)的printf()系列函數(shù)輸出都被重定向到UART端口上去了。相當(dāng)于實現(xiàn)類似的
10、功能,但是底層的驅(qū)動變了。10、你認(rèn)為一名好的嵌入式系統(tǒng)設(shè)計專業(yè)學(xué)生,應(yīng)具備哪些能力?如何培養(yǎng)和提高這些能力?專業(yè)技能:微機(jī)原理的知識,即知道微處理器的工作過程、工作原理,對51單片機(jī)、X86T體系、ARM體系的架構(gòu)有一定的認(rèn)識、。電路知識,雖然在系統(tǒng)設(shè)計中,硬件只占30%的工作量,而且隨著系統(tǒng)復(fù)雜度的提高,對硬件的關(guān)心越來越少,但是對電路的了解程度會限制你代碼的優(yōu)化,是有寄存器編程不了解底層電路根本編不出程序來,而且在硬件出現(xiàn)問題的時候,要有能力準(zhǔn)確判斷。操作系統(tǒng),隨著ARM在嵌入式系統(tǒng)中占據(jù)主導(dǎo)地位,單片機(jī)已經(jīng)退出復(fù)雜應(yīng)用,操作系統(tǒng)引入了嵌入式系統(tǒng)設(shè)計中,在操作系統(tǒng)提供的平臺上做開發(fā),對操
11、作系統(tǒng)功能、使用、層次組成的理解的重要性不言而喻。算法與數(shù)學(xué),這關(guān)系著軟件代碼的優(yōu)化實現(xiàn),在高層次的編程中,算法結(jié)構(gòu)和數(shù)學(xué)知識將發(fā)揮很大的作用。控制理論,因為嵌入式系統(tǒng)實現(xiàn)的最主要的功能就是智能控制,對控制思想、控制算法、控制理論的理解有一定的重要性。專業(yè)思維:對嵌入式軟硬件層次相當(dāng)了解;對開發(fā)環(huán)境及其原理開發(fā)流程有一定的認(rèn)識;計算思維:將計算思想、能力貫穿于“需選改用學(xué)”,解決計算問題,一切歸于二進(jìn)制。職業(yè)病思維:用嵌入式系統(tǒng)的思維去分析生活中遇到的設(shè)備,如果能分析明白或者做出推測,將是一件很開心的事情。“編碼”思想:其實整個計算機(jī)世界,都體現(xiàn)著一種“編碼”思想,人如何與機(jī)器交互、器件之間如
12、何交互、通信雙方如何定義通信協(xié)議,這都體現(xiàn)著編碼的思想。管理的思維:因為在復(fù)雜的計算機(jī)系統(tǒng)也是人設(shè)計得,各模塊的工作協(xié)調(diào)無處不散發(fā)著管理的思想,把系統(tǒng)調(diào)用抽象為人事安排,將變得很有愛。要相信你要你想到的解決問題的方法(算法),肯定能編出來。要相信,真理肯定是存在的,你還沒有到遇到未解之謎的程度,即只要是問題就能解決,遇到需要反復(fù)測試的時候,不能氣餒,也許只是哪個知識點理解的有偏頗,離真理只有一步之遙。從歷史看起、從總體看起:用歷史的眼光和謙虛但不自卑的態(tài)度看待復(fù)雜的系統(tǒng)和知識,這樣一切就都簡單又好理解。認(rèn)識指導(dǎo)實踐,實踐反作用認(rèn)識。管理的思想。個人品質(zhì):不悲不喜:在嵌入式開發(fā)過程中,會有一個又
13、一個問題出現(xiàn),不要因為一個問題的解決和擱置而悲喜,更大的喜劇在前方,也許更大的悲劇也在醞釀。勇于鉆研:對解決問題有強(qiáng)烈的向往,有征服的渴望。所以一些很恬淡的人往往不會成為IT行業(yè)的精英。并從中找到成就感、存在感樂在其中:俗話說興趣是最好的老師,拿欣賞的眼光看待內(nèi)核的管理思想、看待精妙的算法、看待精密的電路設(shè)計,你會發(fā)現(xiàn)一切都美好起來。要會學(xué)習(xí):有強(qiáng)大的學(xué)習(xí)能力,要會查資料、會聊天、會推測。用“學(xué)道”的思維去學(xué)習(xí)一切知識,抓住本質(zhì),老子說,為學(xué)日益,為道日損,損之又損,以至于無為,無為而無不為。,最復(fù)雜的科學(xué),也能用最樸素的話解釋。用歷史的眼光、用總體的眼光去學(xué)習(xí)。耐得住寂寞還得有興趣愛好。有時
14、會比較枯燥和辛苦,除了對專業(yè)的興趣之外,最好能有些調(diào)節(jié)生活的興趣愛好,比如唱歌、畫畫、旅行、攝影、健身等等。如何提高?因為嵌入式系統(tǒng)設(shè)計所涉及的知識面相當(dāng)廣,微機(jī)原理知識、電路知識、接口知識、操作系統(tǒng)、甚至是控制理論、數(shù)學(xué)計算等等,所以單單學(xué)習(xí)知識點的話,會很枯燥而且提高很慢,一切以應(yīng)用為中心,在做項目中成長,加深理解,邊學(xué)變做,把解決問題當(dāng)做學(xué)習(xí)的目標(biāo)。找若干良師益友,他們能帶給你好的影響,包括做項目和做人,在與他們的交流共事中你可以迅速提高。大量的閱讀,開闊眼界,了解當(dāng)前行業(yè)的發(fā)展?fàn)顩r,大量閱覽一些典型系統(tǒng)的設(shè)計,所謂書到用時方很少是很有道理的。學(xué)一些跟專業(yè)相關(guān)的知識,如數(shù)據(jù)庫、網(wǎng)站設(shè)計等
15、,不但能在設(shè)計系統(tǒng)時打開思維,還可以給IT男換個口味,陶冶一下情操。ARM體系結(jié)構(gòu)11、 ARM硬件電路最小系統(tǒng)組成?微控制器(例如2410,CPU+外設(shè)接口/外設(shè)控制器)電源、時鐘、復(fù)位、存儲器(SDRAM/FLASH(NOR8位、NAND8 16 32位) FLASH:存放操作系統(tǒng)、用戶程序等需要掉電后保存的數(shù)據(jù) SDRAM:系統(tǒng)運(yùn)行的主要區(qū)域,系統(tǒng)及用戶數(shù)據(jù)及堆棧,都在這個區(qū)域。有時啟動模式選擇有時需要JTAG:對芯片內(nèi)所有部件進(jìn)行訪問,通過該接口對系統(tǒng)調(diào)試、編程12、 ARM處理器的主要工作模式?ARM的7種處理器模式(不同的模式下有自己的行為準(zhǔn)則)USR;正常程序執(zhí)行模式FIQ;支持
16、高速數(shù)據(jù)傳送和通道處理IRQ;用于通用中斷的處理。管理(SVC);操作系統(tǒng)保護(hù)模式中止未定義系統(tǒng)除了USR之外,其它6種又稱為特權(quán)模式。6中種除了系統(tǒng)模式又稱為異常模式(即處理異常時的工作模式)。在軟件控制下可以改變模式(即改變CPSR相應(yīng)),外部中斷或異常處理也引起模式變化,用戶模式下不能改變模式。13、核心寄存器的作用:R13通常用作堆棧指針,稱為SP,被初始化為多個模式下的堆棧。R14用作子程序連接寄存器LR,中斷異?;驁?zhí)行BL時得到PC即R15的備份。Cpsr程序狀態(tài)寄存器,32位只用12位,所有模式下均可見。Spsr保存程序狀態(tài)寄存器,即發(fā)生異常時對CPSR進(jìn)行保存,保存當(dāng)前狀態(tài)。5
17、個異常模式下均有各自的SPSR。14、 ARM處理器的啟動過程?首先,看一下,ARM啟動時的硬件機(jī)制,上電產(chǎn)生復(fù)位異常,CPU強(qiáng)制PC為0x00000000,執(zhí)行復(fù)位異常處理函數(shù),接下來就相當(dāng)于執(zhí)行了STRARTUP.S的功能。是給用戶程序執(zhí)行給以合適的工作環(huán)境,設(shè)置中斷向量表、堆棧、時鐘、完成內(nèi)存拷貝等,相當(dāng)于STARTUP.S或者bootloader的前端代碼,是開機(jī)執(zhí)行的程序。.拿2410的啟動代碼舉例,它啟動CPU的過程是:1、在起始地址分配中斷向量表即中斷處理函數(shù)(CPU要求的),以為向量空間只有4字節(jié),所以一般只是一個跳轉(zhuǎn)指令,去別處執(zhí)行。在跳到復(fù)位異常之后,關(guān)閉中斷,關(guān)閉看門狗。
18、/2、之后初始化存儲器系統(tǒng)3、初始多個模式下的堆棧(模式切換時,硬件給SP置位)/4、初始化有特殊要求的外圍設(shè)備,如LED燈、看門狗5、初始化用戶的執(zhí)行環(huán)境(在FLASH中運(yùn)行太慢了,把代碼整體搬遷到RAM中)/6、切換處理器的工作模式7、調(diào)用主程序15、當(dāng)正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常對異常的處理有優(yōu)先級,處理異常需要跳轉(zhuǎn)至異常模式。并根據(jù)異常向量跳轉(zhuǎn)至響應(yīng)的子程序(執(zhí)行之前必須保存現(xiàn)場),即異常出現(xiàn)后強(qiáng)制跳轉(zhuǎn)至固定的存儲器地址執(zhí)行。異常是比中斷更大的概念。ARM有7種異常。包括復(fù)位 管理模式 0x00000000軟中斷SWI 管理模式 0x00000008IRQ IRQ模式
19、 0x00000018FIQ FIQ模式 0x0000001c還包括預(yù)取中止、數(shù)據(jù)中止、未定義。(異常出現(xiàn)時,異常模式分組的R14和SPSR用于保存下一條程序地址和CPSR。異常返回時,SPSR->CPSR,R14->PC)在啟動代碼中首先就是設(shè)置所謂的異常向量表,也就是在指定的位置放置異常處理程序(一般是跳轉(zhuǎn)指令)。異常發(fā)生時,CPU會根據(jù)規(guī)定強(qiáng)制置PC,恰好去執(zhí)行我們設(shè)置好的跳轉(zhuǎn)指令,接著執(zhí)行服務(wù)程序。異常處理流程:(硬件機(jī)制,只做這些,跟代碼無關(guān)。)1、根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位 2、在切換到的異常模式下,在當(dāng)前的鏈接寄存器LR (r14)中保存上個模式的PC
20、值-4,以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行 3、將上一個模式的CPSR復(fù)制到當(dāng)前異常模式的SPSR中(注意1與2、3的矛盾,不能獨立執(zhí)行,但是是硬件實現(xiàn)的,無關(guān)代碼)4、強(qiáng)制PC。然后就到了執(zhí)行代碼的時候從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。異常返回流程:(有指令)1、將LR寄存器中的值減去相應(yīng)的偏移量(對于IRQ/FIQ是4)送到PC中2.、將 SPSR 復(fù)制回 CPSR(注意1與2的矛盾,不能獨立執(zhí)行,用一條帶的指令執(zhí)行,怎么著都是一條)3、清除禁止中斷標(biāo)志,如果它被設(shè)置成使能4、所有修改過的用戶寄存器必須從處理程序的保護(hù)堆棧中恢復(fù)(即出棧)
21、。對中斷嵌套的處理:注意:1、 保存在LR中的PC值,和該值返回時的處理過程。當(dāng)IRQ異常中斷產(chǎn)生時,程序計數(shù)器pc的值已經(jīng)更新,它指向當(dāng)前指令后面第3條指令(對于ARM指令,它指向當(dāng)前指令地址加12字節(jié)的位置;當(dāng)IRQ異常中斷產(chǎn)生時,處理器將值(pc-4)保存到IRQ異常模式下的寄存器lr_irq中,它指向當(dāng)前指令之后的第2條指令,因此返回操作可以通過下面指令實現(xiàn):subs pc, lr, #4有兩種返回機(jī)制:1、 當(dāng)返回地址保存在當(dāng)前異常模式的r14時使用其中一種機(jī)制2、 當(dāng)返回地址保存在堆棧時使用另一種機(jī)制(進(jìn)中斷的時候保存的)。 1、 SUBS PC,R14_f
22、iq ,#4 (不同模式有不同的指令,返回PC的同時返回CPSR,一條指令實現(xiàn))2、 SUB LR,LR,#4 STMFD R13!,R0,R4-R12,LR;將寄存器列表中的寄存器R0,R4到R12,LR存入堆棧。 LDMFD R13!,R0,R4-R12,PC ;將堆棧內(nèi)容恢復(fù)到寄存器R0,R4到R12,PC,同時SPSR復(fù)制到CPSR 為可選后綴,當(dāng)指令為LDM且寄存器列表中包含R15,選用該后綴時表示:除了正常的數(shù)據(jù)傳送之外,還將SPSR復(fù)制到CPSR,一條指令實現(xiàn)。代碼指令分析:AREAInit,CODE,READONLY;代碼段Init、只讀CODE32;32位ARM指令集LDRR
23、0,NEXT1;給R0賦地址值BXR0;程序跳,并將處理器切換到Thumb工作狀態(tài)CODE16;16位thumb指令集NEXTLDRR3,0x3FF給R3賦值END16、高級語言和匯編語言函數(shù)間的相互調(diào)用(應(yīng)該會考) :匯編調(diào)用C:IMPORT Main;通知編譯器該標(biāo)號為一個外部標(biāo)號AREA Init,CODE,READONLY;定義一個代碼段ENTRY;定義程序的入口點LDRR0,=0x3FF0000;初始化系統(tǒng)配置寄存器LDRR1,=0xE7FFFF80STRR1,R0LDRSP,=0x3FE1000;初始化用戶堆棧BLMain;跳轉(zhuǎn)到Main()函數(shù)處的C/C+代碼執(zhí)行END;標(biāo)識匯編
24、程序的結(jié)束 以上的程序段完成一些簡單的初始化,然后跳轉(zhuǎn)到Main()函數(shù)所標(biāo)識的C/C 代碼處執(zhí)行主要的任務(wù),此處的Main僅為一個標(biāo)號,也可使用其他名稱。17、程序代碼段的組成分析、例如:標(biāo)注下面程序各條語句中的含義AREA Init , CODE , READONLY ;已定義代碼段ENTRY;程序入口LDR R0, =0x3ff5000;R0賦寄存器地址值LDR R1, 0x0f;要給寄存器賦的值STR R1,R0;賦值LDR R0, =0x3ff5008LDR R1, 0x01STR R1,R0;給另一個寄存器賦值的過程BL PROC;跳轉(zhuǎn)至標(biāo)號為PROC的程序出執(zhí)行:PROC:MOV
25、 PC, LR /將LR保存的程序指針返回,即跳到BL下一句接著執(zhí)行:END2410設(shè)計18、 闡述CPU、外設(shè)、外設(shè)控制器、時序、寄存器的相互關(guān)系?CPU與外設(shè)控制器構(gòu)成微處理器,微處理器在核心板(最小系統(tǒng))上發(fā)揮作用,將引腳集合成外設(shè)接口加上電平轉(zhuǎn)換等就是外圍板,外設(shè)通過外圍板連接至外設(shè)控制器。CPU通過寄存器編程控制外設(shè)控制器產(chǎn)生時序控制外設(shè)。若是沒有外設(shè)控制器,則需要CPU自己產(chǎn)生時序來與外設(shè)交互,這種時序相當(dāng)于一種約定好的意思表示,相當(dāng)于“語言”或者“通信協(xié)議”,例如若是2410與一個帶有IIC接口的器件通信,只需要連接起來,對IIC進(jìn)行寄存器編程,控制它們之間的工作模式,可能收發(fā)數(shù)
26、據(jù)就變成了在中斷中讀寫寄存器操作,屏蔽了IIC規(guī)定的通信細(xì)節(jié)。若是51單片機(jī)要與IIC通信的話,就復(fù)雜多了,首先要仔細(xì)閱讀IIC的協(xié)議,不容絲毫差錯,然后用IO口模擬時序,CPU的工作量很大。19、 寄存器編程的本質(zhì)?如何獲取寄存器的配置?寄存器編程的本質(zhì)是CPU控制外設(shè)寄存器工作模式的方法??梢韵胂蠹拇嫫鞯拿恳晃豢隙ㄊ峭庠O(shè)控制器功能模塊中的一個個“開關(guān)”,給某一位賦值0或者1,就相當(dāng)于使能或關(guān)閉某一個功能。20、2410最小電路設(shè)計?(晶振選擇、啟動選擇、數(shù)據(jù)寬度)與一般的ARM系統(tǒng)相同,都需要微處理器、電源、晶振、復(fù)位、存儲器(flash、SDRAM)、JTAG接口等,具體情況如下:(需要
27、對OM0和OM1配置電平以決定啟動方式,對OM2和OM3配置電平以決定時鐘源。)電源設(shè)計:處理器用1.8V,RTC給時鐘模塊供電1.8V,存儲器和普通IO用3.3V,ADC模塊用3.3V,可見最小系統(tǒng)最少要用3.3和1.8兩種直流穩(wěn)壓。課程實驗中電源電壓5V,分別用LM1085穩(wěn)壓3.3V,用AS1117穩(wěn)壓1.8V。晶振設(shè)計2410的時鐘控制邏輯可以產(chǎn)生系統(tǒng)所需要的時鐘,包括CPU的FCLK,和AHB總線的HCLK,APB的PCLK。內(nèi)部有兩個鎖相環(huán)PLL,MPLL提供前三個,UPLL給USB提供48MHZ的時鐘。主時鐘源(UPLL和MPLL的時鐘源)可以選擇是來自外部時鐘還是外部晶振,這是
28、由OM2和OM3的管腳確定的,可以O(shè)M2和OM3同時接低電平,選擇外部晶振,12M晶振加上15pF起振電容(經(jīng)過鎖相環(huán)倍頻可以達(dá)到203M)。復(fù)位電路設(shè)計可以在nRESET端設(shè)計像51單片機(jī)那樣的阻容復(fù)位電路,但為了穩(wěn)定,可以使用復(fù)位芯片如MAX811或IMP811。JTAG接口設(shè)計有20針和14針兩種JTAG接口。存儲器設(shè)計2410有自己的存儲器控制器,并且規(guī)定了哪些bank空間是RAM哪些是FLASH,存儲器芯片嚴(yán)格按照DATASHEET上的要求和標(biāo)明的引腳連接方式與存儲器控制器的存儲器接口相連就可以,控制器會根據(jù)地址產(chǎn)生讀寫存儲器芯片的時序,完成存取數(shù)據(jù)的操作。21、2410nor和na
29、nd啟動過程分析?NOR flash:讀取速度高、而擦寫速度低,容量小,價格高,地址線和數(shù)據(jù)線分開,采用SRAM接口。NAND flash :讀速度不如NORflash 但是擦寫速度高,容量大,價格低,有取代硬盤的趨勢,但是地址線和數(shù)據(jù)復(fù)用,需要程序配合才能讀寫數(shù)據(jù)??梢酝ㄟ^跳線設(shè)置時從NAND FLASH啟動還是從NOR FLASH啟動。NAND啟動的優(yōu)勢:便宜、容量大。但是讀寫邏輯不能用硬件產(chǎn)生,也就是沒辦法接到BANK空間里,必須有程序配合才能讀寫(有專門的控制器接口,肯定要寄存器編程加上程序配合才能讀寫,沒有PC的根正苗紅),所以理論上它是不可以用來啟動系統(tǒng)的,因為那之前什么程序都沒有
30、,要想讀寫它必須是系統(tǒng)裝載完了而且有程序了。但是三星采用了SRAM映射解決了這個問題,下面就是這個過程:電路中使OM1和OM0都接低電平,從NAND FLASH中啟動。(2410有NAND FLASH控制器,連接NAND Flash芯片,產(chǎn)生讀寫時序)在該模式下,2410的前4KB地址空間對應(yīng)一個名字叫做“起步石”的SRAM,系統(tǒng)啟動時,自動將NAND FLASH的前4KB數(shù)據(jù)加載到起步石中,然后系統(tǒng)自動執(zhí)行這些啟動引導(dǎo)代碼,CPU從內(nèi)部RAM的0x00000000位置開始啟動。這個過程不需要程序干涉。也就是類似于STARTUP.S的功能,初始化異常向量表、堆棧、將NAND FLASH中的代碼
31、(有代碼支持嘍)拷貝到SDRAM中運(yùn)行。NOR FLASH 采用的的是SRAM接口,可以直接到存儲器控制器上,ARM內(nèi)核產(chǎn)生的時序能對其讀寫。將bank0上接上NORflash芯片。上電產(chǎn)生復(fù)位異常后會自動從NOR flash中啟動。22、 S3C2410的中斷處理流程?首先應(yīng)該明確2410與ARM內(nèi)核的異常處理系統(tǒng)的角色,根據(jù)之前的ARM異常處理流程,我們清楚明了了哪些是CPU的硬件機(jī)制。2410通過中斷控制器允許以優(yōu)先級的方式將幾十個中斷源共同用一個IRQ。一個中斷申請?zhí)岢龊?,IRQ異常發(fā)生,切換模式、保存CPSR、保存PC,然后跳轉(zhuǎn)到handleIRQ函數(shù),然后跳轉(zhuǎn)到ISRIRQ(這只是
32、一個大概流程,也許會定義更多的跳轉(zhuǎn))根據(jù)中斷源向量表的首地址和偏移量寄存器找出到底是哪個中斷發(fā)生了。然后跳轉(zhuǎn)到相應(yīng)的中斷處理函數(shù),比如跳到串口中斷,還可以根據(jù)掛起位(即中斷標(biāo)志位)再次判斷到底是接收中斷還是發(fā)送完成中斷。也就是說2410處理流程除了ARM對異常的響應(yīng)是硬件機(jī)制外,其余的都是代碼實現(xiàn)的。我們在編程的時候沒有寫的話,那也是編譯器加進(jìn)去的。2410對嵌套的處理比起2410的處理流程不同的是,因為有了中斷控制器,這就是實現(xiàn)高優(yōu)先級嵌套的硬件基礎(chǔ),因為每一次進(jìn)入異常模式用戶都會保存環(huán)境,這就是中斷嵌套的軟件基礎(chǔ)。CPU的異常處理機(jī)制總是那些,很明確的。我正在執(zhí)行一個中斷服務(wù)程序,然后再次
33、發(fā)生異常,保存,跳轉(zhuǎn)(CPU)、再次判斷是哪個中斷,進(jìn)去之后壓棧,運(yùn)行另一個中斷的服務(wù)程序,運(yùn)行完返回,這是就是返回到上一個中斷了。上一個中斷運(yùn)行完,一返回就是返回發(fā)生異常前的狀態(tài)。23、 S3C2410的串口、端口、外部中斷、AD等及寄存器的編程能力(會讀datasheet、會編程、作業(yè)、實驗的相關(guān)代碼)ARM的匯編語言程序.PPT仔細(xì)閱讀DATASHEET,記住寄存器的賦值指令。LDR R0,=GPHCONLDR R1,=0X2AFAAASTR R1,R024、 時鐘、看門狗的相關(guān)概念時鐘為整個系統(tǒng)提供同步脈沖,像人的脈搏一樣??撮T狗:其實是一個計數(shù)器,當(dāng)它計數(shù)溢出的時候,會使系統(tǒng)復(fù)位,所
34、以它的作用是防止系統(tǒng)死機(jī)。打開看門狗之后,當(dāng)代碼跑飛或者陷入死循環(huán)之后,就不能喂狗,也就是不能清除計數(shù)值,那么它就會使系統(tǒng)重啟。VIVI25、 什么是bootloaderBootloader,為引導(dǎo)加載程序,是嵌入式系統(tǒng)加電后運(yùn)行的第一段代碼,相當(dāng)于PC機(jī)的BIOS。 Bootloader在系統(tǒng)中的位置通常固化在硬件上的某個固態(tài)存儲設(shè)備上,加電后自啟動。Bootloader功能初始化,給CPU合適的工作環(huán)境(相當(dāng)于STARTUP.S),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序境。加載內(nèi)核下載內(nèi)核或者根文件系統(tǒng)。Bootloader操作模式 有啟動加載和下載兩種模式。啟動加載模式是 Bootlo
35、ader的正常工作模式,在嵌入式產(chǎn)品發(fā)布的時侯,Bootloader必須工作在這種模式下。即初始化CPU的工作環(huán)境之后,將內(nèi)核如RAM執(zhí)行。下載模式:目標(biāo)機(jī)上的Bootloader將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件。主要是下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機(jī)下載的文件通常首先被Bootloader保存到目標(biāo)機(jī)的RAM中,然后再被 Bootloader寫到目標(biāo)機(jī)上的FLASH 類固態(tài)存儲設(shè)備中。Bootloader的這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時被使用;此外,以后的系統(tǒng)更新也會使用到這種工作模式。Bootloader啟動過程上電之后,先啟動CPU即執(zhí)行startup.
36、s類似功能代碼(配置中斷、初始化堆棧、拷貝代碼等),然后進(jìn)行加載內(nèi)核的準(zhǔn)備1、至少初始化一個串口,以便向終端用戶反饋數(shù)據(jù)。2、檢測系統(tǒng)內(nèi)存映射,哪些是可用的RAM?在這一步之后,將檢測外部按鍵,有按鍵按下將進(jìn)入下載模式,沒有按鍵的話將執(zhí)行下面的步驟,加載內(nèi)核:3、將kenel和根文件系統(tǒng)從flash調(diào)入RAM4、為內(nèi)核啟動設(shè)置參數(shù)5、調(diào)用內(nèi)核。UCOS_II26、 概念分析可重入函數(shù)可以被一個以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞??芍厝胄秃瘮?shù)任何時候都可以被中斷,一段時間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會丟失。可重入型函數(shù)或者只使用局部變量,(關(guān)中斷、只用局部變量、用互斥型信號量可以使函數(shù)變成可重
37、入的)互斥任務(wù)在處理共享數(shù)據(jù)時的排它性,以避免競爭和數(shù)據(jù)的破壞。也就是任務(wù)在某一個時間段獨占共享資源,在釋放之前別的任務(wù)沒有該資源的運(yùn)行權(quán)。滿足互斥條件的方法:1、 關(guān)中斷:最簡便快捷的辦法,即處理共享資源屬于臨界區(qū)代碼。2、使用測試并置位指令3、禁止做任務(wù)切換4、利用信號量 ,其中2和4的道理是相似的,標(biāo)志位。死鎖死鎖也稱作抱死,指兩個任務(wù)無限期地互相等待對方控制著的資源,不然都不會執(zhí)行。兩個任務(wù)都是“你不給我,我就不給你”的心態(tài)。最簡單的防止發(fā)生死鎖的方法是讓每個任務(wù)都:先得到全部需要的資源再做下一步的工作。一般內(nèi)核會允許在申請信號量時定義申請超時。剝奪型與不可剝奪型內(nèi)核即占先式
38、還是非占先式。不可剝奪:合作型內(nèi)核,即除非自己主動放棄CPU的運(yùn)行權(quán),不然沒辦法被切換。不知道什么時候最高優(yōu)先級的任務(wù)才能拿到CPU的控制權(quán),完全取決于應(yīng)用程序什么時候釋放CPU。(顧名思義:每個任務(wù)不會被其它任務(wù)剝奪去,除非中斷的到來,即便如此,當(dāng)中斷結(jié)束后,還是會回到原來被中斷的程序,而不會切換到具有高優(yōu)先級的任務(wù)中去。)可剝奪:最高優(yōu)先級的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。可以被掛起,可以再中斷退出時失去對CPU的運(yùn)行權(quán)。使用占先式內(nèi)核時,應(yīng)用程序不應(yīng)直接使用不可重入型函數(shù)非占先式內(nèi)核的一個特點是幾乎不需要使用信號量保護(hù)共享數(shù)據(jù)。運(yùn)行著的任務(wù)占有CPU,而不必?fù)?dān)心被別的任務(wù)搶占,什么
39、時候釋放,自己說了算??蓜儕Z型的內(nèi)核是實時系統(tǒng)所必須的。即實時不在于立即,而在于可預(yù)測性,高優(yōu)先級得到CPU的時刻是可以預(yù)測的。進(jìn)程上下文是進(jìn)程運(yùn)行寄存器環(huán)境的總和:對arm而言,RO-R12,LR,PC,CPSR,SPSR。STMFDsp!, pc; save pcSTMFDsp!, lr; save lrSTMFDsp!, r0-r12; save registers and ret addressMRSr4, CPSRSTMFDsp!, r4; save current PSRMRSr4, SPSRSTMFDsp!, r4; save SPSR27、實時系統(tǒng)本質(zhì)是:可預(yù)測性28、內(nèi)核的相
40、關(guān)知識初始化:OSINT();系統(tǒng)初始化,創(chuàng)建系統(tǒng)任務(wù)、創(chuàng)建鏈表,等待將TCB賦值后放進(jìn)去。啟動:OSStart(); 就是將就緒的狀態(tài)的任務(wù)中找到優(yōu)先級最高的出棧運(yùn)行,調(diào)用OSStartHighRdy()。(在啟動之前要調(diào)用OS_Taskcreat()規(guī)定一創(chuàng)建就進(jìn)入就緒態(tài)(初始化就緒態(tài)表)它一定是對TCB賦值(調(diào)用TCBinit)放到鏈表里,從空閑鏈表頭取一個鏈表,放在使用鏈表里。)任務(wù)組成:任務(wù)由三個部分構(gòu)成1、任務(wù)控制塊TCB,保存著任務(wù)的所有屬性,可以說內(nèi)核對任務(wù)的管理就是對TCB的管理。它包含了一個任務(wù)的前一個任務(wù)、后一個任務(wù)、指向任務(wù)代碼的指針、指向任務(wù)堆棧的指針、任務(wù)優(yōu)先級、任
41、務(wù)狀態(tài)、延時值等等。對任務(wù)的控制都是通過訪問任務(wù)控制塊來實現(xiàn)的。2、任務(wù)棧保存任務(wù)的工作環(huán)境。3、任務(wù)代碼。狀態(tài):任務(wù)(無限循環(huán)代碼)的五個狀態(tài):休眠態(tài):沒有加入運(yùn)行隊列。掛起態(tài)(waiting,等待,最復(fù)雜,有很多種情況),在等待滿足運(yùn)行條件,如一個信號量、 或者延時結(jié)束等。就緒態(tài)(ready):具備運(yùn)行的一切條件,等待切換,只是有更高級的任務(wù)占據(jù)著CPU。運(yùn)行態(tài):正在占用CPU的運(yùn)行權(quán)被中斷態(tài)。五種狀態(tài)間的轉(zhuǎn)換在課件中的圖里說的比較清楚。注意:一個任務(wù)在運(yùn)行態(tài)時被掛起時清除就緒態(tài),變成掛起態(tài)。而被占先時則雖然不運(yùn)行但保持就緒態(tài)。任務(wù)的調(diào)度(占先式,就緒表)UCOS的就緒表實現(xiàn):就緒表的實現(xiàn)
42、依靠兩個變量一張表實現(xiàn):OS_Rdy_Tbl7(8個8位數(shù))和OS_Rdy_Grp。OSMapTbl相當(dāng)于掩碼表。由優(yōu)先級找到對應(yīng)位:64個優(yōu)先級最高6位。高三位右移三位,確定GRP,即在第幾行,低三位,找到行中的某位。如優(yōu)先級12,001100,則第1行,第4個單元(從0開始計數(shù),這個轉(zhuǎn)換由OSMAPTbl掩碼表完成),實現(xiàn)的代碼如下:OSRdyGrp |=OSMapTblprio>>3; (行標(biāo))OSRdyTblprio>>3 |=OSMapTblprio & 0x07;(由低三位找到行,由高三位找到列)有對應(yīng)位找到優(yōu)先級:另一種巧妙的查表算法。任務(wù)的切換:
43、就是有更高優(yōu)先級的任務(wù)處于就緒態(tài),需要讓其得到CPU的運(yùn)行權(quán),我們所要做的就是保存當(dāng)前任務(wù)的上下文(進(jìn)行壓棧操作),保存當(dāng)前的TCB,根據(jù)優(yōu)先級找到要運(yùn)行任務(wù)的TCB地址,切換當(dāng)前堆棧,將堆棧中保存的內(nèi)容彈出,并運(yùn)行。優(yōu)先級管理:共有64任務(wù),每個任務(wù)都有一個優(yōu)先級,0-63,數(shù)字越大,優(yōu)先級越低。中斷退出(sourcecode)29、相關(guān)任務(wù)管理、時間管理內(nèi)核代碼分析30、移植代碼分析:任務(wù)調(diào)度函數(shù)void OS_Sched (void) /*os_core.c中*/ INT8U y; OS_ENTER_CRITICAL(); 臨界區(qū)代碼,關(guān)中斷 if (OSLockNesting =0)&
44、amp;&(OSIntNesting= 0) 沒有任務(wù)切換上鎖,且是任務(wù)級切換 y = OSUnMapTblOSRdyGrp;獲得最高優(yōu)先級的高三位 OSPrioHighRdy = (INT8U)(y << 3) + OSUnMapTblOSRdyTbly) 找到就緒態(tài)的最高優(yōu)先級任務(wù) if (OSPrioHighRdy != OSPrioCur) 若當(dāng)前不是最高優(yōu)先級,準(zhǔn)備切換。 OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy; 根據(jù)優(yōu)先級找到相應(yīng)TCB地址 OSCtxSwCtr+; OS_TASK_SW(); 調(diào)用任務(wù)切換函數(shù) OS_EXI
45、T_CRITICAL(); 關(guān)中斷。全局變量OSIntNesting判斷是否還有中斷全局變量OSLockNesting判斷是否給調(diào)度器上鎖任務(wù)級切換函數(shù)示意性代碼 (錯了)#define OS_TASK_SW() OSCtxSw()Void OSCtxSw(void) 將R1,R2,R3及R4推入當(dāng)前堆棧; OSTCBCur®OSTCBStkPtr = SP;保存堆棧指針 OSTCBCur = OSTCBHighRdy; SP = OSTCBHighRdy ->OSTCBSTKPtr; 將R4,R3,R2及R1從新堆棧中彈出; 執(zhí)行中斷返回指令;任務(wù)級切換函數(shù)匯編代碼void
46、OS_TASK_SW(void) /任務(wù):保存當(dāng)前任務(wù)上下文,裝入新任務(wù)上下文 /;Perform a context switch.;On entry, OSTCBCur and OSPrioCur hold the current TCB and priority;and OSTCBHighRdy and OSPrioHighRdy contain the same for the task;to be switched to.OS_TASK_SWSTMFDsp!, pc; save pc,保存當(dāng)前的任務(wù)環(huán)境。壓棧上下文STMFDsp!, lr; save lrSTMFDsp!, r0-r
47、12; save registers and ret addressMRSr4, CPSRSTMFDsp!, r4; save current PSRMRSr4, SPSRSTMFDsp!, r4; save SPSR改變當(dāng)前任務(wù)的優(yōu)先級值LDRr4, addr_OSPrioCurLDRr5, addr_OSPrioHighRdyLDRBr6, r5 ;優(yōu)先級僅為一個字節(jié)STRBr6, r4; Get current task TCB address;找到當(dāng)前TCB,并將SP指針保存進(jìn)去。LDRr4, addr_OSTCBCurLDRr5, r4STRsp, r5; store sp in p
48、reempted tasks's TCB; Get highest priority task TCB addressLDRr6, addr_OSTCBHighRdy注意這是在傳送變量地址,該地址內(nèi)存儲的是所要的地址LDRr6, r6LDRsp, r6; get new task's stack pointer; 改變當(dāng)前運(yùn)行的TCB地址,即OSTCBCur = OSTCBHighRdySTRr6, r4; set new current task TCB address ; restore task's mode regsiters/將當(dāng)前任務(wù)的上下文出棧,注意這是壓
49、棧和出棧的順序。LDMFDsp!, r4MSRSPSR, r4LDMFDsp!, r4MSRCPSR, r4 ; return in new task contextLDMFDsp!, r0-r12, lr, pc中斷服務(wù)子程序示意代碼(注意中斷棧和任務(wù)棧) 保存全部CPU寄存器;/即將被打斷的進(jìn)程上下文保存在中斷堆棧。 調(diào)用OSIntEnter()或OSIntNesting直接加1;/中斷層次標(biāo)示。 if(OSIntNesting=1) OSTCBCur->OSTCBStkPtr=SP; 清中斷源; 重新開中斷; 執(zhí)行用戶代碼做中斷服務(wù); 調(diào)用OSIntExit(); 恢復(fù)所有CPU寄
50、存器;執(zhí)行中斷返回指令;中斷退出函數(shù)匯編代碼void OSIntExit (void)OS_ENTER_CRITICAL(); if (OSIntNesting > 0) /* Prevent OSIntNesting from wrapping */ OSIntNesting-; /只在沒有嵌套的情況下,進(jìn)行任務(wù)切換。 if (OSIntNesting = 0) && (OSLockNesting = 0) /* Reschedule only if all ISRs complete . */ OSIntExitY = OSUnMapTblOSRdyGrp; /* .
51、 and not locked. */ OSPrioHighRdy = (INT8U)(OSIntExitY << 3) + OSUnMapTblOSRdyTblOSIntExitY); if (OSPrioHighRdy != OSPrioCur) /* No Ctx Sw if current task is highest rdy */ OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy;/找就緒態(tài)的最高優(yōu)先級,并找到相應(yīng)TCB。 OSCtxIntCtr+; /* Keep track of the number of context switc
52、hes */ OSIntCtxSw(); /調(diào)用中斷級的任務(wù)調(diào)度函數(shù) /* Perform interrupt level context switch */ OS_EXIT_CRITICAL();中斷級任務(wù)切換函數(shù)執(zhí)行出棧指令之后還用中斷返回指令?沒有包含關(guān)系?模式(代碼分析)?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 c
53、ontext; (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意義?; C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度國際貿(mào)易實習(xí)生就業(yè)服務(wù)合同
- 2025年度智慧家居產(chǎn)品研發(fā)與承包合同范本
- 2025年度企業(yè)保證責(zé)任抵押貸款合同模板
- 2025年度教育培訓(xùn)機(jī)構(gòu)委托代理服務(wù)合同樣本
- 坦克玩具行業(yè)深度研究報告
- 2025年度安全風(fēng)險辨識評估報告
- 代發(fā)貨合同范例
- 農(nóng)業(yè)科技居間合同委托書
- 中國投影布幕行業(yè)市場前景預(yù)測及投資戰(zhàn)略咨詢報告
- 賣二手車合同范例
- GB/T 8944.1-2008紙漿成批銷售質(zhì)量的測定第1部分:漿板漿包及漿塊(急驟干燥漿)漿包
- 《當(dāng)前中國海疆形勢》課件
- 教師培訓(xùn)校園安全工作課件校園安全管理培訓(xùn)課程教學(xué)
- 初中七 八年級生物思維導(dǎo)圖大全 張
- 婆媳關(guān)系證明
- 江蘇宿遷家鄉(xiāng)介紹旅游課件
- 莎士比亞十四行詩之十八課件
- 文化差異與跨文化交際課件(完整版)
- 臭和味檢測原始記錄表
- 變壓器檢修風(fēng)險分析及管控措施
- 勞務(wù)派遣公司介紹ppt課件(PPT 35頁)
評論
0/150
提交評論