999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于S3C44B0X的μC/OSⅡ和μC/GUI整合移植

2008-04-12 00:00:00馬雯雯
現代電子技術 2008年16期

摘 要:提出一種將開源實時操作系統μC/OSⅡ與文件系統、圖形界面等整合構建成一個嵌入式應用系統的設計方案。該方案通過分析μC/OSⅡ的啟動過程,重新配置和定義μC/OSⅡ的3個主要函數,初始化S3C44B0X內部LCD控制器的驅動程序,修改μC/GUI相關的配置文件和宏定義,總結出一套在S3C44B0X上具體的整合方法、移植步驟以及注意事項。最后測試表明該整合移植方法是可行的,系統平臺運行穩定可靠。

關鍵詞:S3C44B0X;μC/OSⅡ;μC/GUI;移植

中圖分類號:TP3141.54 文獻標識碼:B 文章編號:1004373X(2008)1603303

Realization of Transplanting μC/OSⅡ with μC/GUI in S3C44B0X

ZHOU Bo.1,MA Wenwen.2

(1.PLA No.92601 Troops,Zhanjiang,524009,China;2.Information Science and Engineering,Central South University,Changsha,410083,China)

Abstract:This paper presents a design method of embedded application system which uses open source real time operation system μC/OSⅡ combing such as file system,graphic user interface and so on.Via analyzing startup process of μC/OSⅡ,reconfiguring and defining three main functions of μC/OSⅡ,initializing drivers of LCD controller inside,modifying correlative configuration file and macro definition of μC/GUI,text summarizes the technique of realization,the steps of transplant and special notices.The testing indicates that the transplanting method is feasible,system platform runs stability and reliably.

Keywords:S3C44B0X;μC/OSⅡ;μC/GUI;transplant

μC/OSⅡ是一個微型的實時操作系統,包括一個操作系統最基本的一些特性,如任務調度、任務通信、內存管理、中斷管理等,而且這是一個代碼完全開放的實時操作系統,其源代碼相對其他操作系統來講是非常簡單的。但是就μC/OSⅡ本身而言,它僅是一個內核,還不能直接用于一個復雜的工程項目,必須與其他一些模塊如TCPIP、文件系統(FS)、圖形界面(GUI)等等整合[1],其中圖形界面(GUI)是一個成熟的工程產品不可缺少的部分。目前較為流行的嵌入式GUI有miroWindows,MiniGUI,QTEmbeddedOpenGUI,LcGUI等,而基于μC/OSⅡ平臺的用的較多的是μC/GUI。μC/GUI是Micrium公司開發的一種基于嵌入式系統的圖形界面支持系統。可以用于任何使用LCD圖形顯示的應用,提供高效的獨立于處理器及LCD控制器的圖形用戶接口,可以在單任務或是多任務系統上運行,并適用于任意LCD控制器和CPU下任何尺寸的真實顯示或虛擬顯示。

S3C44B0X是三星(SAMSUNG)公司一款基于ARM7TDMI核的32位的微處理器。它一方面具有ARM處理器的所有優點:低功耗、高性能;同時又具有非常豐富的片上資源,還集成LCD控制器,非常適合嵌入式產品的開發。通過將μC/OSⅡ和μC/GUI整合移植到S3C44B0X上,在此基礎上進行應用軟件的開發與傳統的嵌入式系統的開發相比更加簡單。本系統移植過程在ARMSDT2.5仿真開發環境下進行編譯,用JTAG仿真器進行在線仿真調試。

1 BootLoader

BootLoader是操作系統內核啟動之前運行的一段小程序,其作用與PC機上的BIOS類似,通過這段程序,將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。在一個基于ARM7TDMICPU核的嵌入式系統中,系統在上電或復位時通常都從地址0x00000000處開始執行。BootLoader可以分為3個部分:第一部分是匯編代碼,完成初始化中斷向量表和堆棧的功能;第二部分開始進入C語言編程,完成一些與啟動操作系統相關的硬件的初始化工作,如內存控制器、I/O控制和串口設備等;第三部分負責設置合適的硬、軟件環境,以便操作系統的內核可以順利啟動。

