版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)設(shè)計與實例開發(fā)嵌入式系統(tǒng)設(shè)計與實例開發(fā)基于基于3232位微處理器與實時操作系統(tǒng)位微處理器與實時操作系統(tǒng)第六講系統(tǒng)初始化分析與第六講系統(tǒng)初始化分析與 C/OS-C/OS-移植移植本節(jié)提要本節(jié)提要嵌入式系統(tǒng)的初始化(軟件)嵌入式系統(tǒng)的初始化(軟件)系統(tǒng)硬件接口與初始化系統(tǒng)硬件接口與初始化 C/OS-的移植的移植硬件啟動流程異常處理讀存儲器工作模式電源接口設(shè)計ARM SOCARM SOC有多組電有多組電源源:Core logic:Core logic、 PLL PLL logiclogic、 I/O PadI/O Pad、ControllerController每組電源一般是相互每組電源一
2、般是相互獨立的獨立的電源系統(tǒng)設(shè)計l外圍外圍3.3V:使用:使用LM1085l內(nèi)核內(nèi)核1.8V:使用:使用AS1117時鐘電路模式一:石英晶體振蕩器模式二:外部振蕩器時鐘電路設(shè)計l32.768KHz晶體晶體l22pF電容,以幫助晶體起震電容,以幫助晶體起震l鎖相環(huán)是指一種電路或者模塊,它用于在通信的接收機中,其作用是對接收到的信號鎖相環(huán)是指一種電路或者模塊,它用于在通信的接收機中,其作用是對接收到的信號進(jìn)行處理,并從其中提取某個時鐘的相位信息?;蛘哒f,對于接收到的信號,仿制一進(jìn)行處理,并從其中提取某個時鐘的相位信息?;蛘哒f,對于接收到的信號,仿制一個時鐘信號,使得這兩個信號從某種角度來看是同步的
3、(或者說,相干的)。個時鐘信號,使得這兩個信號從某種角度來看是同步的(或者說,相干的)。l鎖相環(huán)的三個組成部分和相應(yīng)的運作機理是:鎖相環(huán)的三個組成部分和相應(yīng)的運作機理是:l鑒相器:用于判斷鎖相器所輸出的時鐘信號和接收信號中的時鐘的相差的幅度;鑒相器:用于判斷鎖相器所輸出的時鐘信號和接收信號中的時鐘的相差的幅度;l可調(diào)相可調(diào)相/調(diào)頻的時鐘發(fā)生器器:用于根據(jù)鑒相器所輸出的信號來適當(dāng)?shù)恼{(diào)節(jié)鎖相器調(diào)頻的時鐘發(fā)生器器:用于根據(jù)鑒相器所輸出的信號來適當(dāng)?shù)恼{(diào)節(jié)鎖相器內(nèi)部的時鐘輸出信號的頻率或者相位,使得鎖相器完成上述的固定相差功能;內(nèi)部的時鐘輸出信號的頻率或者相位,使得鎖相器完成上述的固定相差功能;l環(huán)路濾
4、波器:用于對鑒相器的輸出信號進(jìn)行濾波和平滑,大多數(shù)情形下是一個低環(huán)路濾波器:用于對鑒相器的輸出信號進(jìn)行濾波和平滑,大多數(shù)情形下是一個低通濾波器,用于濾除由于數(shù)據(jù)的變化和其他不穩(wěn)定因素對整個模塊的影響。通濾波器,用于濾除由于數(shù)據(jù)的變化和其他不穩(wěn)定因素對整個模塊的影響。鑒相器鑒相器環(huán)路濾波器環(huán)路濾波器受控時鐘發(fā)生器受控時鐘發(fā)生器關(guān)于鎖相環(huán)( PLL,Phase Locking Loop )ARM的PLLPLL的功能l控制控制ARM CPU的速度的速度;l為為SDRAM提供同步電源提供同步電源系統(tǒng)復(fù)位說明:說明:lnResetnReset為低時,系統(tǒng)開始必要的初始化設(shè)置,在低位要保證足夠為低時,系統(tǒng)
5、開始必要的初始化設(shè)置,在低位要保證足夠長的時間,否則有些狀態(tài)沒有初始化,系統(tǒng)工作會不正常;長的時間,否則有些狀態(tài)沒有初始化,系統(tǒng)工作會不正常;lnResetnReset為高時,系統(tǒng)開始執(zhí)行指令。為高時,系統(tǒng)開始執(zhí)行指令。設(shè)置存儲器工作模式l設(shè)置存儲器總線寬度(設(shè)置存儲器總線寬度(Memory Bus Width):8,16,32Memory Bus Width):8,16,32l設(shè)置存儲器工作模式(設(shè)置存儲器工作模式(Memory Type):Big Endian Memory Type):Big Endian Little EndianLittle Endian存儲器類型(異步)lAsync
6、hronousAsynchronous:ROMROM、EPROMEPROM、Flash memoryFlash memoryl由由nCEnCE(Chip EnableChip Enable)、)、nOEnOE(ReadRead)、)、nWEnWE(WriteWrite)、)、Data busData bus和和Address busAddress bus組成,尋址空間是由地址總線的寬度決定的。組成,尋址空間是由地址總線的寬度決定的。讀寫總線的時序圖穩(wěn)態(tài)穩(wěn)態(tài)ReadWrite穩(wěn)態(tài)穩(wěn)態(tài)讀數(shù)據(jù)的時序圖寫數(shù)據(jù)的時序圖存儲器類型(同步)lSynchronous: DRAMl地址分為行地址RAs和列地址C
7、AS,每隔一段時間需要刷新一次(Refresh),否則內(nèi)部數(shù)據(jù)會丟失ARMDRAMnCEA0AnBA0、BA1D0DnnRASnCASCLOCKCKEnWEDQMDRAM的控制DRAM的讀取步驟:的讀取步驟:(1 1)通過地址總線將行地址傳輸?shù)降刂纺_;)通過地址總線將行地址傳輸?shù)降刂纺_;(2 2)nRASnRAS使能,行地址被傳送到行地址選通線路中;此時使能,行地址被傳送到行地址選通線路中;此時nWEnWE腳確定不被腳確定不被使能,故使能,故DRAMDRAM不會進(jìn)行寫入操作;不會進(jìn)行寫入操作;(3 3)通過地址總線將列地址傳輸?shù)降刂纺_;)通過地址總線將列地址傳輸?shù)降刂纺_;(4 4)nCASnC
8、AS腳被使能,列地址被傳送到列地址選通線路中,腳被使能,列地址被傳送到列地址選通線路中,nCASnCAS腳同時有腳同時有nOEnOE的功能,此時的功能,此時D0DnD0Dn知道可以向外輸出數(shù)據(jù);知道可以向外輸出數(shù)據(jù);DRAM的讀取步驟:的讀取步驟:(1 1)通過地址總線將行地址傳輸?shù)降刂纺_;)通過地址總線將行地址傳輸?shù)降刂纺_;(2 2)nRASnRAS使能,行地址被傳送到行地址選通線路中;此時使能,行地址被傳送到行地址選通線路中;此時nWEnWE腳被使能為腳被使能為低電位,故低電位,故DRAMDRAM進(jìn)入寫操作;進(jìn)入寫操作;(3 3)通過地址總線將列地址傳輸?shù)降刂纺_;)通過地址總線將列地址傳輸
9、到地址腳;(4 4)nCASnCAS腳被使能,列地址被傳送到列地址選通線路中,此時腳被使能,列地址被傳送到列地址選通線路中,此時D0DnD0Dn知道知道可以向內(nèi)輸入數(shù)據(jù);可以向內(nèi)輸入數(shù)據(jù);DRAM的控制的問題1. 延遲問題:延遲問題:l連續(xù)的連續(xù)的DRAM讀取操作之間的延遲,預(yù)充電延遲(讀取操作之間的延遲,預(yù)充電延遲(Pre-charge time)lnRAS轉(zhuǎn)變成轉(zhuǎn)變成nCAS所需要的延遲所需要的延遲2.DRAM的刷新問題的刷新問題lDRAM只能在短時間內(nèi)保持內(nèi)容存儲器的電荷,所以必須在只能在短時間內(nèi)保持內(nèi)容存儲器的電荷,所以必須在內(nèi)部電荷消失之前進(jìn)行刷新;內(nèi)部電荷消失之前進(jìn)行刷新;l由于每
10、次讀寫都能刷新由于每次讀寫都能刷新DRAM中的內(nèi)容,所在可能采用中的內(nèi)容,所在可能采用DRAM控制器控制刷新;控制器控制刷新;ARM的系統(tǒng)結(jié)構(gòu)系統(tǒng)總線ARM的存儲器設(shè)置示例ARM的存儲器控制表ARM存儲器接口ARM920T內(nèi)核結(jié)構(gòu)S3C2410的內(nèi)部結(jié)構(gòu)2410的存儲器系統(tǒng)的存儲器系統(tǒng) 可通過軟件選擇大小端可通過軟件選擇大小端 地址空間地址空間:每個每個Bank 128Mbytes (總共總共 1GB) 共共 8 個個banksl6個個Bank用于控制用于控制 ROM, SRAM, etc.l剩余的兩個剩余的兩個Bank用于控制用于控制 ROM, SRAM, SDRAM, etc . 除除 b
11、ank0 (16/32-bit) 外,所有的外,所有的Bank都可以通過編程選擇總線都可以通過編程選擇總線寬度寬度= (8/16/32-bit) 7個個Bank固定起始地址;固定起始地址; 最后一個最后一個Bank可調(diào)整起始地址;可調(diào)整起始地址; 最后兩個最后兩個Bank大小可編程大小可編程所有所有Bank存儲周期可編程控制;存儲周期可編程控制;S3C2410的存儲器配置的存儲器配置實驗平臺的體系結(jié)構(gòu)本節(jié)提要本節(jié)提要嵌入式系統(tǒng)的初始化(軟件)嵌入式系統(tǒng)的初始化(軟件)系統(tǒng)硬件接口與初始化系統(tǒng)硬件接口與初始化 C/OS-的移植的移植初始化程序的下載執(zhí)行MPUBOOT ROMRAM下載工具串口JT
12、AG網(wǎng)口目標(biāo)機目標(biāo)機宿主機宿主機1 1)通過編程器將可執(zhí)行目標(biāo)文件燒寫到)通過編程器將可執(zhí)行目標(biāo)文件燒寫到BootROMBootROM(ROMROM、EPROMEPROM、FLASHFLASH)等;)等;2 2)通過串行口和網(wǎng)口下載執(zhí)行目標(biāo)文件,)通過串行口和網(wǎng)口下載執(zhí)行目標(biāo)文件,要求宿主機系統(tǒng)上有數(shù)據(jù)傳輸工具程序、目要求宿主機系統(tǒng)上有數(shù)據(jù)傳輸工具程序、目標(biāo)機裝載器、嵌入式監(jiān)視器或目標(biāo)機系統(tǒng)上標(biāo)機裝載器、嵌入式監(jiān)視器或目標(biāo)機系統(tǒng)上的調(diào)試代理。的調(diào)試代理。3 3)通過)通過JTAGJTAG或或BDMBDM接口下載;接口下載;嵌入式系統(tǒng)的初始化過程復(fù)位向量最小硬件初始化其余硬件初始化RTOS初始化
13、RTOS部件初始化啟動RTOS啟動應(yīng)用程序1234567硬件初始化RTOS初始化軟件初始化最小啟動代碼BSPRTOS應(yīng)用程序嵌入式系統(tǒng)的初始化過程復(fù)位向量最小硬件初始化其余硬件初始化123最小啟動代碼BSP硬件初始化階段硬件初始化階段1、復(fù)位向量、復(fù)位向量 ENTRY b ResetHandler ;for debug b HandlerUndef ;handlerUndef b HandlerSWI ;SWI interrupt handler b HandlerPabort ;handlerPAbort b HandlerDabort ;handlerDAbort b . ;handler
14、Reserved b HandlerIRQ b HandlerFIQ嵌入式系統(tǒng)的初始化過程(2)復(fù)位向量最小硬件初始化其余硬件初始化123最小啟動代碼BSP硬件初始化階段硬件初始化階段2 2、最小硬件初始化、最小硬件初始化1 1)設(shè)置適當(dāng)?shù)募拇嫫?,使嵌入式處理)設(shè)置適當(dāng)?shù)募拇嫫?,使嵌入式處理器處于一個已知的狀態(tài):器處于一個已知的狀態(tài):l獲得獲得CPUCPU的類型;的類型;l獲得或設(shè)置獲得或設(shè)置CPUCPU的時鐘頻率。的時鐘頻率。2 2)禁止中斷和高速緩存)禁止中斷和高速緩存3 3)初始化內(nèi)存控制器、內(nèi)存芯片和高)初始化內(nèi)存控制器、內(nèi)存芯片和高速緩存單元,包括:速緩存單元,包括:l得到內(nèi)存的開始
15、地址;得到內(nèi)存的開始地址;l得到內(nèi)存的大??;得到內(nèi)存的大??;l如果有要求,則還需要進(jìn)行主存如果有要求,則還需要進(jìn)行主存測試;測試;嵌入式系統(tǒng)的初始化過程(3)復(fù)位向量最小硬件初始化其余硬件初始化123最小啟動代碼BSP硬件初始化階段硬件初始化階段3 3、其余硬件初始化、其余硬件初始化1 1)引導(dǎo)代碼調(diào)用合適的函數(shù)對目標(biāo)機)引導(dǎo)代碼調(diào)用合適的函數(shù)對目標(biāo)機系統(tǒng)上的全部硬件部件進(jìn)行初始化,包系統(tǒng)上的全部硬件部件進(jìn)行初始化,包括:括:l建立執(zhí)行處理程序建立執(zhí)行處理程序l初始化中斷處理程序初始化中斷處理程序l初始化總線接口初始化總線接口l初始化板級外設(shè)得到內(nèi)存的開始初始化板級外設(shè)得到內(nèi)存的開始地址;地址
16、;嵌入式系統(tǒng)的初始化過程(4)RTOS初始化階段初始化階段4 4、RTOSRTOS初始化初始化1 1)RTOSRTOS初始化初始化2 2)RTOSRTOS對象和服務(wù)初始化對象和服務(wù)初始化l任務(wù)任務(wù)l信號量信號量l定時器定時器l中斷中斷l(xiāng)內(nèi)存管理內(nèi)存管理3 3)RTOSRTOS任務(wù)堆棧初始化任務(wù)堆棧初始化4 4)RTOSRTOS擴展部件初始化擴展部件初始化5 5)啟動)啟動RTOSRTOSRTOS初始化RTOS部件初始化啟動RTOS456RTOS初始化RTOS嵌入式系統(tǒng)的初始化過程(5)應(yīng)用程序初始化階段應(yīng)用程序初始化階段4 4、應(yīng)用程序初始化、應(yīng)用程序初始化啟動應(yīng)用程序7軟件初始化應(yīng)用程序AR
17、M系統(tǒng)初始化的一般過程啟動(系統(tǒng)上電啟動(系統(tǒng)上電/ /復(fù)位)復(fù)位)從程序入口點從程序入口點初始化時鐘等硬件相關(guān)寄存器初始化時鐘等硬件相關(guān)寄存器1 1、設(shè)定、設(shè)定PLLPLL2 2、關(guān)中斷、關(guān)中斷3 3、設(shè)置其它寄存器、設(shè)置其它寄存器初始化存儲器系統(tǒng)初始化存儲器系統(tǒng)FlashFlash及及SDRAMSDRAM參數(shù)設(shè)置參數(shù)設(shè)置初始化初始化C C所需要的存儲器空間所需要的存儲器空間調(diào)用調(diào)用C C入口函數(shù)入口函數(shù)堆棧初始化堆棧初始化一、設(shè)置程序入口指針l上電復(fù)位后直接到程序入口點執(zhí)行,入口點一般為一個上電復(fù)位后直接到程序入口點執(zhí)行,入口點一般為一個跳轉(zhuǎn)表,跳轉(zhuǎn)到復(fù)位處理程序處開始執(zhí)行跳轉(zhuǎn)表,跳轉(zhuǎn)到復(fù)
18、位處理程序處開始執(zhí)行ARMARM系統(tǒng)的初始系統(tǒng)的初始化;化;l啟動程序首先必須定義入口指針,而且整個應(yīng)用程序只啟動程序首先必須定義入口指針,而且整個應(yīng)用程序只有一個入口指針有一個入口指針例:例:AREA Boot,CODE,READONLYAREA Boot,CODE,READONLY ENTRY / ENTRY /* *設(shè)置程序入口指針設(shè)置程序入口指針* */ /二、設(shè)置中斷向量lARMARM要求中斷向量必須設(shè)置在從要求中斷向量必須設(shè)置在從OX00000000OX00000000地址開始,連地址開始,連續(xù)續(xù)8 8* *4 4字節(jié)的地址空間;字節(jié)的地址空間;l向量表包含一系列跳轉(zhuǎn)指令,跳轉(zhuǎn)到相
19、應(yīng)的中斷服務(wù)程向量表包含一系列跳轉(zhuǎn)指令,跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序;序;l對各未用中斷,使其指向一個含返回指令的啞函數(shù),以對各未用中斷,使其指向一個含返回指令的啞函數(shù),以防止錯誤中斷引起系統(tǒng)的混亂;防止錯誤中斷引起系統(tǒng)的混亂;中斷向量表FIQ0 x1C外部快速中斷IRQ0 x18一般外部中斷(Reserved)0 x14保留Data Abort0 x10數(shù)據(jù)異常Frefetch Abort0 x0C預(yù)取指異常Software int0 x08軟件中斷Undef0 x04未定義指令中斷Reset0 x00復(fù)位中斷中斷向量表的程序AREA Boot,CODE,READONLYAREA Boot,CO
20、DE,READONLYENTRYENTRYB Reset_handlerB Reset_handlerB Undef_HandlerB Undef_HandlerB SWI_HandlerB SWI_HandlerB PreAbort_HandlerB PreAbort_HandlerB . ;for reserved interrupt,stop hereB . ;for reserved interrupt,stop hereB IRQ_handlerB IRQ_handlerB FIQ_handlerB FIQ_handler三、初始化時鐘和設(shè)置相關(guān)的寄存器l通過設(shè)置時鐘控制器來確定通過
21、設(shè)置時鐘控制器來確定CPUCPU的工作頻率,設(shè)置中斷控的工作頻率,設(shè)置中斷控制寄存器屏蔽中斷制寄存器屏蔽中斷四、初始化存儲器系統(tǒng)存儲器類型和時序配置存儲器類型和時序配置( (參考芯片手冊,設(shè)置與內(nèi)存映射參考芯片手冊,設(shè)置與內(nèi)存映射相關(guān)的寄存器相關(guān)的寄存器) )l一個復(fù)雜的系統(tǒng)可能存在多種存儲器類型的接口,需要根據(jù)實際的一個復(fù)雜的系統(tǒng)可能存在多種存儲器類型的接口,需要根據(jù)實際的系統(tǒng)設(shè)計對此加以正確配置。對同一種存儲器類型來說,也因為訪系統(tǒng)設(shè)計對此加以正確配置。對同一種存儲器類型來說,也因為訪問速度的差異,需要不同的時序設(shè)置。問速度的差異,需要不同的時序設(shè)置。l通常通常Flash Flash 和和
22、SRAM SRAM 同屬于靜態(tài)存儲器類型,可以合用同一個存儲同屬于靜態(tài)存儲器類型,可以合用同一個存儲器端口;器端口;l而而DRAM DRAM 因為動態(tài)刷新和地址線復(fù)用等特性,通常配有專用的存儲因為動態(tài)刷新和地址線復(fù)用等特性,通常配有專用的存儲器端口。器端口。l存儲器端口的接口時序優(yōu)化是非常重要的,影響到整個系統(tǒng)的性能存儲器端口的接口時序優(yōu)化是非常重要的,影響到整個系統(tǒng)的性能。因為一般系統(tǒng)運行的速度瓶頸都存在于存儲器訪問,所以存儲器。因為一般系統(tǒng)運行的速度瓶頸都存在于存儲器訪問,所以存儲器訪問時序應(yīng)盡可能地快;但同時又要考慮由此帶來的穩(wěn)定性問題。訪問時序應(yīng)盡可能地快;但同時又要考慮由此帶來的穩(wěn)定
23、性問題。只有根據(jù)具體選定的芯片,進(jìn)行多次的測試之后,才能確定最佳的只有根據(jù)具體選定的芯片,進(jìn)行多次的測試之后,才能確定最佳的時序配置。時序配置。存儲器地址分布l有些系統(tǒng)具有非常靈活的存儲器地址分配特性,進(jìn)行存有些系統(tǒng)具有非常靈活的存儲器地址分配特性,進(jìn)行存儲器初始化設(shè)計的時候一定要根據(jù)應(yīng)用程序的具體要求儲器初始化設(shè)計的時候一定要根據(jù)應(yīng)用程序的具體要求來完成地址分配。來完成地址分配。l一種典型的情況是啟動一種典型的情況是啟動ROM ROM 的地址重映射(的地址重映射(remapremap)。當(dāng))。當(dāng)一個系統(tǒng)上電后程序?qū)⒆詣訌囊粋€系統(tǒng)上電后程序?qū)⒆詣訌? 0 地址處開始執(zhí)行,因此地址處開始執(zhí)行,因
24、此在系統(tǒng)的初始狀態(tài),必須保證在在系統(tǒng)的初始狀態(tài),必須保證在0 0 地址處存在正確的代地址處存在正確的代碼,即要求碼,即要求0 0 地址開始處的存儲器是非易性的地址開始處的存儲器是非易性的ROM ROM 或或Flash Flash 等。但是因為等。但是因為ROM ROM 或或Flash Flash 的訪問速度相對較慢的訪問速度相對較慢,每次中斷發(fā)生后都要從讀取,每次中斷發(fā)生后都要從讀取ROM ROM 或或Flash Flash 上面的向量上面的向量表開始,影響了中斷響應(yīng)速度。因此有的系統(tǒng)便提供一表開始,影響了中斷響應(yīng)速度。因此有的系統(tǒng)便提供一種靈活的地址重映射方法,可以把種靈活的地址重映射方法,
25、可以把0 0 地址重新指向到地址重新指向到RAM RAM 中去。在這種地址映射的變化過程當(dāng)中,程序員需要仔中去。在這種地址映射的變化過程當(dāng)中,程序員需要仔細(xì)考慮的是程序的執(zhí)行流程不能被這種變化所打斷。細(xì)考慮的是程序的執(zhí)行流程不能被這種變化所打斷。ROM地址的重映射(remap)0 x0200(boot code)0 x0100(Reset_handler)B Reset_Handler0 x0000Flash(remap)0 x0204(boot code)0 x0200(Reset_handler)B Reset_Handler0 x0000RAMROM地址重映射的實現(xiàn)地址重映射的實現(xiàn)mov
26、 r8,#RAM_BASE_BOOT/RAM_BASE_BOOT是重映射是重映射前內(nèi)部前內(nèi)部RAM區(qū)地址區(qū)地址 add r9, pc #VectorTale /VectorTale是異常向量表入口是異常向量表入口ldmia r9!, r0-r7 /讀讀8個異常向量個異常向量 stmia r8!, r0-r7 /保存保存8個異常向量到個異常向量到RAM區(qū)區(qū)ldmia r9!, r0-r4 /讀讀5個異常處理程序絕對地址個異常處理程序絕對地址stmia r8!, r0-r4 /保存保存5個異常處理程序絕對地址到個異常處理程序絕對地址到RAM區(qū)區(qū) 為保證重映射之后提供正確的中斷入口地址,在重映射之前
27、就必為保證重映射之后提供正確的中斷入口地址,在重映射之前就必須把中斷和異常向量表拷貝到內(nèi)部須把中斷和異常向量表拷貝到內(nèi)部RAMRAM中。其程序?qū)崿F(xiàn)如下:中。其程序?qū)崿F(xiàn)如下:五、初始化堆棧lARMARM處理器有好幾種運行狀態(tài)(模式),各種狀態(tài)都需要處理器有好幾種運行狀態(tài)(模式),各種狀態(tài)都需要有自己的堆棧,所以需要分別為這些堆棧分配空間并設(shè)有自己的堆棧,所以需要分別為這些堆棧分配空間并設(shè)置好各自的堆棧指針置好各自的堆棧指針l每一種狀態(tài)的堆棧指針寄存器(每一種狀態(tài)的堆棧指針寄存器(SPSP)都是獨立的()都是獨立的(System System 和和User User 模式使用相同的模式使用相同的S
28、P SP 寄存器)。因此對程寄存器)。因此對程序中需要用到的每一種模式都要給序中需要用到的每一種模式都要給SP SP 寄存器定義一個堆寄存器定義一個堆棧地址。方法是改變狀態(tài)寄存器棧地址。方法是改變狀態(tài)寄存器CPSRCPSR內(nèi)的狀態(tài)位,使處內(nèi)的狀態(tài)位,使處理器切換到不同的狀態(tài),然后給理器切換到不同的狀態(tài),然后給SP SP 賦值。(注意不要切賦值。(注意不要切換到換到UserUser模式進(jìn)行模式進(jìn)行User User 模式的堆棧設(shè)置,因為進(jìn)入模式的堆棧設(shè)置,因為進(jìn)入User User 模式后就不能再操作模式后就不能再操作CPSR CPSR 回到別的模式了。可能會對接回到別的模式了。可能會對接下去的
29、程序執(zhí)行造成影響。)下去的程序執(zhí)行造成影響。)l一般堆棧的大小要根據(jù)需要而定,但是要盡可能給堆棧一般堆棧的大小要根據(jù)需要而定,但是要盡可能給堆棧分配快速和高帶寬的存儲器。堆棧性能的提高對系統(tǒng)整分配快速和高帶寬的存儲器。堆棧性能的提高對系統(tǒng)整體性能的影響是非常明顯的。體性能的影響是非常明顯的。堆棧初始化代碼示例MRS R0, CPSR ; CPSR - R0BIC R0, R0, #MODEMASK ; 安全起見,屏蔽模式位以外的其它位安全起見,屏蔽模式位以外的其它位ORR R1, R0, #IRQMODE ; 把設(shè)置模式位設(shè)置成需要的模式(把設(shè)置模式位設(shè)置成需要的模式(IRQ)MSR CPSR
30、_cxsf, R1 ; 轉(zhuǎn)到轉(zhuǎn)到IRQ 模式模式LDR SP, =UndefStack ; 設(shè)置設(shè)置SP_irqORR R1,R0,#FIQMODEMSR CPSR_cxsf, R1 ; FIQModeLDR SP, =FIQStackORR R1, R0, #SVCMODEMSR CPSR_cxsf, R1 ; SVCModeLDR SP, =SVCStack六、初始化C環(huán)境l在目標(biāo)文件中,代碼、數(shù)據(jù)放在不同的段中。源文件編在目標(biāo)文件中,代碼、數(shù)據(jù)放在不同的段中。源文件編譯鏈接生成含譯鏈接生成含.data.data、.text.text段的目標(biāo)文件,且鏈接器生段的目標(biāo)文件,且鏈接器生成的成的
31、.data.data段是以系統(tǒng)段是以系統(tǒng)RAMRAM為參考地址為參考地址l故在系統(tǒng)啟動時需要拷貝故在系統(tǒng)啟動時需要拷貝ROMROM或或FLASHFLASH中的中的.data.data段到段到RAMRAM,以完成對,以完成對RAMRAM的初始化。在初始化期間應(yīng)將系統(tǒng)需要讀的初始化。在初始化期間應(yīng)將系統(tǒng)需要讀寫的數(shù)據(jù)和變量從寫的數(shù)據(jù)和變量從ROMROM拷貝到拷貝到RAMRAM里運行里運行了解連接器的功能l將許多放在不同文件中的目標(biāo)碼,連接成一個可執(zhí)行文將許多放在不同文件中的目標(biāo)碼,連接成一個可執(zhí)行文件;件;l計算及分配位于不同節(jié)區(qū)(計算及分配位于不同節(jié)區(qū)(Session)Session)的程序或數(shù)
32、據(jù)。一的程序或數(shù)據(jù)。一個程序可分為程序段(個程序可分為程序段(Read-Only,RO)Read-Only,RO)、數(shù)據(jù)段(、數(shù)據(jù)段(Read-Read-Write,RW)Write,RW)、零初始化段(、零初始化段(Zero-Initialized,ZI)Zero-Initialized,ZI);l編譯器僅將程序轉(zhuǎn)成機器碼,不會處理與內(nèi)存地址有關(guān)編譯器僅將程序轉(zhuǎn)成機器碼,不會處理與內(nèi)存地址有關(guān)的部分,這部分工作由連接器完成;的部分,這部分工作由連接器完成;l連接器可以產(chǎn)生除二進(jìn)制外的其它文件的格式。連接器可以產(chǎn)生除二進(jìn)制外的其它文件的格式。連接器主要用于處理內(nèi)存分配問題連接器主要用于處理內(nèi)存
33、分配問題鏈接器產(chǎn)生的符號表l符號由鏈接器自動產(chǎn)生,只讀段(符號由鏈接器自動產(chǎn)生,只讀段(read-only ROread-only RO)就是)就是代碼段,讀寫段(代碼段,讀寫段(read-write RWread-write RW)是已經(jīng)初始化的全局)是已經(jīng)初始化的全局變量,而零初始化段(變量,而零初始化段(zero-initialized section ZIzero-initialized section ZI)中存放未初始化的全局變量;中存放未初始化的全局變量;初始化應(yīng)用程序執(zhí)行環(huán)境l映像一開始總是存儲在映像一開始總是存儲在ROM/Flash ROM/Flash 里面的,其里面的,其R
34、O RO 部分既可部分既可以在以在ROM/FlashROM/Flash里面執(zhí)行,也可以轉(zhuǎn)移到速度更快的里面執(zhí)行,也可以轉(zhuǎn)移到速度更快的RAM RAM 中中去;而去;而RW RW 和和ZI ZI 這兩部分必須是需要轉(zhuǎn)移到可寫的這兩部分必須是需要轉(zhuǎn)移到可寫的RAM RAM 里里去的。去的。l所謂應(yīng)用程序執(zhí)行環(huán)境的初始化,就是完成必要的從所謂應(yīng)用程序執(zhí)行環(huán)境的初始化,就是完成必要的從ROM ROM 到到RAM RAM 的數(shù)據(jù)傳輸和內(nèi)容清零。的數(shù)據(jù)傳輸和內(nèi)容清零。初始化C環(huán)境(2)lC C環(huán)境初始化,就是利用上述符號初始化環(huán)境初始化,就是利用上述符號初始化RWRW和和ZIZI段,以使段,以使后面使用的
35、全局變量的后面使用的全局變量的C C程序正常運行;程序正常運行;l這里有兩個循環(huán),第一個循環(huán)把預(yù)初始化的數(shù)據(jù)段這里有兩個循環(huán),第一個循環(huán)把預(yù)初始化的數(shù)據(jù)段RWRW(位于代碼段的后面)復(fù)制到位于代碼段的后面)復(fù)制到RAMRAM中;另一個循環(huán)把未初始中;另一個循環(huán)把未初始化的數(shù)據(jù)段化的數(shù)據(jù)段ZIZI初始化為初始化為0 0,也就是實現(xiàn)把從,也就是實現(xiàn)把從ROMROM中的中的.data.data段拷貝到段拷貝到RAMRAM,對,對ZIZI段內(nèi)的數(shù)據(jù)初始化為段內(nèi)的數(shù)據(jù)初始化為0 0,以完成對,以完成對C C環(huán)環(huán)境的實始化;境的實始化;初始化C環(huán)境(3)改變處理器模式l除用戶模式以外,其他除用戶模式以外,
36、其他6 6 種模式都是特權(quán)模式。因為在種模式都是特權(quán)模式。因為在初始化過程中許多操作需要在特權(quán)模式下才能進(jìn)行(比初始化過程中許多操作需要在特權(quán)模式下才能進(jìn)行(比如如CPSR CPSR 的修改),所以要特別注意不能過早地進(jìn)入用的修改),所以要特別注意不能過早地進(jìn)入用戶模式。一般地,在初始化過程中會經(jīng)歷以下一些模式戶模式。一般地,在初始化過程中會經(jīng)歷以下一些模式變化:變化:七、呼叫C程序l對對mainmain函數(shù)的調(diào)用進(jìn)入函數(shù)的調(diào)用進(jìn)入uc/OSuc/OS的入口,通過這個入口就進(jìn)的入口,通過這個入口就進(jìn)入入uC/OSuC/OS的主函數(shù),啟動對的主函數(shù),啟動對uC/OSuC/OS的初始化的初始化l例
37、例 IMPORT MainIMPORT Main b Main ;C Entry b Main ;C EntryARM9系統(tǒng)初始化系統(tǒng)初始化1、關(guān)、關(guān)WATCH DOG 2、禁止所有中斷、禁止所有中斷 3、初始化系統(tǒng)時鐘、初始化系統(tǒng)時鐘 4、初始化內(nèi)存控制寄存器、初始化內(nèi)存控制寄存器5、檢查是否從掉電模式喚醒、檢查是否從掉電模式喚醒 6、點亮所有、點亮所有LED 7、初始化、初始化UART08、將、將vivi所有代碼從所有代碼從nand flash復(fù)制到復(fù)制到SDRAM中中 9、跳到、跳到init/main.c中的中的main函數(shù)函數(shù) uC/OS系統(tǒng)的初始化l完成了前面的硬件初始化和運行環(huán)境的
38、相關(guān)設(shè)置后,進(jìn)完成了前面的硬件初始化和運行環(huán)境的相關(guān)設(shè)置后,進(jìn)入入Main()Main(), Main()Main()是是uC/OSuC/OS的入口函數(shù),啟動對的入口函數(shù),啟動對uC/OSuC/OS的的初始化初始化ARM的硬件抽象層uHALuC/OSlARMARM公司為操作系統(tǒng)的開發(fā)提供了一個硬件抽象層公司為操作系統(tǒng)的開發(fā)提供了一個硬件抽象層HALHAL,稱為稱為uHALuHAL;l從結(jié)構(gòu)上看,從結(jié)構(gòu)上看,uHALuHAL是一組庫程序,需要說明的是,是一組庫程序,需要說明的是,uHALuHAL并不是專門為并不是專門為uC/OSuC/OS準(zhǔn)備的,甚至也不是專為操作系統(tǒng)內(nèi)準(zhǔn)備的,甚至也不是專為操作
39、系統(tǒng)內(nèi)核準(zhǔn)備的;核準(zhǔn)備的;luHALuHAL只是個針對只是個針對ARMARM核的函數(shù)庫;核的函數(shù)庫;luC/OSuC/OS是建立在是建立在uHALuHAL的基礎(chǔ)之上的;的基礎(chǔ)之上的;uC/OS系統(tǒng)的初始化(2)ARMTargetInit()函數(shù)結(jié)構(gòu)ARMTargetInit()ARMTargetInit()調(diào)調(diào)uHALuHAL打印接口打印系統(tǒng)信息打印接口打印系統(tǒng)信息調(diào)用調(diào)用uHALuHAL函數(shù)禁止所有中斷函數(shù)禁止所有中斷調(diào)用調(diào)用uHALuHAL函數(shù)對中斷初始化函數(shù)對中斷初始化uHALuHAL函數(shù)對函數(shù)對ARMARM計數(shù)器初始化計數(shù)器初始化結(jié)束結(jié)束uHAL的功能luHALuHAL的作用之一是在操
40、作系統(tǒng)本身進(jìn)入正常運行之前,為的作用之一是在操作系統(tǒng)本身進(jìn)入正常運行之前,為系統(tǒng)提供基本的輸入輸出手段,例如系統(tǒng)提供基本的輸入輸出手段,例如uHALr_printf()uHALr_printf()等;等;luHALuHAL還要為操作系統(tǒng)的運行準(zhǔn)備一個基本的運行環(huán)境,具還要為操作系統(tǒng)的運行準(zhǔn)備一個基本的運行環(huán)境,具體包括下列各種初始化:體包括下列各種初始化:l通過通過uHAL_ResetMMU()uHAL_ResetMMU(),將,將MMUMMU設(shè)置在一個確定的初始狀設(shè)置在一個確定的初始狀態(tài);態(tài);l通過通過ARMDisable()ARMDisable()關(guān)閉中斷;關(guān)閉中斷;l通過通過uHAL_I
41、nitInterrupts()uHAL_InitInterrupts()設(shè)置中斷向量處理程序;設(shè)置中斷向量處理程序;l通過通過uHAL_InitTimer()uHAL_InitTimer()對系統(tǒng)使用的計數(shù)器進(jìn)行初始化對系統(tǒng)使用的計數(shù)器進(jìn)行初始化ARMTargetStart()的分析l創(chuàng)建了任務(wù)之后,創(chuàng)建了任務(wù)之后,ARMTargetStart()ARMTargetStart()調(diào)用調(diào)用uHALr_InstallSystemTimer()uHALr_InstallSystemTimer()創(chuàng)建一個系統(tǒng)時鐘,為時創(chuàng)建一個系統(tǒng)時鐘,為時鐘中斷做好準(zhǔn)備;鐘中斷做好準(zhǔn)備;C/OS-II BSP編寫編寫
42、BSPBSP(板級支持包)是介于底層硬件和操作系統(tǒng)之間的軟件層次,它(板級支持包)是介于底層硬件和操作系統(tǒng)之間的軟件層次,它完成系統(tǒng)上電后最初的硬件和軟件初始化,并對底層硬件進(jìn)行封完成系統(tǒng)上電后最初的硬件和軟件初始化,并對底層硬件進(jìn)行封裝,使得操作系統(tǒng)不再面對具體的操作。裝,使得操作系統(tǒng)不再面對具體的操作。BSPBSP的特點:的特點:l硬件相關(guān)性:因為嵌入式實時系統(tǒng)的硬件環(huán)境具有應(yīng)用相關(guān)性,硬件相關(guān)性:因為嵌入式實時系統(tǒng)的硬件環(huán)境具有應(yīng)用相關(guān)性,所以,作為高層軟件與硬件之間的接口,所以,作為高層軟件與硬件之間的接口,BSPBSP必須為操作系統(tǒng)提供必須為操作系統(tǒng)提供操作和控制具體硬件的方法。操作
43、和控制具體硬件的方法。l操作系統(tǒng)相關(guān)性:不同的操作系統(tǒng)具有各自的軟件層次結(jié)構(gòu),因操作系統(tǒng)相關(guān)性:不同的操作系統(tǒng)具有各自的軟件層次結(jié)構(gòu),因此,不同的操作系統(tǒng)具有特定的硬件接口形式。此,不同的操作系統(tǒng)具有特定的硬件接口形式。BSPBSP的功能的功能l嵌入式系統(tǒng)初始化嵌入式系統(tǒng)初始化 A A、片級初始化、片級初始化 B B、板級初始化、板級初始化 C C、系統(tǒng)級初始化、系統(tǒng)級初始化l硬件相關(guān)的設(shè)備驅(qū)動程序硬件相關(guān)的設(shè)備驅(qū)動程序 嵌入式系統(tǒng)始化嵌入式系統(tǒng)始化1 1)片級初始化:主要完成微處理器的初始化,)片級初始化:主要完成微處理器的初始化, 包括設(shè)置微處理器包括設(shè)置微處理器的核心寄存器和控制寄存器,
44、微處理器核心工作模式以及其局部的核心寄存器和控制寄存器,微處理器核心工作模式以及其局部總線模式等。片級初始化把微處理器從上電時的缺省狀態(tài)逐步設(shè)總線模式等。片級初始化把微處理器從上電時的缺省狀態(tài)逐步設(shè)置成為系統(tǒng)所要求的工作狀態(tài)。這是一個純硬件的初始化過程置成為系統(tǒng)所要求的工作狀態(tài)。這是一個純硬件的初始化過程2 2)板級初始化:完成微處理器以外的其他硬件設(shè)備的初始化。除此)板級初始化:完成微處理器以外的其他硬件設(shè)備的初始化。除此之外,還要設(shè)置某些軟件的數(shù)據(jù)結(jié)構(gòu)和參數(shù),為隨后的系統(tǒng)級初之外,還要設(shè)置某些軟件的數(shù)據(jù)結(jié)構(gòu)和參數(shù),為隨后的系統(tǒng)級初始化和應(yīng)用程序的運行建立硬件和軟件環(huán)境。這是一個同時包含始化
45、和應(yīng)用程序的運行建立硬件和軟件環(huán)境。這是一個同時包含軟硬件兩部分在內(nèi)的初始化過程。軟硬件兩部分在內(nèi)的初始化過程。3 3)系統(tǒng)級初始化:這是一個以軟件初始化為主的過程,)系統(tǒng)級初始化:這是一個以軟件初始化為主的過程, 主要進(jìn)行主要進(jìn)行操作系統(tǒng)初始化。操作系統(tǒng)初始化。BSPBSP將控制轉(zhuǎn)交給操作系統(tǒng),將控制轉(zhuǎn)交給操作系統(tǒng), 由操作系統(tǒng)進(jìn)行由操作系統(tǒng)進(jìn)行余下的初始化操作。包括加載和初始化與硬件無關(guān)的設(shè)備驅(qū)動程余下的初始化操作。包括加載和初始化與硬件無關(guān)的設(shè)備驅(qū)動程序,建立系統(tǒng)內(nèi)存區(qū),加載并初始化其他系統(tǒng)軟件模塊,比如網(wǎng)序,建立系統(tǒng)內(nèi)存區(qū),加載并初始化其他系統(tǒng)軟件模塊,比如網(wǎng)絡(luò)系統(tǒng)、文件系統(tǒng)等;最后,
46、操作系統(tǒng)創(chuàng)建應(yīng)用程序環(huán)境并將控絡(luò)系統(tǒng)、文件系統(tǒng)等;最后,操作系統(tǒng)創(chuàng)建應(yīng)用程序環(huán)境并將控制轉(zhuǎn)交給應(yīng)用程序的入口制轉(zhuǎn)交給應(yīng)用程序的入口嵌入式系統(tǒng)初始化過程及BSP功能完成硬件相關(guān)的設(shè)備驅(qū)動1 1)BSPBSP另一個主要功能是硬件相關(guān)的設(shè)備驅(qū)動。與初始化過程相反另一個主要功能是硬件相關(guān)的設(shè)備驅(qū)動。與初始化過程相反,硬件相關(guān)的設(shè)備驅(qū)動程序的初始化和使用通常是一個從高層到,硬件相關(guān)的設(shè)備驅(qū)動程序的初始化和使用通常是一個從高層到底層的過程。盡管底層的過程。盡管BSP BSP 中包含硬件相關(guān)的設(shè)備驅(qū)動程序,但是這中包含硬件相關(guān)的設(shè)備驅(qū)動程序,但是這些設(shè)備驅(qū)動程序通常不直接由些設(shè)備驅(qū)動程序通常不直接由BSPB
47、SP使用,而是在系統(tǒng)初始化過程中使用,而是在系統(tǒng)初始化過程中由由BSP BSP 把它們與操作系統(tǒng)中通用的設(shè)備驅(qū)動程序關(guān)聯(lián)起來,并在把它們與操作系統(tǒng)中通用的設(shè)備驅(qū)動程序關(guān)聯(lián)起來,并在隨后的應(yīng)用中由通用的設(shè)備驅(qū)動程序調(diào)用,實現(xiàn)對硬件設(shè)備的操隨后的應(yīng)用中由通用的設(shè)備驅(qū)動程序調(diào)用,實現(xiàn)對硬件設(shè)備的操作。作。2 2)設(shè)計與硬件相關(guān)的驅(qū)動程序是)設(shè)計與硬件相關(guān)的驅(qū)動程序是BSPBSP設(shè)計中另一個關(guān)鍵環(huán)節(jié)設(shè)計中另一個關(guān)鍵環(huán)節(jié)系統(tǒng)調(diào)用通用設(shè)備驅(qū)動程序與BSP的關(guān)系設(shè)計BSP的方法一、以典型的一、以典型的BSPBSP做為參考做為參考二、參照操作系統(tǒng)或芯片廠商提供的二、參照操作系統(tǒng)或芯片廠商提供的BSPBSP模板
48、模板C/OS-II BSP for ARMlC/OS-IIC/OS-II編寫一個簡單的編寫一個簡單的BSPBSP。它首先設(shè)置。它首先設(shè)置CPUCPU內(nèi)部寄存器和系統(tǒng)內(nèi)部寄存器和系統(tǒng)堆棧,并初始化堆棧指針,建立程序的運行和調(diào)用環(huán)境;堆棧,并初始化堆棧指針,建立程序的運行和調(diào)用環(huán)境;l然后可以方便地使用然后可以方便地使用C C語言設(shè)置語言設(shè)置ARMARM片選地址(片選地址(CS0CS0CS7CS7)、)、GPIOGPIO以及以及SDRAMSDRAM控制器,初始化串口(控制器,初始化串口(UART0UART0)作為默認(rèn)打印口,并向)作為默認(rèn)打印口,并向操作系統(tǒng)提供一些硬件相關(guān)例程和函數(shù)如操作系統(tǒng)提供
49、一些硬件相關(guān)例程和函數(shù)如dprintf()dprintf(),以方便調(diào)試,以方便調(diào)試;l在在CPUCPU、板級和程序自身初始化完成后,就可以把、板級和程序自身初始化完成后,就可以把CPUCPU的控制權(quán)交的控制權(quán)交給操作系統(tǒng)了給操作系統(tǒng)了 本節(jié)提要本節(jié)提要嵌入式系統(tǒng)的初始化(軟件)嵌入式系統(tǒng)的初始化(軟件)系統(tǒng)硬件接口與初始化系統(tǒng)硬件接口與初始化 C/OS-的移植的移植操作系統(tǒng)移植的概念l所謂操作系統(tǒng)的移植,是指使一個實時操作系統(tǒng)能夠在所謂操作系統(tǒng)的移植,是指使一個實時操作系統(tǒng)能夠在某個微處理器平臺上運行。某個微處理器平臺上運行。l COS-IICOS-II的主要代碼都是由標(biāo)準(zhǔn)的的主要代碼都是由
50、標(biāo)準(zhǔn)的C C語言寫成的,移植方語言寫成的,移植方便。便。l移植的主要工作是修改部分與處理器硬件相關(guān)的代碼。移植的主要工作是修改部分與處理器硬件相關(guān)的代碼。移植的層次操作系統(tǒng)的移植大體可以分為兩個層次:操作系統(tǒng)的移植大體可以分為兩個層次:l跨體系結(jié)構(gòu)的移植跨體系結(jié)構(gòu)的移植l針對特定處理器的移植針對特定處理器的移植移植COS-II滿足的條件 l處理器的處理器的C C編譯器能產(chǎn)生可重入代碼編譯器能產(chǎn)生可重入代碼 l在程序中可以打開或者關(guān)閉中斷在程序中可以打開或者關(guān)閉中斷 l處理器支持中斷,并且能產(chǎn)生定時中斷(通常在處理器支持中斷,并且能產(chǎn)生定時中斷(通常在1010100Hz100Hz之間)之間) l
51、處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧 l處理器有將堆棧指針和其他處理器有將堆棧指針和其他CPUCPU寄存器存儲和讀出寄存器存儲和讀出到堆棧(或者內(nèi)存)的指令到堆棧(或者內(nèi)存)的指令 什么是可重入代碼 l可重入的代碼指的是一段代碼(比如:一個函數(shù))可可重入的代碼指的是一段代碼(比如:一個函數(shù))可以被多個任務(wù)同時調(diào)用,而不必?fù)?dān)心會破壞數(shù)據(jù)。以被多個任務(wù)同時調(diào)用,而不必?fù)?dān)心會破壞數(shù)據(jù)。l也就是說,可重入型函數(shù)在任何時候都可以被中斷執(zhí)也就是說,可重入型函數(shù)在任何時候都可以被中斷執(zhí)行,過一段時間以后又可以繼續(xù)運行,而不會因為在行,過一段時間以后又可以繼續(xù)運行,而不
52、會因為在函數(shù)中斷的時候被其他的任務(wù)重新調(diào)用,影響函數(shù)中函數(shù)中斷的時候被其他的任務(wù)重新調(diào)用,影響函數(shù)中的數(shù)據(jù)。的數(shù)據(jù)。 可重入代碼舉例程序程序1 1:可重入型函數(shù):可重入型函數(shù)void swap(int void swap(int * *x, int x, int * *y)y) int temp;int temp;temp=temp=* *x;x;* *x=x=* *y;y;* *y=temp;y=temp; 非可重入代碼舉例程序程序2 2:非可重入型函數(shù):非可重入型函數(shù)int temp;int temp;void swap(int void swap(int * *x, int x, int
53、 * *y)y) temp=temp=* *x;x;* *x=x=* *y;y;* *y=temp;y=temp; 返回不可重入函數(shù)被中斷破壞如何使函數(shù)具有可重入性 使使Swap()Swap()函數(shù)具有可重入性:函數(shù)具有可重入性:l把把TempTemp定義為局部變量;定義為局部變量;l調(diào)用調(diào)用Swap()Swap()函數(shù)之前關(guān)中斷,調(diào)動后再開中斷;函數(shù)之前關(guān)中斷,調(diào)動后再開中斷;l用信號量禁止該函數(shù)在使用過程中被再次調(diào)用;用信號量禁止該函數(shù)在使用過程中被再次調(diào)用;打開/關(guān)閉中斷 在在 COS-IICOS-II中,可以通過:中,可以通過:OS_ENTER_CRITICAL() OS_ENTER_
54、CRITICAL() OS_EXIT_CRITICAL()OS_EXIT_CRITICAL()宏來控制系統(tǒng)關(guān)閉或者打開中斷。這需要處理器的支持。宏來控制系統(tǒng)關(guān)閉或者打開中斷。這需要處理器的支持。在在ARM7TDMIARM7TDMI的處理器上,可以設(shè)置相應(yīng)的寄存器來關(guān)閉或者打開的處理器上,可以設(shè)置相應(yīng)的寄存器來關(guān)閉或者打開系統(tǒng)的所有中斷。系統(tǒng)的所有中斷。 處理器支持中斷并且能產(chǎn)生定時中斷 l COS-IICOS-II是通過處理器產(chǎn)生的定時器的中斷來實現(xiàn)多是通過處理器產(chǎn)生的定時器的中斷來實現(xiàn)多任務(wù)之間的調(diào)度的。任務(wù)之間的調(diào)度的。lARM9ARM9的處理器上可以產(chǎn)生定時器中斷。的處理器上可以產(chǎn)生定時
55、器中斷。處理器支持硬件堆棧 l COS-IICOS-II進(jìn)行任務(wù)調(diào)度的時候,會把當(dāng)前任務(wù)的進(jìn)行任務(wù)調(diào)度的時候,會把當(dāng)前任務(wù)的CPUCPU寄存寄存器存放到此任務(wù)的堆棧中,然后,再從另一個任務(wù)的堆器存放到此任務(wù)的堆棧中,然后,再從另一個任務(wù)的堆棧中恢復(fù)原來的工作寄存器,繼續(xù)運行另一個任務(wù)。所棧中恢復(fù)原來的工作寄存器,繼續(xù)運行另一個任務(wù)。所以,寄存器的入棧和出棧是以,寄存器的入棧和出棧是 COS-IICOS-II多任務(wù)調(diào)度的基礎(chǔ)。多任務(wù)調(diào)度的基礎(chǔ)。 lARM9ARM9處理器中有專門的指令處理堆棧,可以靈活的使用處理器中有專門的指令處理堆棧,可以靈活的使用堆棧。堆棧。移植對開發(fā)工具的要求 l移植移植
56、COS-IICOS-II需要一個標(biāo)準(zhǔn)的需要一個標(biāo)準(zhǔn)的C C交叉編譯器;交叉編譯器;l由于移植時需要對由于移植時需要對CPUCPU的寄存器進(jìn)行操作,所以需要的寄存器進(jìn)行操作,所以需要C C交交叉編譯器能夠支持匯編語言程序;叉編譯器能夠支持匯編語言程序;l嵌入式嵌入式C C編譯器一般都包括匯編器、鏈接器和定位器。鏈編譯器一般都包括匯編器、鏈接器和定位器。鏈接器是用來將不同的模塊(編譯或匯編過的文件)鏈接接器是用來將不同的模塊(編譯或匯編過的文件)鏈接成目標(biāo)文件;定位器則允許將代碼和數(shù)據(jù)放置在目標(biāo)處成目標(biāo)文件;定位器則允許將代碼和數(shù)據(jù)放置在目標(biāo)處理器的指定內(nèi)存空間中;理器的指定內(nèi)存空間中;移植uCO
57、S-II要點(1)開關(guān)中斷的方式。推薦使用開關(guān)中斷的方式。推薦使用method3method3 #if OS_CRITICAL_METHOD = 3#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;OS_CPU_SR cpu_sr;#endif#endif OS_ENTER_CRITICAL(); OS_ENTER_CRITICAL(); OS_EXIT_CRITICAL(); OS_EXIT_CRITICAL(); 使用method3方式的開關(guān)中斷#define OS_ENTER_CRITICAL() cpu_sr = INTS_OFF(); #defin
58、e OS_EXIT_CRITICAL() if(cpu_sr = 0) INTS_ON(); ARM的中斷模式l設(shè)備的中斷在設(shè)備的中斷在ARMARM中被映射到了兩個異常中中被映射到了兩個異常中FIQFIQ和和IRQIRQl通過控制通過控制CPSRCPSR中的對應(yīng)數(shù)據(jù)位,可以開啟或者關(guān)閉中中的對應(yīng)數(shù)據(jù)位,可以開啟或者關(guān)閉中斷斷為了方便和統(tǒng)一為了方便和統(tǒng)一uCOS-IIuCOS-II系統(tǒng)中斷的處理,只使用了系統(tǒng)中斷的處理,只使用了IRQIRQ模式的中斷。模式的中斷。移植uCOS-II要點(2)系統(tǒng)中斷的處理l所有中斷的調(diào)用都需要經(jīng)過系統(tǒng)的接管。中斷處理函所有中斷的調(diào)用都需要經(jīng)過系統(tǒng)的接管。中斷處理
59、函數(shù)調(diào)用前后需要通知系統(tǒng)。例如:數(shù)調(diào)用前后需要通知系統(tǒng)。例如:OSIntEnter();yourInterruptFun();OSIntExit();OSIntExit的意義的意義ARM的工作模式lARMARM處理器有處理器有7 7種操作模式種操作模式: :l用戶模式用戶模式(usr)(usr) - - 正常的程序執(zhí)行模式正常的程序執(zhí)行模式l快速中斷模式快速中斷模式(fiq)(fiq) - - 支持高速數(shù)據(jù)傳輸或通道處理支持高速數(shù)據(jù)傳輸或通道處理l中斷模式中斷模式( (irq)irq) - - 用于通用中斷處理用于通用中斷處理l管理員模式管理員模式(svc)(svc) - - 操作系統(tǒng)的保護(hù)模
60、式操作系統(tǒng)的保護(hù)模式. .l中止模式中止模式(abt)(abt) - - 支持虛擬內(nèi)存和支持虛擬內(nèi)存和/ /或內(nèi)存保護(hù)等異常或內(nèi)存保護(hù)等異常l系統(tǒng)模式系統(tǒng)模式(sys)(sys) - - 支持操作系統(tǒng)的特殊用戶模式支持操作系統(tǒng)的特殊用戶模式( (運行操作系統(tǒng)任務(wù))運行操作系統(tǒng)任務(wù))l未定義模式未定義模式(und)(und) - - 支持硬件協(xié)處理器的軟件仿真支持硬件協(xié)處理器的軟件仿真 l除了用戶模式外,其他模式均可視為特權(quán)模式除了用戶模式外,其他模式均可視為特權(quán)模式ARM的寄存器(1)l3737個寄存器個寄存器u31 31 個通用個通用3232位寄存器,包括程序計數(shù)器位寄存器,包括程序計數(shù)器P
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度醫(yī)療設(shè)施建設(shè)項目三方代建施工合同范本3篇
- 2024天然氣液化運輸與儲存一體化合同3篇
- 2024年度事業(yè)單位聘用合同要素解析與事業(yè)編制身份認(rèn)定流程2篇
- 2024年度前期物業(yè)服務(wù)合同違約責(zé)任及賠償標(biāo)準(zhǔn)3篇
- 2024全新商業(yè)綜合體物業(yè)轉(zhuǎn)讓服務(wù)合同下載3篇
- 2024土方開挖與基礎(chǔ)工程一體化承包合同3篇
- 2024年新型砼泵車租賃與節(jié)能技術(shù)應(yīng)用合同3篇
- 2024年度生物檢測技術(shù)服務(wù)與供應(yīng)鏈管理合同3篇
- 2024年度航空航天沙盤模型設(shè)計與研發(fā)合同3篇
- 2024年版廉華夫妻分手合同版B版
- 新人教版三年級上冊數(shù)學(xué) 總復(fù)習(xí) 教學(xué)課件
- 骨科手術(shù)同意書實用模板
- 《西方現(xiàn)代美術(shù)史》課件13觀念與后現(xiàn)代
- TCECA-G 0171-2022 零碳工廠評價規(guī)范
- 董事會戰(zhàn)略委員會工作細(xì)則
- ppt模板:青團團委團課動態(tài)ppt模板課件
- 實訓(xùn)報告---配置-Hyper-V-服務(wù)實訓(xùn)
- 2022年江蘇省衛(wèi)生系統(tǒng)事業(yè)單位招聘考試(臨床)參考題庫匯總(含答案)
- 場發(fā)射掃描電鏡介紹
- 啤酒游戲(完全操作版)
- 變更戶主情況登記表
評論
0/150
提交評論