<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于LPC2478的網(wǎng)絡(luò )型電能質(zhì)量監測裝置人機交互功能研發(fā)

基于LPC2478的網(wǎng)絡(luò )型電能質(zhì)量監測裝置人機交互功能研發(fā)

作者: 時(shí)間:2012-08-21 來(lái)源:網(wǎng)絡(luò ) 收藏

2. 1 μC/OS-Ⅱ的移植

μC /OS-Ⅱ嵌入式操作系統的移植工作包含以下幾個(gè)內容:編寫(xiě)硬件初始化啟動(dòng)代碼;編寫(xiě)設備驅動(dòng)代碼;修改操作系統與硬件相關(guān)的代碼。

所謂啟動(dòng)代碼,就是處理器在啟動(dòng)的時(shí)候執行的一段代碼,主要任務(wù)是定義程序入口指針;設置異常向量;初始化處理器各模式下的堆棧和寄存器;配置 CPU 時(shí)鐘源;初始化系統功能模塊;跳轉到C 語(yǔ)言主程序中等等。由于以上的操作均與處理器體系結構和系統配置密切相關(guān),所以一般由匯編來(lái)編寫(xiě)。在裝置中示意性的啟動(dòng)代碼為:

PRESERVE8

Vectors LDR PC,Reset_Addr

LDR PC,Undef_Addr

LDR PC,SWI_Addr

LDR PC,PA^_Addr

LDR PC,DA^_Addr

LDR PC,IRQ_Addr

LDR PC,FIQ_Addr

Reset_Addr

為每一種處理器模式初始化堆棧;

地址重映射,設置MEMMAP = 1;

配置時(shí)鐘源,設置Fpclk = 72M;

初始化FLASH;

初始化SDRAM;

IMPORT __main

LDR R0,= __main

BX R0;跳轉到主程序中

設備驅動(dòng)代碼是操作系統和硬件之間的橋梁。通過(guò)驅動(dòng)代碼,用戶(hù)可以不用了解具體硬件的細節,只需調用驅動(dòng)層所提供的函數就能對硬件進(jìn)行操作。在移植μC /OS-Ⅱ時(shí),亦只需根據硬件環(huán)境編寫(xiě)必要的硬件驅動(dòng)程序即可。在此移植中,涉及到功能的硬件除微處理器 外主要是鍵盤(pán)和液晶,液晶部分的驅動(dòng)代碼包含在了μC /GUI 圖形接口的移植步驟中。而鍵盤(pán)的主要功能為接受用戶(hù)的輸入,在微處理器 中,可以使用I /O 中斷的功能來(lái)實(shí)現對鍵盤(pán)輸入的監測,驅動(dòng)代碼則為鍵盤(pán)的中斷處理程序:

void Key_Handler(void)

{ DWORD key_n = 0;

key_n = IO0_INT_STAT_F; / /讀取中斷狀態(tài)

IO0_INT_EN_F & = 0xE07F8FFF; / /禁止中斷

IO0_INT_CLR | = 0xFFFFFFFF; / /清除中斷

if ((key_n&0x00800000) = = 0x00800000)

{ OSMboxPost(Keybox,(void * )1);}

if ((key_n&0x01000000) = = 0x01000000)

{ OSMboxPost(Keybox,(void * )2);}

if (key_n&0x02000000) = = 0x02000000)

{ OSMboxPost(Keybox,(void * )3);}

if ((key_n&0x08000000) = = 0x08000000)

{ OSMboxPost(Keybox,(void * )4);}

if ((key_n&0x10000000) = = 0x10000000)

{ OSMboxPost(Keybox,(void * )5);}

if ((key_n&0x00001000) = = 0x00001000)

{ OSMboxPost(Keybox,(void * )6);}

IO0_INT_EN_F | = 0x1F807000; / /開(kāi)啟中斷

}

編寫(xiě)完硬件初始化啟動(dòng)代碼和設備驅動(dòng)代碼之后,在修改操作系統與硬件相關(guān)的代碼之前,應該了解μC /OS-Ⅱ的體系結構如圖3 所示。移植μC /OS-Ⅱ,最主要的工作就是移植與硬件相關(guān)的3 個(gè)文件,即OS _CPU. H、OS _CPU_C. C 和OS _CPU_A. ASM。OS_CPU. H 中含有用#define 定義的與處理器有關(guān)的常量、宏和類(lèi)型定義。通過(guò)對此處定義的修改,可以使源代碼中對數據類(lèi)型的使用不依賴(lài)于具體的處理器。移植時(shí),只要使處理器、編譯器和 μC /OS-Ⅱ三者之間數據類(lèi)型統一即可。在此文件中還有一個(gè)μC /OS-Ⅱ對堆棧增長(cháng)方式的定義OS_STK_GROWTH,由于Keil 只支持遞減堆棧,因此,此處需要定義OS _ STK _GROWTH 的值為1。OS_CPU_C. C 文件中,需要進(jìn)行的工作是編寫(xiě)任務(wù)堆棧初始化函數OSTask-StkInit()。該函數在創(chuàng )建一個(gè)任務(wù)時(shí)被調用。根據微處理器的寄存器結構,就可以確定在本次移植中針對 應該使用的任務(wù)的堆棧結構,從而可以寫(xiě)出堆棧初始化函數代碼。在OS_CPU_A. ASM 文件中,有4 個(gè)函數需要編寫(xiě),分別是啟動(dòng)最高優(yōu)先級就緒任務(wù)函數OSStartHighRdy(),時(shí)鐘節拍中斷服務(wù)子程序OSTickISR(),任務(wù)級任務(wù)切換函數OS_TASK_SW( ) 及中斷級任務(wù)切換函數OSIntCtxSw()。

μC/OS-Ⅱ的體系結構圖
μC/OS-Ⅱ的體系結構圖
圖3 μC/OS-Ⅱ的體系結構圖。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>