BootLoader完成系統初始化工作后把內核和文件系統的映像文件由存儲設備中拷貝到SDRAM中,再從SDRAM中執行內核的引導程序,自行加載內核和根文件系統。S3C44B0X沒有存儲區重映射功能,所有存儲區地址固定;并且S3C44B0X提供矢量中斷功能,這樣減少了中斷延遲,但是在啟動程序中,須擴展向量表。同時為了方便程序設計和在RAM中調試,中斷入口通過地址定義方式轉移到RAM區的最高端。圖1為S3C44B0X啟動程序流程圖[2]

通過配置特殊功能寄存器完成存儲器的初始化,將編譯生成的二進制文件bootloader.bin燒進NOR FLASH里就完成了系統啟動。

2 μC/OSⅡ移植所需工作

要使μC/OSⅡ可以正常工作,必須滿足下面要求[3]

(1) 處理器的C編譯器可以產生可重入代碼。這樣在多個任務被調用時,不必擔心數據被破壞,比如中斷執行的時候。ARM SDT的集成開發環境可以生成可重入代碼。

(2) 程序中可以打開或者關閉中斷。在進入臨界區時需要使用到這個功能。在ARM的處理器上,可以設置寄存器CPSR關閉或者打開系統的所有中斷。

(3) 處理器支持中斷,并且能夠產生定時中斷。多任務系統治之間的調度是通過定時器的調度。在ARM的處理器上可以產生定時器中斷。

(4) 處理器能夠支持一定數量數據的硬件堆棧。對于ARM這樣的可以使用大容量儲存器的處理器,這個不是問題。對于只能訪問1 kB大小存儲單元的處理器下移植比較困難。

(5) 處理器有將堆棧指針和其他CPU寄存器和讀出到堆棧或者內存的指令。μC/OSⅡ在進行任務調度時,會把當前任務的CPU寄存器存放到此任務的堆棧中,然后,再從另一個任務的堆棧中恢復原來的工作寄存器,繼續運行另一個任務。

根據上述要求進行μC/OSⅡ的移植,主要對OS_CPU.H,OS_CPU_C.C和OS_CPU_A.ASM三個文件進行修改[4]。3個文件所定義的函數在很多文獻中都作了介紹,本文主要說明以下幾個需要特殊注意的函數。

(1) OSTaskStkInit()函數。OSTaskStkInit()在任務創建的時候被調用,它負責初始化任務的堆棧結構。任務的最初堆棧。μC/OSⅡ的任務,在沒有執行的時候就像是剛剛被中斷一樣,任務一經CreateTask()創建,就是這樣的。堆棧則是任務上下文(contex)的一部分,CreateTask()調用OSTaskStkInit()來給任務做一個初始的任務上下文堆棧。任務堆棧結構如圖2所示。

(2) OSCtxSw()函數。該函數由OS_TASK_SW()宏調用。OS_TASK_SW()由OSSched()函數調用。OSSched()函數負責任務之間的切換,OSCtxSw()函數在OSSched()函數中負責將當前任務對應的處理器寄存器保存到堆棧中,并將任務中需要恢復的處理器寄存器從堆棧中恢復出來。

(3) OSIntCtxSw()函數。該函數由OSIntExt()函數調用。OSIntExt()函數由OSTickISR()函數調用。OSIntCtxSw()負責在定時中斷之間的切換。OSCtxSw()函數和OSIntCtxSw()函數均負責任務之間的切換,區別主要在于是否在定時中斷期間負責任務切換。OSIntCtwSw()函數主要負責當前任務堆棧指針,并將新任務對應的處理器寄存器從堆棧中恢復出來。

不管是中斷級任務切換還是任務級任務切換,發生切換需求時處理器都將脫離原先的系統模式,進入IRQ異常模式或SVC異常模式。由于這2種異常模式使用自己獨立的物理寄存器,進入異常時當前指針已經不是剛才指向任務堆棧的指針,當前也不是剛才系統模式下的寄存器,所以必須設法保存剛才系統模式下的R0~R12,LR,CPSR和指向下條指令地址的PC,使用的堆棧必須是系統模式下SP指向的任務堆棧,同時還要保證異常模式下的堆棧恢復原樣,不發生內存泄漏。在操作上,為保證壓棧的是中斷剛發生時系統模式下寄存器的值,程序采用先用異常模式堆棧過渡、再切換模式、分批保存的策略。

