国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

uC/OS-II在ADSP—BF531上的移植

發(fā)布時間:2010-11-16 11:01    發(fā)布者:eetech
關鍵詞: ADSP , BF531 , 移植
介紹源代碼公開的實時操作系統μC/OS-II的特點、內核結構及ADSP—BF53l的硬件特征,同時給出將μC/0S-II移植到ADSP-BF531型數字信號處理器上的詳細步驟和關鍵代碼。

隨著計算機技術的發(fā)展,嵌入式系統的應用愈來愈廣泛,對人們的生活產生了巨大的影響。通常,嵌入式系統的軟件部分都應用了實時操作系統(簡稱RTOS),在特定的RTOS之上開發(fā)應用軟件,可以讓程序開發(fā)人員屏蔽掉許多底層硬件細節(jié),提高軟件功能設計效率,簡化開發(fā)難度,同時使得程序調試方便,移植簡單,易維護,大大縮短開發(fā)周期,RTOS也因此越來越受到嵌入式系統開發(fā)人員的青睞。目前實時操作系統很多,如VxWorks、Windows CE、pSOS等,但這些軟件的價格和使用成本(版權費、維護費等)都十分昂貴,因此商業(yè)級RTOS軟件在使用上受到諸多的限制。而μC/OS-II則不同,它的源代碼是全部公開的,并且完全免費,是一個自由操作系統,程序開發(fā)人員可以改寫其中的源代碼使之符合自己的要求。由于其極強的可移植性和可裁減性,用戶可以根據自己的需要,裁剪掉不需要的部分,使操作系統變得小巧靈活,同時又能夠滿足用戶特定操作系統的需要。μC/OS-II的可靠性完全可以與商業(yè)級RTOS軟件相媲美,因此筆者在移植過程中選用了這一實時操作系統。  

1 ADSP—BF531的硬件特征  

Blackfin系列中的ADSP—BF531型數字信號處理器是由ADl和Intel公司合作,針對音頻和視頻信號的編解碼、手持設備和移動通信設備而研發(fā)的16位定點處理器,是建立在微信號架構基礎之上,集高性能數字信號處理器與微控制器于一身。ADSP-BF53l的內核工作頻率最高可達400MHz,處理器內核中包含2個16位MAC、2個40位ALU及4個8位ALU。專門用于視頻信號的處理;還集成了許多片上外設,包括硬件UART、SPI接口、PPI接口、同步串口、看門狗電路、16個GPIO接口等。為了達到降低功耗的目的,該處理器具有多種工作模式,同時通過編程還可以動態(tài)改變處理器內核的工作頻率和電壓.這些特性都為手持設備提供了絕佳的選擇。用戶可以利用ADI公司提供的VisualDSP++3.0(或更高版本)集成開發(fā)環(huán)境對處理器進行編程、調試和開發(fā)。  



2 實時操作系統介紹  

μC/OS-II是一種專門為微處理器設計的占先式實時多任務操作系統,具有源代碼公開、可移植性和可裁減性強、代碼可固化、穩(wěn)定性和可靠性高等特點。其內核主要提供任務管理、內存管理、時間管理等服務,系統最多可以支持64個任務(8個留于系統),每個任務均有自己獨立的優(yōu)先級。由于內核為占先式的,因此總是運行優(yōu)先級最高的任務。系統提供了豐富的函數可供調用,實現任務間的通信和切換。μ/OS-II的大部分代碼都是使用標準的A-NIS C編寫的.只有與處理器相關的一部分代碼使用匯編語言.因此具有極強的移植性,在大多數8位、16位和32位處理器上都能穩(wěn)定的運行。  

圖1示出μC/OS-II的軟硬件體系結構。從圖中可以看出,要實現μC/OS-II的移植,必須為其編寫OS_CPU.H、0S_CPU_C.C和OS_CPU_A.ASM 3個文件,這3個文件都與處理器的硬件特性相關,提供任務切換和系統時鐘功能。其余源文件的代碼都是公開的,可以直接從μC/OS-II的官方網站下載。  

