新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式實時操作系統Nucleus PLUS在S3C2410A上移植

        嵌入式實時操作系統Nucleus PLUS在S3C2410A上移植

        作者: 時間:2016-09-12 來源:網絡 收藏

        引言

        本文引用地址:http://www.104case.com/article/201609/303703.htm

        Nucleus PLUS是美國ATI 公司為實時性要求較高的嵌入式系統應用設計的操作系統內核。約95%的Nucleus PLUS代碼用ANSI C語言編寫,因此,非常便于移植并能夠支持大多數類型的微處理器,如X86、68K、PowerPC、MIPS、ARM等。經過截減編譯后,Nucleus PLUS 核心代碼區一般不超過20KB大小。 同時提供TCP/IP網絡、圖形界面Grafix、文件系統File等模塊。還有一個特點就是免費提供源代碼,有利于節省開發費用。

        S3C2410A是三星公司推出的基于ARM920T內核高性能低功耗16/32位RISC微控制器,內部集成了豐富的系統外圍控制器。配合Nucleus PLUS操作系統可方便地開發出適于手持設備和各種低功耗產品的應用程序,加快新產品的上市時間。

        Nucleus PLUS啟動過程

        嵌入式實時操作系統內核Nucleus PLUS的啟動過程如圖1所示。其中板級初始化(INT_Initialize)主要是完成中斷向量表、系統堆棧、時鐘中斷等基本硬件初始化;操作系統初始化(INC_Initialize)主要是完成郵箱、隊列、管道、信號量、事件集等軟件組件初始化;應用程序初始化 (Application_Initialize (first_available_memory))主要是完成用戶定義的應用程序初始化,如創建內存池,創建任務、創建信號量、創建中斷、編寫用戶應用程序等。移植的過程中,需要修改的是板級初始化(INT_Initialize)這部分內容,它是由ARM匯編語言編寫的,下面詳細敘述。

        圖1 Nucleus PLUS 啟動過程

        Nucleus PLUS移植過程

        INT-Reset子程序修改

        INT_Reset 是Nucleus PLUS啟動時的程序入口,因為根據ARM微處理器的體系結構,在系統硬件上電或復位后,ARM所執行的第一條指令在地址0x00000000,即ARM 的復位異常(Reset)向量地址,所以在這個地址要放置一個跳轉指令:B INT_Reset 。

        在INT_Reset這個子程序中放置的是硬件初始化程序,完成兩個功能:

        1. 改變ARM工作模式為管理模式(Supervisor Mode),管理模式是ARM提供給操作系統使用的一種保護模式;

        2. 屏蔽FIQ和IRQ中斷,因為在整個系統初始化的過程中,不能被中斷打斷,只有在中斷服務子程序初始化結束后,才可以打開中斷,進而響應中斷。

        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種類型的異常(Exception),每種異常都有各自入口地址,即異常向量表(Exception Vectors)。異常向量表放置在從0X00000000地址開始,連續32字節的空間內。S3C2410A共有56個中斷源,但有些中斷源共用一個中斷向量,所以只要求創建包含32個中斷源的中斷向量表。

        INT_Vectors

        LDR PC, INT_Reset_Addr

        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, INT_IRQ_Addr

        LDR PC, INT_FIQ_Addr

        配置存儲器控制器和MMU

        MMU(Memory Manage Unit)是存儲器管理單元的縮寫,用來實現虛擬地址到實際物理地址的映射。它是ARM的一部分,本身有少量存儲空間放置從虛擬地址到物理地址的匹配表,即轉換旁置緩沖區 (TLBs-Translation Lookaside Buffers)。MMU實現兩個主要功能,將虛擬地址轉換成物理地址和控制存儲器的存取使能。

        通過配置S3C2410A的存儲器控制器來初始化S3C2410A目標板的外圍存儲器。主要是設置存儲器類型、總線寬度、信息,重點是對SDRAM進行設置,如列地址數、信號線時序等。

        堆棧初始化

        C 和ARM匯編源文件經過ARM開發環境ADS1.2編譯鏈接后,生成的映像(Image)文件包含RO(只讀代碼、數據段)、RW(可讀寫數據段)和 ZI(將要初始化為0的段)三個輸出段。當映像文件加載到flash中的時,RO段和RW段在Flash中的位置見圖2(a),其中



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 南靖县| 阿勒泰市| 荆州市| 凯里市| 白河县| 保定市| 方山县| 辽中县| 海阳市| 岗巴县| 惠来县| 子洲县| 利津县| 通城县| 木里| 睢宁县| 儋州市| 新和县| 吉林省| 鄂托克旗| 休宁县| 崇信县| 高雄市| 景谷| 平原县| 新巴尔虎右旗| 麻城市| 睢宁县| 潼关县| 琼海市| 乌拉特中旗| 阳西县| 元氏县| 布拖县| 桓台县| 宣汉县| 冀州市| 屏南县| 炉霍县| 碌曲县| 桃园市|