(4) OSTickISR()函數。μC/OSⅡ要求用戶提供一個時鐘源來實現時鐘節拍的功能,時鐘節拍推薦為每秒發生10~100次。時間節拍函數,由定時器中斷產生,主要完成的功能為保存處理器寄存器,調用OSIntEnter(),調用OSTimeTick(),調用OSIntExit(),恢復處理器寄存器,執行中斷返回命令。

3 μC/OSⅡ和μC/GUI的整合

液晶模塊選用LFUBK909,STN型,每個像素通過3位數據來表示顏色狀態,液晶屏大小

為320×240像素。S3C44B0X的LCD控制器設置8位單掃描,256色工作模式。為μC/GUI移植主要修改3個文件,包括LCDConfig.h,GUIConfig.h和LCDdriver.c。

(1) LCDConfig.h中定義可供配置的適用的宏。以下是S3C44B0X的LCD控制器的宏定義。

#define LCD_CONTROLLER (0)//控制器名稱

#define LCD_XSIZE (320)//x大小

#define LCD_YSIZE (240)//y大小

#define LCD_BITSPERPIXEL (8)//每像素適用的數據位

#define LCD_FIXEDPALETTE (332)//調色板模式

#define LCD_NUM_CONTROLLER (1)//控制器數量

#define LCD_MAX_LOG_COLORS (256)//最大邏輯顏色數

(2) GUIConfig.h主要對一些高級選項進行控制和定義。定義對操作系統的有關配置、動態內存空間、默認字體以及是否使用觸摸屏、窗口管理和存儲器管理等選項。

#define GUI_OS (1) //支持操作系統

#define GUI_WINSUPPORT (1) //使用窗口管理器

#define GUI_SUPPORT_MEMDEV (1) //支持存儲器管理

#define GUI_SUPPORT_TOUCH (1) //使用觸摸屏

#define GUI_SUPPORT_UNICODE (1) //支持UNICODE

#define GUI_ALLOC_SIZE 12500 //動態內存區大小

#define GUI_DEFAULT_FONT GUI_Font6x8//默認字體

(3) LCDdriver.c主要定義μC/GUI與LCD的硬件接口函數。包括LCD的初始化函數,畫點、線、多邊形、位圖等二維圖形的函數。主要定義以下函數。

int LCD_L0_Init(void)//初始化

void LCD_L0_SetPixelIndex(int x,int y,int ColorIndex)//用指定顏色在x,y處畫點

void LCD_L0_DrawHLine(int x0,int y,int x1)//畫水平線

void LCD_L0_DrawVLine(int x,int y0,int y1)//畫垂直線

void LCD_L0_FillRect(int x0,int y0,int x1,int y1)//用當前顏色填充矩形區域

void LCD_L0_DrawBitmap(int x0,int y0,int xsize,int ysize,int BitsPerPixel,int BytesPerLine,const U8* pData,int Diff,const LCD_PIXELINDEX* pTrans)//畫位圖

在μC/OSⅡ系統中建立多個任務,每個任務都有自己的優先級。多個任務調用μC/GUI用于用戶界面,在任務系統中具有典型的低級別,不會影響系統的實時行為。μC/OSⅡ中為了防止數據別破壞,每個任務訪問共享資源時必須獨占該資源,應該事先聲明。訪問結束后,應交出對資源的訪問權。當多個任務調用μC/GUI,液晶屏就是共享資源,當每個任務訪問之前,就必須鎖定該資源;當訪問完成后,對其進行解鎖[5]。μC/OSⅡ下使用μC/GUI就需要提供一些內核接口函數,與硬件相關的同時與操作系統相匹配。

static OS_EVENT *DispSem;

void GUI_InitOS(void)//初始化內核接口

void GUI_X_Lock(void)//鎖定

void GUI_X_Unlock(void)//解鎖

U32 GUI_X_GetTaskId(void)//返回當前任務標志符

在某些程序中,如果用到窗口工作機制的回調函數,實現時間函數就非常必要。

void GUI_X_Delay(int Period)//延時

void GUI_X_ExecIdle(void)//空閑任務

通過函數void GUI_Exec(void)來完成屏幕的刷新工作。