3 對編譯器的要求  

雖然μC/OS-II具有很強的移植性,但在移植時,對處理器的編譯器有如下幾點要求:  

處理器的C編譯器能夠產生可重人代碼;  
C語言可以打開和關閉中斷;  
處理器支持中斷,并且能夠產生定時中斷;  
處理器能夠容納一定量數據的硬件堆棧;  
處理器有將堆棧指針和其他CPU寄存器讀出和存儲到堆?臻g或內存中的指令。  

ADSP-BF531型處理器的集成開發(fā)環(huán)境Visu-al++3.0通過關鍵字asm能在C代碼中嵌入匯編語言,同時內核定時器可以為系統提供定時中斷,總數量達20kbyte的片上數據RAM和SP、FP、USP 3個堆棧指針寄存器為操作系統各任務提供了豐富的硬件堆?臻g及對堆棧的方便操作。筆者正是在這些基礎上利用Visual++3.0編譯環(huán)境成功地完成了對ADSP-BF531處理器的μC/OS-II移植。  

4 移植μJLC/OS-II  

4.1重定義OS_CPIJ.H文件  

4.1.1與編譯器相關的數據類型  

不同的處理器有不同的字長,μC/OS-II不使用C的short、int、long等與編譯器相關的數據類型,而是重新定義了一系列類型以確保系統的可移植性,在系統移植時必須在OS_CPU.H頭文件中對這些數據類型重新定義,具體內容如下:  

typedef unsigned char BOOLEAN  
typedef unsigned char INT8U  
typedef signed char INT8S  
typedef unsigned short INTl6U  
typedef signed short INTl6S  
typedef unsigned int INT32U  
typedef signed int INT32S  
μC/OS-II中的指針根據處理器堆棧數據入口寬度定義為OS_STK類型:  
typedef unsigned int OS_STK  

4.1.2臨界代碼  

RTOS在進入系統臨界區(qū)之前都必須先關中斷,退出后再開中斷,μC/OS-II定義了2個宏指令來關閉/打開中斷:



  
#define OS_ENTER_CRITICAL0  
asm(“cli%O:”:”=d”(InterrupLach))  
#define OS_EXIT_CRITICAL()  
asm(“sti%0:”::”=d”(InterrupLaeh))  
其中InterrupLaeh為一全局變量,用于開關中斷時  
IMASK寄存器內容的恢復和保存。  

4.1.3堆棧增長方向設定  

在OS CPU.H頭文件中還必須根據處理器堆棧的增長方向對OS_STK_GROWTH進行宏定義,由于ADSP-BF531是按照由高地址到低地址的結構組織處理器堆棧,因此宏定義如下:  

#define OS_STK_GROWTH 1  

4.1.4 OS_TASK_SW0宏定義  

OS_TASK_SW0在μC/OS-II從低優(yōu)先級任務切換到高優(yōu)先級任務時被調用,定義如下:  

#define OS_TASK_sw() asm(“raise 13;”)  

4.2編寫OS_CPU_C.C文件  

μC/OS-lI的移植要求用戶在OS_CPU_C.C文件中編寫6個簡單的C函數,其中主要是完成OS-TaskStkInit (),其余5個函數可以不作處理。OS-TaskStkInit()負責任務堆棧的初始化,使得任務堆?雌饋砭拖駝偘l(fā)生過中斷并將所有的寄存器保存到堆棧中的情形一樣。不同的編譯器在函數調用時有不同的入棧方法,因此在具體實現時必須根據處理器的編譯環(huán)境進行調整。VisualDSP++3.0在函數調用時的堆棧結構如圖2所示。  

OSTaskStkInit()調用時需要傳遞任務代碼起始地址(task)、用戶參數指針(pdata)、任務堆棧頂端的地址(堆棧棧頂指針ptos)、返回參數為新任務堆棧棧頂指針,函數原型如下:  

