引言 Nucleus PLUS是美國ATI公司為實(shí)時(shí)性要求較高的嵌入式系統應用設計的操作系統內核。約95%的Nucleus PLUS代碼用ANSI C語(yǔ)言編寫(xiě),因此,非常便于移植并能夠支持大多數類(lèi)型的微處理器,如X86、68K、PowerPC、MIPS、ARM等。經(jīng)過(guò)截減編譯后,Nucleus PLus核心代碼區一般不超過(guò)20KB大小。同時(shí)提供TCP/IP網(wǎng)絡(luò )、圖形界面Grafix、文件系統File等模塊。還有一個(gè)特點(diǎn)就是免費提供源代碼,有利于節省開(kāi)發(fā)費用。 S3c2410A是三星公司推出的基于A(yíng)RM920T內核高性能低功耗16/32位RISC微控制器,內部集成了豐富的系統外圍控制器。配合Nucleus PLUS操作系統可方便地開(kāi)發(fā)出適于手持設備和各種低功耗產(chǎn)品的應用程序,加快新產(chǎn)品的上市時(shí)間。 NUcleus PLUS啟動(dòng)過(guò)程嵌入式實(shí)時(shí)操作系統內核Nucleus PLus的啟動(dòng)過(guò)程如圖1所示。其中板級初始化(INT_Initialize)主要是完成中斷向量表、系統堆棧、時(shí)鐘中斷等基本硬件初始化; 操作系統初始化(INC_Initialize)主要是完成郵箱、隊列、管道、信號量、事件集等軟件組件初始化;應用程序初始化(Application_Initialize(first-available_Memory))主要是完成用戶(hù)定義的應用程序初始化,如創(chuàng )建內存池,創(chuàng )建任務(wù)、創(chuàng )建信號量、創(chuàng )建中斷、編寫(xiě)用戶(hù)應用程序等。移植的過(guò)程中,需要修改的是板級初始化(INT_Initialize])這部分內容,它是由ARM匯編語(yǔ)言編寫(xiě)的,下面詳細敘述。 NLicleus PLUS移植過(guò)程 INT-Reset子程序修改 INT-Reset是Nucleus PLUS啟動(dòng)時(shí)的程序入口,因為根據ARM微處理器的體系結構,在系統硬件上電或復位后,ARM所執行的第一條指令在地址0x00000000,即ARM的復位異常(Reset)向量地址,所以在這個(gè)地址要放置一個(gè)跳轉指令:BINT_Reset。 在INT_Reset這個(gè)子程序中放置的是硬件初始化程序,完成兩個(gè)功能: 1.改變ARM工作模式為管理模式(Supervisor Mode),管理模式是ARM提供給操作系統使用的一種保護模式; 2.屏蔽FIQ和IRQ中斷,因為在整個(gè)系統初始化的過(guò)程中,不能被中斷打斷,只有在中斷服務(wù)子程序初始化結束后,才可以打開(kāi)中斷,進(jìn)而響應中斷。 INT_Reset MRS R1.CPSR BIC R1,R1,#MODE_MASK ORR R1,R1,#SUP_MODE ORR R1,R1,#LOCKOUT MSR CPSR_cxsf,R1 建立異常向量表和中斷向量表 根據ARM的體系結構,ARM有7種類(lèi)型的異常(Exception),每種異常都有各自入口地址,即異常向量表(Exception Vectors)。異常向量表放置在從0X00000000地址開(kāi)始,連續32字節的空間內。S3C2410A共有56個(gè)中斷源,但有些中斷源共用一個(gè)中斷向量,所以只要求創(chuàng )建包含32個(gè)中斷源的中斷向量表。 INT_Vectors LDR PC,INT_ReseLAddr LDR PC,INT_Undef_Addr LDR PC,INT_Software_Addr LDR PC,INT_Prefetch_Addr LDR PC.INT_Data_Addr LDR PC,INT_Reserved_Addr LDR PC,INTjRQ_Addr LDR PC,INT_FIQ_Addr 配置存儲器控制器和MMU MMU(Memory Manage Unit)是存儲器管理單元的縮寫(xiě),用來(lái)實(shí)現虛擬地址到實(shí)際物理地址的映射。它是ARM的一部分,本身有少量存儲空間放置從虛擬地址到物理地址的匹配表,即轉換旁置緩沖區 (T L B s-T r a n s l a t i 0 nLookaside Buffers)。MMU實(shí)現兩個(gè)主要功能,將虛擬地址轉換成物理地址和控制存儲器的存取使能。 通過(guò)配置S3C2410A的存儲器控制器來(lái)初始化S3C2410A目標板的外圍存儲器。主要是設置存儲器類(lèi)型、總線(xiàn)寬度、信息,重點(diǎn)是對SDRAM進(jìn)行設置,如列地址數、信號線(xiàn)時(shí)序等。 堆棧初始化 C和ARM匯編源文件經(jīng)過(guò)ARM開(kāi)發(fā)環(huán)境ADS1.2編譯鏈接后,生成的映像(Image)文件包含RO(只讀代碼、數據段)、RW(可讀寫(xiě)數據段)和ZI(將要初始化為0的段)三個(gè)輸出段。當映像文件加載到flash中的時(shí),RO段和RW段在Flash中的位置見(jiàn)圖2(a),其中IImage$$RO$$Basel是RO段的開(kāi)始地址,也是包含RO輸出段的加載和執行地址,可以在A(yíng)RM Linker中設置,即-r0-base的值,從flash啟動(dòng)時(shí),這個(gè)值設置為0x00000000,ZI段不需要加載到flash中。當硬件電路復位后,映像文件中的RW段需要從Flash中拷貝到SDRAM內,同時(shí)要將ZI輸出段的內容需要用"0"進(jìn)行初始化,此時(shí)輸出段在存儲區內的位置見(jiàn)圖2(b)。IImage$$RW$$Basel是包含RW輸出段的執行地址,這個(gè)地址值也需要在A(yíng)RM Linker中設置,即-rw-base的值,一般將-rW-base的值設置到SDRAM的地址范圍內,在這里設置為S D R A M的首地址0x30000000。在Nucleus PLUS移植的過(guò)程中要編寫(xiě)代碼,完成以上操作過(guò)程。 ARM有7種運行模式分別為:用戶(hù)模式(usr)、快速中斷模式(fiq)、外部中斷模式(irq)、管理模式(svc)、數據訪(fǎng)問(wèn)中止模式(abt)、系統模式(sys)和未定義指令中止模式(und)。在堆棧初始化時(shí),應對S3C2410A的每種運行模式分別設置堆棧,一般堆棧的大小可以設置為4KB。另外還要對HISR(High-Level InterruptService Routines)堆棧的起始地址、大小和優(yōu)先級進(jìn)行設置,它的堆棧大小可設為2KB。 中斷初始化 1.將Nucleus PLUS異常中斷向量表從ROM中復制到RAM中,即:將地址為0x00000000的異常中斷向量表復制到地址0x33FFFF00處,這樣在中斷響應的過(guò)程中就可以從RAM中提取異常中斷向量表,提高中斷的響應速度; 2.關(guān)閉看門(mén)狗時(shí)鐘,創(chuàng )建所有IRQ中斷的中斷向量表; 3.清除所有中斷的判斷位。 系統時(shí)鐘中斷初始化 因為T(mén)imer4是用來(lái)作為Nucleus PLUS的系統時(shí)鐘的,所以在嵌入式實(shí)時(shí)操作系統移植的過(guò)程中,一定要對它的時(shí)鐘中斷進(jìn)行配置,配置過(guò)程如下: 1.設置S3C2410A的內部定時(shí)器Fimert定時(shí)器的中斷周期為10ms; 2.建立Timer4的中斷向量,用Timer4時(shí)鐘作為Nucleus PLUS的系統節拍時(shí)鐘; 3.初始化S3C2410A的MPLL控制寄存器M P L L C O N,將S3C2410A的主時(shí)鐘FCLK設置為266MHz; 4.設置分頻器寄存器CLKDIVN使HCLK=FCLK/2,PCLK=HCLK/2。 設置系統可用存儲區的首地址 在板級初始化程序(I N T-Initialize)結束后,系統開(kāi)始調用操作系統初始化程序(INC-Initialize)。這時(shí)需要設置可供用戶(hù)使用的存儲器首地址first-available-memory,令fiT St-available-memorY=IImage$$bss$$zI$$LimitI,其中IImage$$bss$$ZI$$Limitl是ARM鏈接器生成的可執行映像文件中初始化為0段(ZI段)的終止地址。修改后調用程序INC_Initialize(VOID*first_available_memory),即進(jìn)入操作系統初始化。Nucleus PLUS的移植工作也宣告結束。 結語(yǔ) 本文詳細介紹了Nucleus PLUS在S3C2410A上的移植過(guò)程和方法,移植后的代碼在深圳優(yōu)龍科技有限公司的FS2410開(kāi)發(fā)板上運行正常,可以實(shí)現多任務(wù)調度、任務(wù)間通信和中斷響應。因為移植過(guò)程是針對特定的硬件環(huán)境的,所以移植中要采用ARM匯編語(yǔ)言,這是嵌入式操作系統移植的難點(diǎn)。移植的重點(diǎn)是建立中斷向量表、創(chuàng )建操作系統的系統時(shí)鐘中斷和設置系統堆棧。本文論述的移植方法對其他嵌入式操作系統在A(yíng)RM微處理器上的移植過(guò)程也有一定的借鑒價(jià)值。 |