完成以上工作,操作系統μC/OSⅡ中就可以使用μC/GUI。μC/GUI中除了與硬件相關的代碼,還包括其他代碼。文件目錄結構如圖3所示。為了使開發過程變得更加簡單,這里將源文件編譯成ucgui.alf文件,即編譯成一個庫,直接添加在μC/OSⅡ下,如圖4所示。

在移植好的μC/OSⅡ和μC/GUI上建立自己的應用程序,編譯生成system.bin文件,通過JTAG在線調試,成功后通過USB口直接下載到Nand Flash。程序就可以在硬件系統上正常運行。

4 結 語

本文介紹BootLoader的編程方法,以及μC/OSⅡ和μC/GUI的整合移植具體方法。在此基礎上可以完成多任務調度。應用表明,μC/OSⅡ在S3C44B0X上運行穩定,可以達到實時系統的要求,μC/GUI在多任務環境下工作穩定,具有良好的顯示效果,其必將在嵌入式儀器儀表的設計中得到廣泛的應用。

參 考 文 獻

[1]王田苗.嵌入式系統設計與實例開發[M].北京:清華大學出版社,2003.

[2]田澤.嵌入式系統開發與應用教程[M].北京:北京航空航天大學出版社,2005.

[3]韓志耕,王健.實時內核μC/OSⅡ在S3C44B0X上移植的研究與實現[J].計算機工程與設計,2006,27(5):828830.

[4]劉濱,劉兵,趙艷華.基于μC/GUI的嵌入式圖形界面的設計[J].液晶與顯示,2005,20(6):558563.

[5]陳進,周治國.嵌入式圖形用戶界面在S3C44B0X上的移植[J].工業控制技術,2006(3):9799.

[6]趙瑞芳,唐焱,吳倚龍.μC/GUI中觸摸屏操作在S3C2410上的實現\\.現代電子技術,2007,30(10):6365,99.

主站蜘蛛池模板: 亚洲日韩国产精品综合在线观看| 久久99精品久久久大学生| 伦伦影院精品一区| 精品国产污污免费网站| 99re免费视频| 亚洲国产综合自在线另类| 日韩福利视频导航| 国产精品区网红主播在线观看| 欧美国产日韩在线观看| 久久久久久久久18禁秘| 22sihu国产精品视频影视资讯| 欧美日韩另类国产| 91久久国产综合精品女同我| 色婷婷在线播放| h网址在线观看| 色综合五月| 国产亚洲高清视频| 国产一区自拍视频| 欧美精品H在线播放| 国产无码在线调教| 91精品亚洲| www.99在线观看| 农村乱人伦一区二区| 国产成人免费视频精品一区二区| 伦精品一区二区三区视频| 色综合天天综合| 国产成人夜色91| 丁香综合在线| 国产在线精品香蕉麻豆| 久久综合结合久久狠狠狠97色| 国产成人艳妇AA视频在线| 国产激情无码一区二区免费 | 日韩天堂视频| 中文字幕伦视频| 色成人亚洲| 国产一区二区精品高清在线观看 | 喷潮白浆直流在线播放| 亚洲人精品亚洲人成在线| 国产成人免费高清AⅤ| 青草视频在线观看国产| 欧美天堂久久| 午夜毛片免费观看视频 | 婷婷五月在线视频| 秋霞午夜国产精品成人片| 少妇精品在线| 午夜在线不卡| 国产尹人香蕉综合在线电影| 成人在线视频一区| 青青热久麻豆精品视频在线观看| 国产杨幂丝袜av在线播放| 亚洲区视频在线观看| 国产性精品| 欧美精品1区2区| 国产精品主播| 国产成人毛片| 亚洲永久视频| 99精品一区二区免费视频| 亚洲欧美日韩中文字幕一区二区三区 | 天天综合网色| 中文字幕有乳无码| 99热这里只有精品国产99| 中文成人在线| 在线观看精品自拍视频| a级高清毛片| 青青国产视频| 亚洲成aⅴ人在线观看| 国产第一福利影院| 国产成人av大片在线播放| 九九九国产| 婷婷综合在线观看丁香| 国产特一级毛片| 国产无码制服丝袜| 中文一级毛片| 天天综合网亚洲网站| 国产噜噜噜视频在线观看| 亚洲欧美精品日韩欧美| 色偷偷一区| 无码一区18禁| 国产成人超碰无码| 在线观看网站国产| 玖玖精品视频在线观看| 国产综合精品一区二区|