void OSTaskStkInit()  
{OS_STK*stk;  
stk=(void *)ptos;  
opt=opt;  
*stk--=fINT32U)pdata;//用戶數據區(qū)  
*stk--=fINT32U)(task);//RETI寄存器  
*stk--=fINT32U)ptos;//FP寄存器  
(由于需要入棧的寄存器數量比較多,限于篇幅,在此省略其中多數)  
*stk--=fINT32U)0; //SEQSq、AT寄存器  
*stk--=fINT32U)0;//ASTAT寄存器  
retum((void*)stk);}  
任務建立時調用該函數對新建任務的堆棧進行初始化,初始化后的堆棧結構如圖3所示。

4.3編寫OS_CPU_A.ASM文件  

μC/OS-II移植的最后還需要用戶編寫4個重要的匯編函數,包括OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()及OSTickISR()。分別介紹如下:  

4.3.1 OSStartltighRdy()函數  

該函數由OSStart()調用,用以運行優(yōu)先級最高的就緒任務,其運行過程:調用用戶定義的OS-TaskSwHook()數→獲取任務堆棧指針→置位全局  

變量0SRunning 出棧CPU寄存器 中斷返回。在ADSP-BF531中的實現如下:  

_OSStartHighRdy:  
call_OSTaskSwHook;  
p0.1=_OSTCBHighRdy;  
p0.h=_0STCBHighRdy;  
pl=[p0];  
ssync;  
sp=[p1];  
p0.1=_OSRunning;  
p0.h=_OSRunning;  
r0=TRUE;  
[p0]=r0;  
ASTAT=[sp++];  
SEQSTAT=[sp++];  
FP =[sp++];  
RETI=[sp++;  
rti;  

4.3.2 OSCtxSw()函數  

實時操作系統內任務級的切換是通過處理器的軟中斷實現的,并且軟中斷服務例程的向量地址必須指向OSCtxSw()函數,因此該函數的匯編程序代碼如下:  

_OSCtxSw:  
[--sp]=RETI;  
[--sp]=FP;  
[--sp]=SEQTAT;  
[--sp]=ASTAT;  
p0.1=_OSTCBCur;  
p0.h=_OSTCBCur;  
pl=[p0];  
ssync;  
[pl]=sp;  
call_OSTaskSwHook;  
p0.1 =_OSPrioHighRdy;  
p0.h=_OSPrioHighRdy;  
r0=[p0];  
p0.1=_0SPrioCur;  
p0.h=_OSPrioCur;  
[p0]=r0;  
p0.1=_OSTCBHighRdy;  
p0.h=_OSTCBHighRdy;  
pl=[p0];
rO=[p0];  
ssync;  
sp=[p1];  
p0.1=_OSTCBCur;  
p0.h=_OSTCBCur;  
[p0]:r0; 、  
ASTAT=[sp++];  
SEQSTAT=[sp++];  
FP:[SP++];  
RETI=[sp++];  
rti;  



4.3.3 OSIntCtxSw()函數  

OSIntCtxSw()用于實現中斷級任務切換,由于該函數在中斷服務程序中調用,因此在函數代碼中不需要寄存器入棧,但堆棧結構中還包含了一些用戶不需要的函數調用返回地址,因此該函數必須在最初清理堆棧(調整堆棧指針的位置),其匯編程序代碼如下:  

_OSIntCtxSw:  
p0=20;  
sp=sp+p0;  
p0.1=_OSTCBCur;  
p0.h=_OSTCBCur;  
pl=[p0];  
ssync;  
[p1]=sp;  
call_OSTaskSwHook;  
p0.1=_OSPrioHighRdy;  
p0.h=_OSPrioHighRdy;  
r0=[p0];  
p0.1=_OSPrioCur;  
p0.h=_OSPfioCur;  
[po]=10;  
p0.1=_OSTCBHighRdy;  
p0.h=_OSTCBHighRdy;  
pl=[p0];  
r0=[p0];  
ssync;  
sp=[p1];  
p0.1=_OSTCBCur;  
p0.h=_0STCBCur;  
[po]=r0;  
ASTAT=[sp++];  
SEQSTAT=[sp++];  
FP =[sp++];  
RETI=[sp++];  
rti;  

4.3.4 OSTicklSR()函數  

μ,C/OS-II要求用戶提供一個時鐘資源來實現時間的延時和期滿功能。筆者在移植過程中使用內核定時器產生時鐘節(jié)拍,并通過定時器中斷服務例程OSTickISR0實現任務切換等功能,該函數的匯編程序代碼如下:  

_OSTicklSR:  
[--sp]=RETI;  
[--sp]=FP;  
[--sp]=SEQTAT;  
[--sp]=ASTAT;  
call_OSIntEnter;  
call_OSTimeTick;  
call_OSIntExit;  
ASTAT=[sp++];  
SEQSTAT=[sp++];  
FP =[sp++];  
RETI=[sp++];  
rti;  

4.4程序下載及調試  

完成以上文件的修改和編寫之后。就可在Vi-sualDSP++3.0環(huán)境中對所有的源文件進行編譯和連接,生成處理器可執(zhí)行的.dxe文件,通過JTAG直接下載到處理器內核的程序區(qū)運行。由于VisualD-SP++3.0提供了強大的調試功能,用戶能夠很清楚地了解μC/OS--II在處理器內的運行情況,這無疑也對μC/OS-Ⅱ向ADSP—BF531移植提供了強大的支持。  

5 結束語  

詳細介紹了向ADSP—BF531型處理器移植μC/OS-II實時操作系統的步驟和與處理器相關函數的代碼編寫,并成功地進行移植。通過測試,實時操作系統各任務之間的調用、中斷處理、任務之間的通信等都能夠穩(wěn)定的運行。μC/OS-II實時操作系統的使用。將程序員從冗繁的流程圖中解放出來,使得應用程序的設計過程大大簡化,并且程序的可讀性、擴展性、可靠性也得到了很大的改善。
本文地址:http://www.qingdxww.cn/thread-39606-1-1.html     【打印本頁】

本站部分文章為轉載或網友發(fā)布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Cortex-M4外設 —— TC&TCC結合事件系統&DMA優(yōu)化任務培訓教程
  • 利用模擬開發(fā)工具生態(tài)系統進行安全電路設計
  • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
  • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設計風險
  • 貿澤電子(Mouser)專區(qū)

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩色视频 | 欧美日韩在线看 | 精品一区二区三区在线观看视频 | 高清h黄动漫在线观看 | 欧美一二三区在线 | 黄页在线看 | www.日韩在线观看 | 亚洲第一成人影院 | 亚洲成在人天堂在线 | 日本特黄一级 | 伊人色强在线网 | 久久经典视频 | 农村寡妇偷毛片一级 | 久久精品欧美一区二区 | 国产精品国产三级国产普通话对白 | 国产一区二区三区欧美精品 | 欧美黑寡妇高清一级在线观看 | aa级国产女人毛片水真多 | 亚洲4区| 欧美图片欧美激情欧美精品 | 女人wwxxxxx | 亚洲三级网址 | 精品日韩一区二区三区 | 日本中文字幕在线观看 | 男女羞羞视频网站免费 | 国产精品美女一区二区 | 久久成年片色大黄全免费网站 | 日本不卡视频免费的 | 国产精品一区二区在线播放 | 久久久久久久国产免费看 | 久热这里有精品 | 欧美日韩国产片 | 四虎精品免费国产成人 | 男女强吻摸下面揉免费 | 亚洲欧美成人影院 | 99久热国产精品视频尤物不卡 | 成人a影片在线观看 | 狠狠色丁香婷婷综合尤物 | 久久国产精品超级碰碰热 | 国产免费看 | 中文字幕在线播放一区 |