版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Xilinx實(shí)際操作系統(tǒng)和庫(kù)內(nèi)容概述
本章主要介紹操作系統(tǒng)及板級(jí)支持包。該章內(nèi)容主要
(1)Xilinx微核接口;(2)LibXil標(biāo)準(zhǔn)C庫(kù);(3)板級(jí)支持包;(4)Xilkernel核;(5)LibXil庫(kù)。其中重點(diǎn)介紹了Xilkernel核,內(nèi)容包括:Xilkernel核概述、Xilkernel構(gòu)成、建立Xilkernel應(yīng)用程序、Xilkernel處理模型、Xilkernel調(diào)度模型、POSIX接口、XilkernelAPI接口、存儲(chǔ)器保護(hù)、系統(tǒng)初始化、Xilkernel定制等內(nèi)容。Xilinx的微核
Xilinx的微核(XilinxMicrokernel,XMK)包含三個(gè)不同的軟件實(shí)體,通過(guò)它用戶應(yīng)用程序可以與標(biāo)準(zhǔn)C和Math庫(kù),LibXil庫(kù),Xilkernel或獨(dú)立運(yùn)行的操作系統(tǒng)相接。標(biāo)準(zhǔn)C庫(kù)由newlib和libc組成,該庫(kù)包含了標(biāo)準(zhǔn)C的函數(shù),例如,stdio,stdlib,string例程。數(shù)學(xué)庫(kù)是newlib數(shù)學(xué)庫(kù)的擴(kuò)展,提供了標(biāo)準(zhǔn)的數(shù)學(xué)函數(shù)。Xilinx的微核
LibXil庫(kù)由下面構(gòu)成:
1)LibXilDriver-Xilinx的設(shè)備驅(qū)動(dòng)程序;
2)LibXilMFS-Xilinx的存儲(chǔ)文件系統(tǒng)(Memory,
MFS);
3)LibXilFlash-并行Flash編程庫(kù);
4)LibXillsf-串行Flash編程庫(kù);
Xilinx提供獨(dú)立板級(jí)支持包(BoardSupportPackage,BSP,后來(lái)Xilinx稱為Standard平臺(tái))和Xilkernel。Xilinx的微核結(jié)構(gòu)圖8.1XMK結(jié)構(gòu)用戶應(yīng)用程序XilkernelXilFlashXilMFSXillsf獨(dú)立BSPXilinx驅(qū)動(dòng)C,Math和GCC庫(kù)Xilinx的微核
用戶的應(yīng)用程序通過(guò)不同的方法和XMK的不同組成部分進(jìn)行接口。除了一些交互外,庫(kù)之間是獨(dú)立的。比如,Xilkernel使用BSP。BSP和Xilinx驅(qū)動(dòng)構(gòu)成了對(duì)底層硬件的抽象。
XMK的庫(kù)和OS依賴于標(biāo)準(zhǔn)的C庫(kù)組成部分。數(shù)學(xué)庫(kù)libm.a可以用來(lái)和用戶的應(yīng)用程序連接。Xilinx的微核
-板級(jí)支持包BSP
BSP是單線程庫(kù)。BSP提供對(duì)硬件的小的接口。向應(yīng)用程序提供所要求的最少的功能。
BSP提供的一些典型的函數(shù)包括:
(1)設(shè)置中斷(2)系統(tǒng)異常(3)配置緩存(4)其它硬件指定的功能。Xilinx的微核
-LibXil驅(qū)動(dòng)程序
LibXil是指設(shè)備驅(qū)動(dòng)程序,在軟件平臺(tái)中被包含用來(lái)向系統(tǒng)中的外設(shè)提供接口。這些驅(qū)動(dòng)伴隨EDK提供,并且被Libgen配置。后面詳細(xì)介紹設(shè)備驅(qū)動(dòng)的概念和在軟件平臺(tái)中適配的方法。Xilinx的微核
-Xilkernel
Xilkernel是一個(gè)簡(jiǎn)單的嵌入式處理器的核,能根據(jù)系統(tǒng)進(jìn)行定制。
Xilkernel有嵌入式核的那些關(guān)鍵的特征:
(1)多任務(wù);
(2)優(yōu)先級(jí)驅(qū)動(dòng)的搶先調(diào)度;
(3)進(jìn)程間通信;
(4)同步和中斷處理。
Xilinx的微核
-Xilkernel
Xilkernel是一個(gè)小的,模塊化的,用戶定制,能用在不同的系統(tǒng)配置環(huán)境。應(yīng)用程序能以不同模式,靜態(tài)的和Xilkernel連接形成單獨(dú)的可執(zhí)行文件。Xilinx的微核
-LibXilMFSLibXilMFS提供簡(jiǎn)單的存儲(chǔ)文件系統(tǒng),使得很容易通過(guò)使用輸入-輸出文件來(lái)訪問(wèn)數(shù)據(jù)。這個(gè)系統(tǒng)通過(guò)改變安裝區(qū)域的源文件,很容易配置滿足工程要求。Xilinx的微核
-LibXilFlash
LibXilFlash:提供對(duì)并行Flash的訪問(wèn),這些Flash與普通的Flash接口一致。支持Intel和AMD的CFI(CommonFlashInterface)芯片。Xilinx的微核
-LibXillsfLibXillsf是一個(gè)系統(tǒng)內(nèi)Flash庫(kù)。支持Xilinx系統(tǒng)內(nèi)Flash和外部的串行Flash(Atmel的AT45XXXD,Intel的S33和ST的M25PXX)。該庫(kù)使得高層軟件能和串行Flash通信。標(biāo)準(zhǔn)C庫(kù)
EDK庫(kù)和設(shè)備驅(qū)動(dòng)提供標(biāo)準(zhǔn)C庫(kù)函數(shù)和訪問(wèn)外設(shè)的函數(shù)。
EDK庫(kù)由Libgen根據(jù)MSS文件為每個(gè)工程自動(dòng)配置。這些庫(kù)和include文件保存在當(dāng)前工程lib和include目錄下。
mb-gcc的選項(xiàng)-l和-L用來(lái)將這些目錄添加到庫(kù)搜索路徑中。標(biāo)準(zhǔn)的C庫(kù)(lib.a)
該庫(kù)為MicroBlaze和PowerPC處理器提供了標(biāo)準(zhǔn)的C函數(shù)。可以根據(jù)下面路徑下的這些標(biāo)準(zhǔn)C函數(shù)找到頭文件。
<XILINX_EDK>/gnu/<processor>/<platform>/<processor-lib>/include
其中:<XILINX_EDK>為EDK的安裝路徑;
<processor>為powerpc-eabi或microblaze;
<platform>為sol,nt,lin;
<processor-lib>為powerpc-eabi或microblaze-xilinx-elf;標(biāo)準(zhǔn)的C庫(kù)(lib.a)Lib.c目錄和函數(shù)有:
_ansi,fastmath.h,machine/,reent.h,stdlib.h,utime.h,_syslist.h,fcnt1.h,malloc.h,regdef.h,string.h,utmp.h,ar.h,float.h,math.h,setjmp.h,sys/,assert.h,grp.h,paths.h,signal.h,termios.h,ctype.h,ieeefp.h,process.h,stdarg.h,time.h,dirent.h,limits.h,pthread.h,stddef.h,unctrl.h,errno.h,locale.h,pwd.h,stdio.h,unistd.h標(biāo)準(zhǔn)的C庫(kù)(lib.a)
程序訪問(wèn)標(biāo)準(zhǔn)的C庫(kù)函數(shù),必須使用如下方式編譯:
1)mb-gcc<Cfile>(對(duì)MicroBlaze處理器);
2)powerpc-eabi-gcc<Cfile>(對(duì)PowerPC處理器),訪問(wèn)libm數(shù)學(xué)函數(shù),指定lm選項(xiàng);XilinxC庫(kù)(libxil.a)Xilinx的C庫(kù)為MicroBlaze處理器包含下面的目標(biāo)文件:
1)_exception_handler.o,_interrupt_handler.o,_program_clean.o,_program_init.o2)默認(rèn)情況下提供異常和中斷句柄。
libxil.a被自動(dòng)包含。輸入/輸出函數(shù)
EDK庫(kù)包含標(biāo)準(zhǔn)C函數(shù)用于I/O,比如printf和scanf。這些函數(shù)代碼太大,不適應(yīng)嵌入式處理器的應(yīng)用。這些函數(shù)的原型在stdio.h。注意:C標(biāo)準(zhǔn)I/O例程比如printf,scanf,vfprintf在默認(rèn)情況下是行緩沖的。將其變成無(wú)緩沖格式的,必須調(diào)用setvbuf。輸入/輸出函數(shù)
比如:
setvbuf(stdout,NULL,_IONBF,0);這些輸入/輸出例程要求在新一行用CR和LF結(jié)束。除了標(biāo)準(zhǔn)的C函數(shù),EDK處理器庫(kù)提供了下面的小的I/O函數(shù):
1)voidprint(char*);(打印字符串到MSS文件中指定的標(biāo)準(zhǔn)輸出的外設(shè))
2)voidputnum(int);(轉(zhuǎn)換整數(shù)到16進(jìn)制的字符串,并打印字符串到外設(shè))
3)voidxil_printf(const*charctl1,…)(與printf函數(shù)類似,但代碼更小,不支持浮點(diǎn)數(shù))存儲(chǔ)器管理函數(shù)MicroBlaze處理器和PowerPC處理器C庫(kù)支持標(biāo)準(zhǔn)的存儲(chǔ)器管理函數(shù),比如malloc(),calloc(),free()。通過(guò)使用堆來(lái)動(dòng)態(tài)的分配存儲(chǔ)器。堆指針從低向高增加(運(yùn)行時(shí)不能增加)。分配堆至少128字節(jié),觀察函數(shù)返回值以確定正確的分配堆。算術(shù)操作
對(duì)所有處理器可以使用libgcc.a庫(kù)來(lái)用軟件實(shí)現(xiàn)整數(shù)和浮點(diǎn)算術(shù)運(yùn)算。當(dāng)硬件不支持使用指令的算術(shù)運(yùn)算原語(yǔ)時(shí),編譯器為所有的處理器插入對(duì)這些例程的調(diào)用。MicroBlaze處理器
-整數(shù)算術(shù)運(yùn)算
默認(rèn)情況下,整數(shù)乘法通過(guò)使用庫(kù)函數(shù)例程_mulsi3實(shí)現(xiàn)(軟件)。如果編譯器mb-gcc選擇-mno-xl-soft-mul時(shí),整數(shù)乘法可以使用硬件實(shí)現(xiàn)。整數(shù)除法和求模操作通過(guò)使用庫(kù)函數(shù)例程_divsi3和_modsi3實(shí)現(xiàn)(軟件)。可以定制使用硬件除法器來(lái)實(shí)現(xiàn)除法指令。雙精度乘法,除法和求模函數(shù)使用庫(kù)函數(shù)_muldi3,_divdi3,moddi3實(shí)現(xiàn)。無(wú)符號(hào)的這些操作相對(duì)于有符號(hào)的操作就是其前綴為_u,而不是_。MicroBlaze處理器
-浮點(diǎn)算術(shù)運(yùn)算
所有的浮點(diǎn)的加、減、乘、除和轉(zhuǎn)換操作使用C庫(kù)里的軟件函數(shù)實(shí)現(xiàn)。板級(jí)支持包
板級(jí)支持包BSP是軟件模塊的最底層,用來(lái)訪問(wèn)處理器指定的功能。當(dāng)應(yīng)用程序直接訪問(wèn)板/處理器使用獨(dú)立的BSP,BSP在操作系統(tǒng)層下面。MicroBlaze處理器BSP
當(dāng)系統(tǒng)使用MicroBlaze處理器,并且沒(méi)有使用OS時(shí),Libgen自動(dòng)在libxil.a工程庫(kù)中建立獨(dú)立的BSP。
MicroBlaze處理器BSP的函數(shù)類型主要有:中斷處理;異常處理;指令緩存處理;數(shù)據(jù)緩存處理;
FSL接口宏;
FSL宏標(biāo)志;
pseudo-asm宏;
PVR訪問(wèn)例程和宏;文件處理;錯(cuò)誤碼。中斷處理
使用中斷處理函數(shù),必須在源文件中包含頭文件mb_interface.h。MicroBlaze的中斷管理函數(shù)有:
voidmicroblaze_enable_interrupts(void)voidmicroblaze_disable_interrupts(void)voidmicroblaze_register_handle(XInterruptHandlerHandler,void*DataPtr)異常處理
這個(gè)功能在MicroBlaze3.0以前不可用。使用異常處理函數(shù),必須在源文件中包含頭文件mb_interface.h。當(dāng)在MHS中正確的配置了硬件異常處理,這些函數(shù)才能正常運(yùn)行。MicroBlaze的異常處理函數(shù)有:
voidmicroblaze_disable_exceptions(void)voidmicroblaze_enable_exceptions(void)voidmicroblaze_register_exception_handle(Xuint8Exceptionld,XExceptionHandlerHandler,void*DataPtr)指令緩存處理
使用指令緩存函數(shù),必須在源文件中包含頭文件mb_interface.h。MicroBlaze的指令緩存處理函數(shù)有:voidmicroblaze_enable_icache(void)voidmicroblaze_disable_icache(void)voidmicroblaze_init_icache_range(intcache_addr,intcache_size)數(shù)據(jù)緩存處理
使用數(shù)據(jù)緩存函數(shù),必須在源文件中包含頭文件mb_interface.h。MicroBlaze的數(shù)據(jù)緩存處理函數(shù)有:
(1)voidmicroblaze_enable_dcache(void)使能Microblaze處理器的數(shù)據(jù)緩存
(2)voidmicroblaze_disable_dcache(void)禁止Microblaze處理器的數(shù)據(jù)緩存
(3)voidmicroblaze_flush_dcache()刷新整個(gè)數(shù)據(jù)緩存,當(dāng)使用回寫緩存時(shí),使用這個(gè)函數(shù)(4)voidmicroblaze_flush_dcache_range(unsignedintcache_addr,unsignedintcache_len)
刷新指定的數(shù)據(jù)緩存的范圍數(shù)據(jù)緩存處理
(5)voidmicroblaze_invalidate_dcache()
使數(shù)據(jù)緩存無(wú)效(6)voidmicroblaze_flush_invalidate_range(unsignedintcache_addr,unsignedintcache_len)
使指定范圍的數(shù)據(jù)緩存無(wú)效下面給出初始化指令和數(shù)據(jù)緩存的一段代碼:
1.初始化指令Cachemicroblaze_invalidate_icache();microblaze_enable_icache();數(shù)據(jù)緩存處理2.初始化數(shù)據(jù)DCachemicroblaze_invalidate_dcache();microblaze_enable_dcache();3.在程序的結(jié)尾,應(yīng)該使用下面的代碼對(duì)緩存進(jìn)行恢復(fù)操作。
#ifXPAR_MICROBLAZE_DCACHE_USE_WRITEBACK==0microblaze_invalidate_dcache();#endifmicroblaze_disable_dcache();/*CleanupICache*/microblaze_invalidate_icache();microblaze_disable_icache();FSL接口宏BSP提供了FSL接口宏,用于訪問(wèn)通過(guò)FSL連接的硬件加速器。FSL接口宏主要包括:(1)getfslx(val,id,flags)在Microblaze的輸入FSL上,執(zhí)行得到功能。指令的語(yǔ)義由FSL的宏flag確定;(2)putfslx(val,id,flags)在Microblaze的輸出FSL上,執(zhí)行輸出功能。指令的語(yǔ)義由FSL的宏flag確定;(3)tgetfslx(val,id,flags)在Microblaze的輸入FSL上,測(cè)試得到功能。指令的語(yǔ)義由FSL的宏flag確定;(4)tputfslx(val,id,flags)在Microblaze的輸出FSL上,測(cè)試輸出功能。指令的語(yǔ)義由FSL的宏flag確定;FSL接口宏(5)getdfslx(val,id,flags)在Microblaze的輸入FSL上,執(zhí)行得到功能。指令的語(yǔ)義由FSL的宏flag確定;(6)putdfslx(val,id,flags)在Microblaze的輸出FSL上,執(zhí)行輸出功能。指令的語(yǔ)義由FSL的宏flag確定;(7)tgetdfslx(val,id,flags)在Microblaze的輸入FSL上,測(cè)試得到功能。指令的語(yǔ)義由FSL的宏flag確定;(8)tputdfslx(val,id,flags)在Microblaze的輸出FSL上,測(cè)試輸出功能。指令的語(yǔ)義由FSL的宏flag確定;(9)fsl_isinvalid(invalid)測(cè)試最后的FSL操作返回為有效數(shù)據(jù);(10)fsl_iserror(error)檢查最后的FSL操作設(shè)置一個(gè)錯(cuò)誤標(biāo)志;FSL宏標(biāo)志
FSL的宏標(biāo)志包含:
FSL_DEFAULT,F(xiàn)SL_NONBLOCKING,F(xiàn)SL_EXCEPTION,
FSL_CONTROL,F(xiàn)SL_ATOMIC,
FSL_NONBLOCKING_EXCEPTION,F(xiàn)SL_NONBLOCKING_ATOMIC,F(xiàn)SL_EXCEPTION_CONTROL,
FSL_EXCEPTION_ATOMIC,F(xiàn)SL_CONTROL_ATOMIC,
FSL_NONBLOCKING_EXCEPTION_CONTROL,
FSL_NONBLOCKING_EXCEPTION_ATOMIC,
FSL_EXCEPTION_CONTROL_ATOMIC,
FSL_NONBLOCKING_EXCEPTION_CONTROL_ATOMICpseudo-asm宏
BSP提供了訪問(wèn)MicroBlaze不同寄存器的宏,為了使用這些宏,必須在源文件中包含mb_interface.h。這些宏主要有:
(1)mggpr(rn):從通用寄存器rn中返回值;
(2)mfmsr():從MSR寄存器中返回當(dāng)前值;
(3)mfesr():從異常狀態(tài)寄存器ESR中返回當(dāng)前值;
(4)mfear():從異常地址寄存器EAR中返回當(dāng)前值;
(5)mffsr():從浮點(diǎn)狀態(tài)寄存器FPS中返回當(dāng)前值;
(6)mtmsr(v):將值v移到msr寄存器中;
(7)mtgpr(rn,v):將值v移動(dòng)到通用寄存器rn中;
(8)microblaze_getfpex_operand_a():返回最后缺陷浮點(diǎn)指令的操作數(shù)A;(9)microblaze_getfpex_operand_b():返回最后缺陷浮點(diǎn)指令的操作數(shù)B;PVR訪問(wèn)例程和宏MicroBlaze提供了可配置的處理器版本寄存器PVR。PVR的內(nèi)容使用pvr_t數(shù)據(jù)結(jié)構(gòu)獲得,該數(shù)據(jù)結(jié)構(gòu)是32位的數(shù)組,數(shù)組的每個(gè)字對(duì)應(yīng)PVR寄存器。PVR字的數(shù)目由配置所決定。為了使用宏,必須在源文件中包含pvr.h頭文件。訪問(wèn)PVR的方法:
1)使用microblaze_get_pvr()函數(shù)來(lái)填充PVR數(shù)據(jù)到pvr_t數(shù)據(jù)結(jié)構(gòu)中;2)在隨后的步驟中,可以使用PVR訪問(wèn)宏得到PVR的數(shù)據(jù);PVR訪問(wèn)函數(shù)為:
intmicroblaze_get_pvr(pvr_t*pvr)文件處理
文件處理的函數(shù)有:
intfcnt1(intfd,intcmd,longarg)
該函數(shù)通過(guò)cmd命令對(duì)文件描述符fd進(jìn)行操作。由于獨(dú)立的BSP不提供文件系統(tǒng),這個(gè)函數(shù)只用來(lái)作為完整性。Xilinx硬件抽象層
Xilinx硬件抽象層包含下面:類型(xil_types);寄存器IO(xil_io);異常(xil_exception);緩存(xil_cache);斷言(xil_assert);外部頭文件;測(cè)試存儲(chǔ)器(xil_testmem);測(cè)試寄存器(xil_testio);測(cè)試緩存(xil_testcache)。由于API函數(shù)封裝了這些底層的硬件抽象層操作,對(duì)于程序設(shè)計(jì)來(lái)說(shuō),很少直接使用這些硬件抽象層操作,所以對(duì)該部分不進(jìn)行進(jìn)一步的介紹,如果需要的話,參考Xilinx的庫(kù)參考手冊(cè)。Xilkernel核
XilKernel核是一個(gè)小的、健壯的和模塊化的核:
1)允許定制,使得設(shè)計(jì)者可以根據(jù)大小和功能對(duì)核進(jìn)行裁減;
2)在嵌入式核(kernel)內(nèi),使用POSIX(PortableOperatingSystemInterface,可移植操作系統(tǒng)接口)API支持核(core)的特征
3)支持MicroBlaze、PowerPC405和PowerPC440處理器
XilKernel的進(jìn)程間通信IPC服務(wù)用來(lái)實(shí)現(xiàn)高層服務(wù)(比如網(wǎng)絡(luò),視頻和音頻),并且使用這些服務(wù)來(lái)運(yùn)行程序。Xilkernel核
下面給出了那些影響在下一個(gè)工程中使用核的決定性因素:
1)典型的嵌入式控制應(yīng)用由多個(gè)任務(wù)組成,這些任務(wù)需要按照一個(gè)特定的序列或安排來(lái)執(zhí)行。隨著所涉及的控制任務(wù)的增加,人工組織子任務(wù)和分時(shí)享用所要求的工作變得十分困難。當(dāng)復(fù)雜度增加時(shí),這樣一個(gè)程序的響應(yīng)能力和性能大大降低。
2)分解這些任務(wù)作為單獨(dú)的應(yīng)用程序,并且在一個(gè)操作系統(tǒng)上實(shí)現(xiàn)這些應(yīng)用程序會(huì)變得更加直觀。Xilkernel核
3)一個(gè)核允許在一個(gè)抽象層上編寫代碼,而不是在微控制器級(jí)獨(dú)立代碼上編寫代碼。
4)很多普通常規(guī)的應(yīng)用程序都依賴于操作系統(tǒng)的服務(wù),比如文件系統(tǒng),時(shí)間管理等。
5)Xilkernel是一個(gè)小的庫(kù),它提供了這些必須的服務(wù)。移植或使用通用和開放的源碼庫(kù)(比如圖像或網(wǎng)絡(luò)協(xié)議)也要求某些形式的OS服務(wù)。Xilkernel包含的關(guān)鍵特征1、通過(guò)裁減功能,使其對(duì)一個(gè)系統(tǒng)具有高度的可擴(kuò)展性
2、通過(guò)XPS在很短時(shí)間內(nèi)完成核的配置和使用
3、核的健壯性:通過(guò)參數(shù)有效性檢查保護(hù)系統(tǒng)調(diào)用,并且正確的返回可移植性操作系統(tǒng)接口POSIX錯(cuò)誤代碼
4、POSIXAPI目標(biāo)是嵌入式核,包括:輪循或嚴(yán)格優(yōu)先級(jí)調(diào)度的線程同步化服務(wù)-信號(hào)量和互斥鎖IPC服務(wù)-消息隊(duì)列和共享存儲(chǔ)器動(dòng)態(tài)緩沖池存儲(chǔ)器分配軟件定時(shí)器用戶級(jí)中斷處理Xilkernel包含的關(guān)鍵特征5、通過(guò)核的靜態(tài)線程的創(chuàng)建和啟動(dòng)6、對(duì)核的系統(tǒng)調(diào)用接口7、為MicroBlaze處理器的異常處理8、通過(guò)可用的MicroBlaze處理器MMU的存儲(chǔ)器保護(hù)Xilkernel模塊用戶應(yīng)用程序Xilkernel系統(tǒng)調(diào)用句柄調(diào)度程序中斷和異常句柄軟件定時(shí)器線程管理信號(hào)量消息隊(duì)列共享存儲(chǔ)器動(dòng)態(tài)緩沖區(qū)管理用戶級(jí)中斷處理圖8.2Xilkernel結(jié)構(gòu)建立Xilkernel應(yīng)用程序
Xilkernel由核函數(shù)的形式構(gòu)成,這將導(dǎo)致一個(gè)簡(jiǎn)單的核連接模型。為了建立Xilkernel,必須在軟件平臺(tái)中包含Xilkernel,合理的配置它,并且運(yùn)行Libgen來(lái)產(chǎn)生Xilkernel庫(kù)。所設(shè)計(jì)的應(yīng)用程序獨(dú)立的開發(fā)或者作為XPS里的獨(dú)立的應(yīng)用文件工程。當(dāng)開發(fā)完應(yīng)用程序后,將Xilkernel與其進(jìn)行連接,然后建立最終的核映像文件。Xilkernel核產(chǎn)生后的文件為libxilkernel.a。建立Xilkernel應(yīng)用程序在SW平臺(tái)上包含和配置Xilkernel用Libgen產(chǎn)生庫(kù)libxilkernel.a應(yīng)用程序源文件包含在SW工程中設(shè)計(jì)編譯參數(shù)創(chuàng)建工程buildproject可執(zhí)行的核映像文件連接圖8.3Xilkernel開發(fā)流程建立Xilkernel應(yīng)用程序Xilkernel內(nèi)部也支持類似更強(qiáng)大的傳統(tǒng)的OS的連接和獨(dú)立的可執(zhí)行的方法。傳統(tǒng)的操作系統(tǒng)由獨(dú)立的映像文件,每個(gè)運(yùn)行在核上的應(yīng)用程序作為獨(dú)立的文件。因此,Xilinx推薦使用更簡(jiǎn)單和更簡(jiǎn)潔的庫(kù)連接模式。XPS支持這種模式,更容易使用。它對(duì)于調(diào)式,下載和啟動(dòng)都非常方便。對(duì)于有獨(dú)立運(yùn)行的這種高要求情況下,要求使用獨(dú)立可執(zhí)行模式。下面給出了使用核連接模式的應(yīng)用程序開發(fā)步驟:建立Xilkernel應(yīng)用程序1、應(yīng)用程序應(yīng)包含xmk.h文件作為首要的文件
#include“xmk.h”2、所設(shè)計(jì)的應(yīng)用軟件工程與libxil.a連接。該庫(kù)包含真實(shí)的核函數(shù)。應(yīng)用程序和該庫(kù)連接將形成最終的核和應(yīng)用程序映像文件。
3、Xilkernel負(fù)責(zé)MicroBlaze和PowerPC處理器第一級(jí)中斷和異常處理。因此,設(shè)計(jì)人員不能直接處理中斷。而在用戶級(jí)上處理異常和中斷;
4、使用最終的與核連接的軟件應(yīng)用工程的連接腳本特性來(lái)控制核的存儲(chǔ)器映射,可以使用自動(dòng)的腳本產(chǎn)生來(lái)幫助設(shè)計(jì)。建立Xilkernel應(yīng)用程序
5、應(yīng)用程序必須提供main(),這是核映像文件中的執(zhí)行的開始點(diǎn)。在main()里,可以做需要的初始化和設(shè)置。核保持未啟動(dòng)和休眠狀態(tài),在應(yīng)用程序設(shè)置完成后,如果想啟動(dòng)核,調(diào)用xilkernel_main()來(lái)啟動(dòng)核,使能中斷,將控制轉(zhuǎn)移給應(yīng)用程序。在調(diào)用xilkernel_main()以前,必須使能系統(tǒng)級(jí)特性。建立Xilkernel應(yīng)用程序
這些是典型的機(jī)器狀態(tài)特性,比如緩存的使能,硬件異常的使能,必須總是打開,即使從一個(gè)應(yīng)用程序到另一個(gè)應(yīng)用程序進(jìn)行上下文切換(contextswitch)。在應(yīng)用程序的線程中,不允許隨便改變機(jī)器狀態(tài)。如果在修改機(jī)器狀態(tài)時(shí),產(chǎn)生了上下文的切換,將導(dǎo)致隨后的線程執(zhí)行時(shí),沒(méi)有使能狀態(tài);所以必須在修改狀態(tài)以前,鎖定上下文切換和中斷。Xilkernel處理模型
Xilkernel內(nèi)的執(zhí)行單位(unit)稱為進(jìn)程上下文(processcontext)。在進(jìn)程上下文級(jí)上進(jìn)行調(diào)度。這沒(méi)有線程群的概念,這些群連在一起構(gòu)成傳統(tǒng)上的進(jìn)程。對(duì)于資源來(lái)說(shuō),所有的線程是平等的。POSIX線程API是最基本的用戶可見(jiàn)到進(jìn)程上下文的接口。這也提供了一些額外的其它的接口,它不是POSIX的一部分。使用線程標(biāo)識(shí)符來(lái)操作線程。使用進(jìn)程標(biāo)識(shí)符pid_t來(lái)操作標(biāo)識(shí)最基本的進(jìn)程上下文。Xilkernel調(diào)度模型
Xilkernel支持優(yōu)先級(jí)驅(qū)動(dòng),時(shí)間片搶先調(diào)度(SCHED_PRIO)或者簡(jiǎn)單的輪循(SCHED_RR)調(diào)度。這是全局調(diào)度策略而不能根據(jù)每個(gè)線程修改。在產(chǎn)生核時(shí)必須被靜態(tài)配置。在SCHED_RR,有一個(gè)簡(jiǎn)單的準(zhǔn)備隊(duì)列和每個(gè)進(jìn)程上下文在一個(gè)可配置的時(shí)間片執(zhí)行,當(dāng)超出時(shí)間片時(shí),就執(zhí)行隊(duì)列的下一個(gè)進(jìn)程上下文。在SCHED_PRIO,有很多準(zhǔn)備隊(duì)列,它們有優(yōu)先級(jí),優(yōu)先級(jí)0是系統(tǒng)內(nèi)的最高優(yōu)先級(jí),值越高優(yōu)先級(jí)越低。在同一優(yōu)先級(jí)的任務(wù),采用輪循和時(shí)間片進(jìn)行調(diào)度。Xilkernel調(diào)度模型
對(duì)于上面的調(diào)度模型,準(zhǔn)備隊(duì)列的長(zhǎng)度也可配置。如果在核中有等待隊(duì)列(信號(hào)量,消息隊(duì)列等),采用SCHED_PRIO模型時(shí),被配置成優(yōu)先級(jí)隊(duì)列。否則,被配置成FIFO隊(duì)列。Xilkernel調(diào)度模型
圖6.4進(jìn)程上下文狀態(tài)PROC_NEW:一個(gè)新創(chuàng)建的進(jìn)程PROC_READY:一個(gè)準(zhǔn)備執(zhí)行的進(jìn)程PROC_RUN:正在運(yùn)行的進(jìn)程PROC_WAIT:由于資源被阻塞的進(jìn)程PROC_DELAY:一個(gè)等待超時(shí)的進(jìn)程PROC_TIMED_WAIT:一個(gè)由于資源被阻塞的進(jìn)程,有一個(gè)相關(guān)的超時(shí)Xilkernel功能-線程管理
Xilkernel支持最基本的POSIX線程API。線程的創(chuàng)建和操作是以標(biāo)準(zhǔn)POSIX符號(hào)來(lái)實(shí)現(xiàn)的。線程使用唯一的pthread_t標(biāo)號(hào)來(lái)標(biāo)識(shí)。系統(tǒng)中所創(chuàng)建的進(jìn)程都有一個(gè)核封裝,當(dāng)線程結(jié)束的時(shí)候,將控制權(quán)交給核封裝。因此在線程代碼的末尾不需要一個(gè)指定的退出函數(shù)。
Xilkernel功能-線程管理
來(lái)自塊開始符號(hào)BSS存儲(chǔ)器池(基于系統(tǒng)中的最大線程靜態(tài)分配)代表線程自動(dòng)的分配線程堆棧。也可以為每一個(gè)去創(chuàng)建的線程動(dòng)態(tài)分配定制的存儲(chǔ)器作為堆棧。整個(gè)線程模塊是可選的,可以配置成輸入或輸出來(lái)作為軟件規(guī)范的一部分。Xilkernel功能-線程管理
(1)intpthread_create(pthread_tthread,pthread_attr_t*att,void*(*start_func)(void*),void*param)
創(chuàng)建線程并執(zhí)行參數(shù):thread是存儲(chǔ)線程ID的地址,attr存儲(chǔ)線程屬性結(jié)構(gòu)體的地址,start_func線程函數(shù)名,param線程函數(shù)參數(shù)指針。返回:0創(chuàng)建成功,-1線程ID無(wú)效,EINVAL無(wú)效屬性,
EAGAIN資源不足。(2)voidpthread_exit(void*value_ptr)
參數(shù):線程返回值的指針結(jié)束一個(gè)線程,但這個(gè)函數(shù)并不是必須的。需要用到返回值時(shí)才使用。Xilkernel功能-線程管理
(3)ntpthread_join(pthread_tthread,void**value_ptr)
參數(shù):thread線程ID,value_ptr線程返回值地址指針
返回:0成功,ESRCH無(wú)效線程,EINVAL線程返回值已經(jīng)被使用停止當(dāng)前線程等待目標(biāo)線程執(zhí)行完成并返回值。(4)pthread_tpthread_self(void)
返回:本線程IDXilkernel功能-線程管理
(5)intpthread_detach(pthread_ttarget)
返回:0成功,ESRCH線程未創(chuàng)建回收線程存儲(chǔ)資源,但并不會(huì)結(jié)束線程(6)intpthread_equal(pthread_tt1,pthread_tt2)
參數(shù):t1和t2兩個(gè)待比較線程的ID
返回:1兩線程是同一線程,0其它情況Xilkernel功能-線程管理
(7)intpthread_getschedparam(pthread_tthread,int*policy,structsched_param*param)
參數(shù):thread線程ID,policy全局調(diào)度策略指針,param
調(diào)度策略結(jié)構(gòu)體地址
返回:0成功,ESRCH線程無(wú)效,EINVAL調(diào)度參數(shù)無(wú)效函數(shù)返回個(gè)別線程的調(diào)度策略。(8)intpthread_setschedparam(pthread_tthread,intpolicy,conststructsched_param*param)
參數(shù):thread線程ID,policy忽略,param調(diào)度策略結(jié)構(gòu)體地址返回:0成功,ESRCH線程無(wú)效,EINVAL調(diào)度參數(shù)無(wú)效函數(shù)設(shè)置個(gè)別線程的調(diào)度策略。Xilkernel功能-線程管理
(9)intpthread_attr_init(pthread_attr_t*attr)
參數(shù):線程屬性指針?lè)祷兀?成功,1未成功,EINVAL屬性無(wú)效按照默認(rèn)設(shè)置初始化線程屬性對(duì)象attr
(10)intpthread_attr_destroy(pthread_attr_t*attr)
參數(shù):線程屬性指針?lè)祷兀?成功,EINVAL錯(cuò)誤函數(shù)銷毀線程指針對(duì)象,設(shè)置成未定義值。Xilkernel功能-線程管理
(11)intpthread_attr_setdetachstate(pthread_attr_t*attr,intdstate)
參數(shù):attr屬性結(jié)構(gòu)體,dstate要設(shè)置的狀態(tài)返回:0成功,EINVAL無(wú)效參數(shù)設(shè)置線程狀態(tài)(12)intpthread_attr_getdetachstate(pthread_attr_t*attr,int*dstate)
參數(shù):attr屬性結(jié)構(gòu)體,dstate獲取的狀態(tài)地址返回:0成功,EINVAL無(wú)效參數(shù)獲取線程狀態(tài):PTHREAD_CREATE_DETACHED
或者PTHREAD_CREATE_JOINABLEXilkernel功能-線程管理
(13)intpthread_attr_setschedparam(pthread_attr_t*attr,structsched_param*schedpar)
參數(shù):attr屬性結(jié)構(gòu)體,schedpar調(diào)度參數(shù)存儲(chǔ)地址返回:0成功,EINVAL無(wú)效參數(shù),ENOTSUP無(wú)效調(diào)度參數(shù)設(shè)置線程優(yōu)先級(jí),sched_param在sched.h文件中定義(14)intpthread_attr_getschedparam(pthread_attr_t*attr,structsched_param*schedpar)
參數(shù):attr屬性結(jié)構(gòu)體,schedpar線程調(diào)度參數(shù)指針?lè)祷兀?成功,EINVAL無(wú)效參數(shù)獲取線程優(yōu)先級(jí)。Xilkernel功能-線程管理
(15)intpthread_attr_setstack(constpthread_attr_t*attr,_void*stackaddr,size_tstacksize)
參數(shù):attr屬性結(jié)構(gòu)體,stacksize堆棧地址返回:0成功,EINVAL堆棧設(shè)置不當(dāng)設(shè)置線程堆棧(16)intpthread_attr_getstack(constpthread_attr_t*attr,void**stackaddr,size_t*stacksize)
參數(shù):attr屬性結(jié)構(gòu)體,stackaddr堆棧地址指針,
stacksize堆??臻g以字節(jié)為單位返回:0成功,EINVAL無(wú)效屬性獲取線程的堆棧信息Xilkernel功能-線程管理
(17)pid_tget_currentPID(void)
返回:當(dāng)前正在運(yùn)行的線程或操作的ID
(18)intkill(pid_tpid)
參數(shù):pid線程或操作ID
返回:0成功,-1未成功終止指定線程或操作(19)intprocess_status(pid_tpid,p_stat*ps)
參數(shù):pid操作或線程ID,ps狀態(tài)存儲(chǔ)地址返回:無(wú)獲取當(dāng)前正在運(yùn)行的線程或操作的狀態(tài)Xilkernel功能-線程管理
(20)int
xmk_add_static_thread(void*(*start_routine)(void*),intsched_priority)
參數(shù):start_routine線程函數(shù),sched_priority優(yōu)先級(jí)返回:0成功,-1未成功該函數(shù)將線程加入到啟動(dòng)或靜態(tài)線程列表中,這個(gè)函數(shù)要在xilkernel_main()函數(shù)之前調(diào)用(21)intyield(void)
迫使處理器運(yùn)行下一個(gè)準(zhǔn)備好的線程或操作,當(dāng)前線程放回任務(wù)準(zhǔn)備完畢隊(duì)列,等待再次獲取時(shí)間片運(yùn)行Xilkernel功能-信號(hào)量
Xilkernel支持核分配POSIX信號(hào)量,信號(hào)量能用于同步。POSIX信號(hào)量能計(jì)算信號(hào)量,它也能計(jì)算低于0的信號(hào)量(表示阻塞的進(jìn)程)。Xilkernel也提供一些接口用于命名的信號(hào)量。在系統(tǒng)初始化時(shí),能配置核內(nèi)所分配的信號(hào)量的數(shù)量和信號(hào)量等待隊(duì)列的長(zhǎng)度。信號(hào)量模塊是可選的,在初始化時(shí)可以配置成輸入或輸出。如果使用消息隊(duì)列,必須包含該模塊。Xilkernel功能-信號(hào)量
(1)intsem_init(sem_t*sem,intpshared,unsignedvalue)
參數(shù):sem信號(hào)量ID,pshared共享狀態(tài),value初始值返回:0成功,-1未成功。初始化一個(gè)信號(hào)量,并初始化信號(hào)量的值。
(2)intsem_destroy(sem_t*sem)參數(shù):sem信號(hào)量ID
返回:0成功,-1未成功釋放一個(gè)信號(hào)量資源
(3)intsem_getvalue(sem_t*sem,int*value)參數(shù):sem信號(hào)量ID,value獲取值地址返回:0成功,-1未成功獲取信號(hào)量當(dāng)前值Xilkernel功能-信號(hào)量
(4)intsem_wait(sem_t*sem)參數(shù):sem信號(hào)量ID
返回:0成功,-1未成功等待信號(hào)量的值大于0,并將信號(hào)量值減1。執(zhí)行對(duì)信號(hào)量的鎖操作
(5)intsem_trywait(sem_t*sem)參數(shù):sem信號(hào)量ID
返回:0成功,-1未成功功能與sem_trywait()函數(shù)相同,但不阻塞進(jìn)程。Xilkernel功能-信號(hào)量
(6)intsem_timedwait(sem_t*sem,unsigned_ms)參數(shù):sem信號(hào)量ID,ms定時(shí)器時(shí)間返回:0成功,-1未成功功能與sem_trywait()函數(shù)相同,等待信號(hào)量大于0過(guò)程中,通過(guò)定時(shí)器超時(shí)來(lái)停止阻塞進(jìn)程。(7)sem_t*sem_open(constchar*name,intoflag,...)
參數(shù):name信號(hào)量對(duì)象的字符串名,oflag控制信號(hào)量創(chuàng)建的標(biāo)識(shí)返回:創(chuàng)建的或已存在的信號(hào)量ID創(chuàng)建一個(gè)信號(hào)量
(8)intsem_close(sem_t*sem)參數(shù):sem信號(hào)量ID
返回:0成功,-1未成功關(guān)閉信號(hào)量Xilkernel功能-信號(hào)量
(9)intsem_post(sem_t*sem)參數(shù):sem信號(hào)量ID
返回:0成功,-1未成功增加信號(hào)量的值,執(zhí)行該函數(shù)為制定信號(hào)量的值加1
(10)intsem_unlink(constchar*name)
參數(shù):name信號(hào)量名返回:0成功,-1未成功移除信號(hào)量Xilkernel功能-消息隊(duì)列
Xilkernel支持核分配X/Open系統(tǒng)接口XSI消息隊(duì)列。XSI是POSIX下可選的接口集。消息隊(duì)列可以用于一個(gè)IPC機(jī)制。消息隊(duì)列可以容納任意大小的消息。在初始化時(shí),必須合理的分配存儲(chǔ)空間。在核內(nèi)所分配的消息隊(duì)列結(jié)構(gòu)的數(shù)量和消息隊(duì)列的長(zhǎng)度也能在系統(tǒng)初始化時(shí)配置。該模塊依賴于信號(hào)量模塊,在系統(tǒng)中有動(dòng)態(tài)存儲(chǔ)器分配模塊。Xilkernel功能-消息隊(duì)列
如果需要的話,這里有一個(gè)更強(qiáng)大的消息隊(duì)列功能可以配置。當(dāng)選擇擴(kuò)展的消息隊(duì)列接口時(shí),malloc和free被用來(lái)分配和釋放消息空間。因此,任意大小的消息能被傳送,而不需要確認(rèn)緩沖存儲(chǔ)器分配API能處理任意大小的請(qǐng)求。Xilkernel功能-消息隊(duì)列
(1)intmsgget(key_tkey,intmsgflg)
參數(shù):key消息隊(duì)列的隊(duì)列標(biāo)識(shí),msgflg消息隊(duì)列創(chuàng)建選項(xiàng)返回:唯一且非負(fù)的消息隊(duì)列ID
創(chuàng)建消息隊(duì)列(2)intmsgctl(intmsqid,intcmd,structmsqid_ds*buf)
參數(shù):msqid消息隊(duì)列ID,cmd命令,buf數(shù)據(jù)指針?lè)祷兀?成功,-1未成功以命令控制消息隊(duì)列Xilkernel功能-消息隊(duì)列
(3)intmsgsnd(intmsqid,constvoid*msgp,size_tmsgsz,intmsgflg)
參數(shù):msqid消息隊(duì)列ID,magp消息緩存指針,
msgsz消息大小,msgflg消息發(fā)送選項(xiàng)返回:0成功,-1未成功向消息隊(duì)列發(fā)送一個(gè)消息(4)ssize_tmsgrcv(intmsqid,void*msgp,size_tnbytes,longmsgtyp,intmsgflg)
參數(shù):msqid消息隊(duì)列ID,msgp復(fù)制接收的消息存放地址,nbytes指定接收消息的緩存大小,
msgtyp不支持,msgflg控制接收消息操作返回:接收到的字節(jié)數(shù),-1不成功從消息隊(duì)列接收一個(gè)消息Xilkernel功能-共享存儲(chǔ)器
Xilkernel支持核分配的XSI共享存儲(chǔ)器。XSI是X/Open系統(tǒng)接口,是POSIX下可選的接口集。共享存儲(chǔ)器是普通的,低延遲的IPC機(jī)制。在運(yùn)行時(shí),所要求的共享存儲(chǔ)器塊必須被標(biāo)識(shí),并且在系統(tǒng)配置時(shí)指明。由這個(gè)規(guī)范,緩沖存儲(chǔ)器被分配到每一個(gè)共享存儲(chǔ)器區(qū)域。目前,在運(yùn)行時(shí)的共享存儲(chǔ)器塊不能被動(dòng)態(tài)的分配。Xilkernel功能-共享存儲(chǔ)器
(1)intshmget(key_tkey,size_tsize,intshmflg)
參數(shù):key共享內(nèi)存標(biāo)識(shí),size共享內(nèi)存大小,
shmflg創(chuàng)建選項(xiàng)返回:非負(fù)唯一的共享內(nèi)存ID,-1未成功獲取共享內(nèi)存的ID
(2)intshmctl(intshmid,intcmd,structshmid_ds*buf)
參數(shù):shmid共享內(nèi)存ID,cmd命令,buf狀態(tài)接收緩存返回:0成功,-1未成功實(shí)現(xiàn)對(duì)共享內(nèi)存的控制操作Xilkernel功能-共享存儲(chǔ)器
(3)void*shmat(intshmid,constvoid*shmaddr,intflag)
參數(shù):shmid共享內(nèi)存ID,shmaddr未用,flag設(shè)置共享內(nèi)存附屬選項(xiàng)返回:共享內(nèi)存的起始地址,NULL未成功把共享內(nèi)存映射到調(diào)用該函數(shù)的地址空間,方便進(jìn)程對(duì)其訪問(wèn)(4)intshm_dt(void*shmaddr)
參數(shù):shmaddr共享內(nèi)存地址返回:0成功,-1未成功解除進(jìn)程對(duì)共享內(nèi)存的映射Xilkernel功能-互斥鎖Xilkernel提供支持用于核分配的POSIX線程互斥鎖。這個(gè)同步機(jī)制和pthread_API一起使用。在系統(tǒng)說(shuō)明時(shí),就能配置系統(tǒng)中互斥鎖的數(shù)量和互斥鎖等待隊(duì)列的長(zhǎng)度。支持:1)PTHREAD_MUTEX_DEFALUT2)PTHREAD_MUTEX_RECURSIVE
類型的互斥鎖?;コ怄i模塊是可選的,在系統(tǒng)說(shuō)明時(shí),可以配置成輸入或輸出。
Xilkernel功能-互斥鎖
(1)intpthread_mutex_init(pthread_mutex_t*mutex,constpthread_mutexattr_t*attr)
參數(shù):mutex互斥鎖ID地址,attr互斥鎖創(chuàng)建屬性結(jié)構(gòu)體
返回:0成功返回ID到地址中,EAGAIN資源不足
初始化互斥鎖(2)intpthread_mutex_destroy(pthread_mutex_t*mutex)
參數(shù):mutex互斥鎖ID
返回:0成功,EINVAL無(wú)效ID
釋放互斥資源,執(zhí)行該函數(shù)后,互斥資源變?yōu)槲闯跏蓟癄顟B(tài)。Xilkernel功能-互斥鎖
(3)intpthread_mutex_lock(pthread_mutex_t*mutex)
參數(shù):mutex互斥鎖ID
返回:0成功鎖定,-1未成功
加鎖操作,某個(gè)線程調(diào)用該函數(shù)為互斥鎖資源加鎖,保證操作時(shí)其它線程不能訪問(wèn)這個(gè)資源。如果資源已被鎖定,則阻塞調(diào)用。(4)intpthread_mutex_trylock(pthread_mutex_t*mutex)
參數(shù):mutex互斥鎖ID
返回:0成功,EINVAL無(wú)效ID,EBUSY資源已被鎖定,-1其它錯(cuò)誤
嘗試鎖定資源,若資源未被鎖定則成功返回,若資源已被鎖定,也不會(huì)阻塞調(diào)Xilkernel功能-互斥鎖
(5)intpthread_mutex_unlock(pthread_mutex_t*mutex)
參數(shù):mutex互斥鎖ID
返回:0成功,EINVAL無(wú)效ID,-1其它錯(cuò)誤
解鎖互斥資源(6)intpthread_mutexattr_init(pthread_mutexattr_t*attr)
參數(shù):attr屬性結(jié)構(gòu)體地址
返回:0成功,EINVAL無(wú)效屬性
初始化互斥資源的屬性Xilkernel功能-互斥鎖
(7)intpthread_mutexattr_destroy(pthread_mutexattr_t*attr)
參數(shù):attr屬性結(jié)構(gòu)體
返回:0成功,EINVAL無(wú)效屬性
拆除互斥資源的屬性,使得互斥資源的屬性變?yōu)槲闯跏蓟癄顟B(tài)(8)intpthread_mutexattr_settype(pthread_mutexattr_t*attr,inttype)
參數(shù):attr屬性結(jié)構(gòu)體,type互斥鎖類型
返回:0成功,EINVAL無(wú)效屬性或類型不支持
在共享資源的屬性中設(shè)置資源類型Xilkernel功能-互斥鎖
(9)intpthread_mutexattr_gettype(pthread_mutexattr_t*attr,int*type)
參數(shù):attr屬性結(jié)構(gòu)體,type類型存儲(chǔ)地址
返回:0成功,EINVAL無(wú)效屬性
獲取屬性中的資源類型Xilkernel功能-動(dòng)態(tài)緩沖存儲(chǔ)器管理
核提供了一個(gè)緩沖存儲(chǔ)器分配方案,能用于需要?jiǎng)討B(tài)分配存儲(chǔ)空間的應(yīng)用程序。這些接口對(duì)于標(biāo)準(zhǔn)C存儲(chǔ)分配例程是可替換的。標(biāo)準(zhǔn)的malloc()和free()速度慢,而且代碼比較大。分配例程從存儲(chǔ)器池中切換一塊存儲(chǔ)器,用戶將其傳給緩沖存儲(chǔ)器管理程序。緩沖存儲(chǔ)器管理程序管理存儲(chǔ)器池。設(shè)計(jì)者可以動(dòng)態(tài)建立新的存儲(chǔ)器緩沖池。設(shè)計(jì)者也可以根據(jù)應(yīng)用程序的要求靜態(tài)指定不同存儲(chǔ)器塊的大小和這種存儲(chǔ)器塊的數(shù)量。
Xilkernel功能-動(dòng)態(tài)緩沖存儲(chǔ)器管理
(1)intbufcreate(membuf_t*mbuf,void*memptr,intnblks,size_tblksiz)
參數(shù):mbuf緩沖池ID地址,memptr可用緩沖池,
nblks緩沖池內(nèi)存儲(chǔ)塊數(shù)量,blksiz每個(gè)存儲(chǔ)塊字節(jié)數(shù)返回:0成功并存儲(chǔ)緩沖池ID,-1錯(cuò)誤建立一個(gè)緩沖池(2)intbufdestroy(membuf_tmbuf)
參數(shù):mbuf緩沖池ID
返回:0成功,-1錯(cuò)誤破壞一個(gè)緩沖池Xilkernel功能-動(dòng)態(tài)緩沖存儲(chǔ)器管理
(3)void*bufmalloc(membuf_tmbuf,size_tsiz)
參數(shù):mbuf緩沖池ID,size所需內(nèi)存塊大小返回:申請(qǐng)到的內(nèi)存起始地址,NULL未成功從緩沖池中申請(qǐng)一塊內(nèi)存(4)voidbuffree(membuf_tmbuf,void*mem)
參數(shù):mbuf緩沖池ID,mem內(nèi)存塊地址釋放指定的內(nèi)存,釋放后內(nèi)存回到緩沖池,等待其他線程申請(qǐng)Xilkernel功能-軟件定時(shí)Xilkernel提供軟件定時(shí)器功能,用于時(shí)間相關(guān)的處理。該模塊可選,并且配置為輸入/輸出。下面給出軟件定時(shí)器接口函數(shù):Xilkernel功能-軟件定時(shí)
(1)unsignedintxget_clock_ticks()
返回:節(jié)拍數(shù)獲取Xilkernel啟動(dòng)到該函數(shù)調(diào)用之間的時(shí)間節(jié)拍數(shù)(2)time_ttime(time_t*timer)
參數(shù):timer存儲(chǔ)被要求的時(shí)間信息返回:秒數(shù)獲取Xilkernel啟動(dòng)到該函數(shù)調(diào)用之間的時(shí)間秒數(shù)(3)unsignedsleep(unsignedintms)
參數(shù):ms毫秒數(shù)返回:休眠間秒數(shù)休眠進(jìn)程(毫秒數(shù))Xilkernel功能-中斷處理Xilkernel負(fù)責(zé)對(duì)基本中斷的處理,而不需要用戶應(yīng)用程序直接處理。即使核沒(méi)有任何中斷,那系統(tǒng)也被簡(jiǎn)單的定時(shí)器中斷(用于調(diào)度)來(lái)驅(qū)動(dòng)。核處理主定時(shí)器中斷,使用它作為調(diào)度。在系統(tǒng)初始化時(shí),定時(shí)器中斷被初始化,并且與向量代碼連接。此外,當(dāng)通過(guò)中斷控制器(opb_intc)連接多個(gè)中斷時(shí),Xilkernel也可以處理。中斷處理腳本完成下面的任務(wù):Xilkernel功能-中斷處理
1)當(dāng)前執(zhí)行進(jìn)程的上下文被保存在上下文存儲(chǔ)區(qū)域(這里的上下文實(shí)際是指現(xiàn)場(chǎng));
2)禁止中斷,直到中斷處理結(jié)束當(dāng)執(zhí)行中斷程序時(shí),不使用用戶應(yīng)用程序的堆棧,這樣就減輕了進(jìn)程堆棧的負(fù)擔(dān)
Xilkernel功能-中斷處理
如果需要的話,這里有一個(gè)更強(qiáng)大的消息隊(duì)列功能可以配置。當(dāng)選擇擴(kuò)展的消息隊(duì)列接口時(shí),malloc和free被用來(lái)分配和釋放消息空間。因此,任意大小的消息能被傳送,而不需要確認(rèn)緩沖存儲(chǔ)器分配API能處理任意大小的請(qǐng)求。
Xilkernel功能-中斷處理
核結(jié)束第一級(jí)中
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版南京大學(xué)與京東集團(tuán)電商人才培養(yǎng)合作合同4篇
- 2025年度鋼管行業(yè)市場(chǎng)調(diào)研與分析服務(wù)合同
- 二零二五年度企業(yè)廢棄包裝物清運(yùn)合同模板
- 二零二五年度農(nóng)莊農(nóng)業(yè)保險(xiǎn)合同模板
- 2025年度農(nóng)業(yè)科技創(chuàng)新實(shí)驗(yàn)基地租賃合同范本3篇
- 二零二五版內(nèi)參內(nèi)容策劃與制作合同4篇
- 2025年度個(gè)人反擔(dān)保合同模板(保險(xiǎn)業(yè)務(wù)風(fēng)險(xiǎn)防范)
- 二零二五年度泥水工施工技術(shù)創(chuàng)新與推廣合同4篇
- 二零二五年度現(xiàn)代農(nóng)業(yè)科技項(xiàng)目質(zhì)押擔(dān)保合同3篇
- 二零二五年度瓷磚電商平臺(tái)銷售代理合同2篇
- 液化氣站其他危險(xiǎn)和有害因素辨識(shí)及分析
- 建筑工程施工安全管理思路及措施
- 高中語(yǔ)文教學(xué)課例《勸學(xué)》課程思政核心素養(yǎng)教學(xué)設(shè)計(jì)及總結(jié)反思
- 中國(guó)農(nóng)業(yè)銀行小微企業(yè)信貸業(yè)務(wù)貸后管理辦法規(guī)定
- 領(lǐng)導(dǎo)干部的情緒管理教學(xué)課件
- 初中英語(yǔ)-Unit2 My dream job(writing)教學(xué)課件設(shè)計(jì)
- 市政道路建設(shè)工程竣工驗(yàn)收質(zhì)量自評(píng)報(bào)告
- 優(yōu)秀支行行長(zhǎng)推薦材料
- 中國(guó)版梅尼埃病診斷指南解讀
- 暨南大學(xué)《經(jīng)濟(jì)學(xué)》考博歷年真題詳解(宏觀經(jīng)濟(jì)學(xué)部分)
- 藥店員工教育培訓(xùn)資料
評(píng)論
0/150
提交評(píng)論