常華利,尹震宇
1(中國科學(xué)院大學(xué),北京100049)
2(中國科學(xué)院 沈陽計(jì)算技術(shù)研究所,沈陽 110171)
基于MicroBlaze的μC/OS-II操作系統(tǒng)移植①
常華利1,2,尹震宇2
1(中國科學(xué)院大學(xué),北京100049)
2(中國科學(xué)院 沈陽計(jì)算技術(shù)研究所,沈陽 110171)
LT-H10滾齒機(jī)數(shù)控系統(tǒng)采用基于ARM的系統(tǒng)結(jié)構(gòu),其處理器等性能、資源比以往基于x86的系統(tǒng)受到很大的限制,所以CPU的占用率也相對(duì)較高.為了降低ARM CPU的占用率把系統(tǒng)運(yùn)行的部分主站控制驅(qū)動(dòng)程序遷移到底板FPGAMicroBlaze軟核處理器上運(yùn)行,本文提出了一種基于MicroBlaze軟核處理器的μC/OS-II的移植方案.測(cè)試實(shí)驗(yàn)結(jié)果表明μC/OS-II系統(tǒng)移植到MicroBlaze之后能穩(wěn)定的運(yùn)行.快速的任務(wù)上下文切換更有利于數(shù)控系統(tǒng)的實(shí)時(shí)性.針對(duì)MicroBlaze μC/OS-II系統(tǒng)和ARM Linux系統(tǒng)設(shè)計(jì)了兩個(gè)不同的任務(wù)調(diào)度算法對(duì)任務(wù)上下文切換的時(shí)間開銷進(jìn)行研究、測(cè)量和分析.此研究方案不僅可以滿足基于ARM的數(shù)控系統(tǒng)的應(yīng)用需要,同時(shí)適用于基于x86的數(shù)控系統(tǒng),達(dá)到降低系統(tǒng)CPU占用率的目的,在嵌入式數(shù)控系統(tǒng)中具有重要的研究意義與應(yīng)用價(jià)值.
FPGA;MicroBlaze;μC/OS-II;移植
LT-H10控制系統(tǒng)是針對(duì)滾齒機(jī)的專用控制系統(tǒng),是基于ARM處理器的嵌入式數(shù)控系統(tǒng)[1],底層硬件采用了FPGA實(shí)現(xiàn)系統(tǒng)主站,完成基本的電平轉(zhuǎn)換、信號(hào)采集等功能.系統(tǒng)主站要實(shí)現(xiàn)伺服-脈沖控制,總線協(xié)議,I/O控制,數(shù)字光柵尺控制,計(jì)數(shù)器,主軸控制等功能.進(jìn)一步的這些控制功能還需要實(shí)現(xiàn)在驅(qū)動(dòng)程序部分,運(yùn)行這些功能會(huì)占用大量ARM主處理器資源[2],而且控制指示燈以及超時(shí)報(bào)警的檢測(cè)、處理等也會(huì)占用ARM CPU資源.此外,GPMC總線帶寬有限,傳輸原始數(shù)據(jù)時(shí),也會(huì)帶來總線的大量開銷,并不利于實(shí)時(shí)性.
本文以LT-H10控制系統(tǒng)為研究對(duì)象,提出了一種基于MicroBlaze軟核處理器的μC/OS-II的移植[3]方案.把系統(tǒng)運(yùn)行的部分主站控制驅(qū)動(dòng)程序遷移到底板FPGA MicroBlaze軟核處理器上運(yùn)行,以達(dá)到降低ARM CPU占用率的目的.
此研究方案不僅適用于基于ARM的數(shù)控系統(tǒng),同時(shí)適用于基于x86的數(shù)控系統(tǒng),達(dá)到降低系統(tǒng)CPU占用率的目的,在嵌入式數(shù)控系統(tǒng)中具有重要的應(yīng)用價(jià)值.
1.1 實(shí)時(shí)操作系統(tǒng)μC/OS-II
μC/OS-II操作系統(tǒng)[4]目前在工業(yè)領(lǐng)域中使用的非常廣泛,作為一種源代碼公開的實(shí)時(shí)嵌入式操作系統(tǒng),最多可支持63個(gè)任務(wù),其內(nèi)核為占先式(即執(zhí)行就緒態(tài)中優(yōu)先級(jí)最高的任務(wù))并支持信號(hào)量、郵箱、消息隊(duì)列等多種進(jìn)程間通信機(jī)制;同時(shí)用戶可以根據(jù)需要對(duì)內(nèi)核中的功能模塊進(jìn)行裁剪[5];并且μC/OS-II操作系統(tǒng)代碼很簡潔,僅有5500行代碼,而且其大部分代碼是使用C語言編寫的,只有與硬件相關(guān)的少量代碼需要使用目標(biāo)板支持的匯編語言[6].所以說μC/OS-II具有內(nèi)核小巧、可裁剪、實(shí)時(shí)性強(qiáng)、多任務(wù)、方便移植到多種嵌入式平臺(tái)等特點(diǎn),使得各個(gè)任務(wù)獨(dú)立工作,互相不干涉,從而很容易使得任務(wù)被準(zhǔn)確執(zhí)行,使實(shí)時(shí)應(yīng)用程序的設(shè)計(jì)和擴(kuò)展變得簡單[7,8].
1.2 軟核處理器MicroBlaze
Xilinx首創(chuàng)了現(xiàn)場(chǎng)可編程邏輯陣列(FPGA)這一創(chuàng)新性的技術(shù),隨著FPGA的技術(shù)的發(fā)展,其邏輯容量逐步增大而成本越來越低[9].這種趨勢(shì)下,FPGA可以代替系統(tǒng)中越來越多的器件,并且發(fā)展到FPGA片上系統(tǒng).Xilinx推出了32位軟核處理器MicroBlaze,用來替代片上的微控制器,有效的縮小了PCB板的面積和器件數(shù)量,降低了整個(gè)系統(tǒng)的成本.該處理器采用32位RISC哈佛存儲(chǔ)結(jié)構(gòu),擁有極其靈活的架構(gòu)以及豐富的指令集.MicroBlaze軟核處理器具有占用資源少、可配置性強(qiáng)的特點(diǎn),可以和其他外設(shè)IP核一起,完成可編程芯片的設(shè)計(jì).MicroBlaze軟核處理器采用Xilinx公司提供的嵌入式開發(fā)套件EDK進(jìn)行設(shè)計(jì)開發(fā),設(shè)計(jì)套件DEK提供了硬件平臺(tái)開發(fā)環(huán)境XPS和軟件平臺(tái)開發(fā)環(huán)境SDK[10].
1.3 μC/OS-II代碼結(jié)構(gòu)分析以及處理器相關(guān)核心代碼
從μC/OS-II移植的過程來看,μC/OS-II代碼邏輯上可以分為三大組成部分:與處理器無關(guān)的內(nèi)核代碼、與處理器有關(guān)的核心代碼、與軟硬件環(huán)境設(shè)置有關(guān)的配置代碼[11].如圖1是μC/OS-II操作系統(tǒng)的代碼結(jié)構(gòu).
圖1 μC/OS-II的代碼結(jié)構(gòu)
其中與處理器無關(guān)的內(nèi)核代碼主要實(shí)現(xiàn)是任務(wù)管理、信號(hào)量、內(nèi)存管理、消息隊(duì)列、系統(tǒng)調(diào)用等功能(主要包括os_core.c、os_flag.c、os_mbox.c、os_mem.c、os_mutex.c、os_q.c、os_sem.c、os_task.c、os_time.c、ucos_ii.h、ucos_ii.c);
與處理器有關(guān)的核心代碼主要與操作系統(tǒng)的移植相關(guān)(主要包括os_cpu.h、os_cpu_a.s、os_cpu_c.c);
與軟硬件環(huán)境設(shè)置有關(guān)的配置代碼主要用于裁剪和設(shè)置操作系統(tǒng)(主要包括os_cfg.h、includes.h).
1.4 μC/OS-II在MicroBlaze上移植的可行性分析
移植的目標(biāo)是使得這個(gè)實(shí)時(shí)內(nèi)核能夠在軟核處理器MicroBlaze上得到運(yùn)行.要使μC/OS-II能夠正常運(yùn)行,處理器必須要滿足:
1)處理器的C編譯器能夠產(chǎn)生可重入代碼,并且使用C語言就可以完成開關(guān)中斷;
2)處理器支持中斷;
3)處理器支持可以容納一定數(shù)據(jù)量的硬件堆棧;
4)處理器有把堆棧指針和其他寄存器讀出和存儲(chǔ)到堆棧或者是內(nèi)存中的指令.
DEK軟件開發(fā)套件內(nèi)置的編譯器能夠產(chǎn)生可重入代碼,并支持內(nèi)嵌匯編語言,在C語言環(huán)境中可進(jìn)行任意的開關(guān)中斷操作;MicroBlaze有專門的堆棧指針寄存器,足夠大的內(nèi)部BRAM容量能夠完全硬件堆棧;另外,MicroBlaze的指令集包含有豐富的指令對(duì)堆棧進(jìn)行操作,可以方便的對(duì)處理器中的寄存器進(jìn)行堆棧操作.所以,μC/OS-II完全可以移植到軟核處理器MicroBlaze上.
2.1 使用ISE14.7集成軟件環(huán)境搭建系統(tǒng)移植環(huán)境
主要設(shè)備和軟件:PC機(jī)一臺(tái)、ISE14.7集成軟件環(huán)境以及圖2所示的FPGA測(cè)試板.
圖2 FPGA測(cè)試板、Xilinx JTAG下載器,和FPGA測(cè)試板電源盒
利用EDK的板級(jí)開發(fā)包向?qū)?BSB Wizard)對(duì)硬件平臺(tái)進(jìn)行定制,處理器時(shí)鐘頻率是50MHZ,內(nèi)存約束至32KB,添加一個(gè)GPIO IP核.
搭建系統(tǒng)移植環(huán)境的步驟:
1)使用ISE14.7建立工程
根據(jù)所用FPGA芯片設(shè)置對(duì)應(yīng)測(cè)試板信息:架構(gòu)是Spartan3e,設(shè)備型號(hào)是xc3s500e,封裝是pq208,速度是-4.
2)向工程添加VHDL Module,修改cpuv01.vhd文件,如圖3.
3)向工程添加Embedded processor文件,自動(dòng)開啟EDK板級(jí)開發(fā)包向?qū)?BSB Wizard)構(gòu)建硬件平臺(tái).如圖4所示,處理器時(shí)鐘頻率是50MHZ,內(nèi)存32KB.
4)IP核地址設(shè)置
如圖5所示,設(shè)置IP核地址:GPIO的基地址是0x90000000,高地址是0x900001FF.
圖3 cpuv01.vhd文件
圖4 處理器信息設(shè)置
圖5 設(shè)置IP核地址
5)添加UCF約束文件
UCF文件用來添加信號(hào)的管腳約束與時(shí)序約束,通過文本編輯器來修改.
把串口的輸入輸出信號(hào)與FPGA芯片相應(yīng)管腳相連,時(shí)鐘信號(hào)引腳為P77,復(fù)位引腳為P54,測(cè)試板上P96、P97、P98、P99、P100和P102對(duì)應(yīng)測(cè)試板上一組LED,并設(shè)置輸入時(shí)鐘頻率為50MHZ.
通過以上步驟完成硬件平臺(tái)的建立,導(dǎo)出硬件平臺(tái)文件到SDK,在SDK中新建 Application Project,就完成了系統(tǒng)移植環(huán)境的搭建,接下來就可以開始移植μC/OS-II操作系統(tǒng)到MicroBlaze處理器.
2.2 移植的步驟
1)使用SDK軟件開發(fā)套件為μC/OS-II操作系統(tǒng)建立一個(gè)目錄,在該目錄下創(chuàng)建工程,加入μC/OS-II內(nèi)核文件到這個(gè)工程.
2)根據(jù)測(cè)試板硬件環(huán)境移植os_cpu.h
os_cpu.h包含和CPU相關(guān)的不能通用的數(shù)據(jù)類型的定義、變量聲明、函數(shù)代碼的聲明部分.部分?jǐn)?shù)據(jù)類型的定義:
由于不同的處理器有不同的字長,μC/OS-II的移植包括一系列類型定義,以確??梢浦残?MicroBlaze是32位處理器,堆棧入口寬度是32位,所以O(shè)S_STK被定義為32位,所有的任務(wù)堆棧也都用OS_STK來聲明,狀態(tài)寄存器也是32位的,所以O(shè)S_CPU_SR也被定義為32位.
μC/OS-II在進(jìn)入系統(tǒng)臨界代碼段之前要進(jìn)行關(guān)閉中斷,退出臨界代碼段時(shí)要打開中斷,從而保證核心數(shù)據(jù)不被多任務(wù)環(huán)境下的其他任務(wù)中斷破壞.在μC/OS-II操作系統(tǒng)中提供了三種針對(duì)MicroBlaze的處理中斷的方式,這里用到了第三種方式,即OS_CRITICAL_METHOD==3,用戶可以取得當(dāng)前處理器狀態(tài)字的值,保存在C函數(shù)的局部變量中,這個(gè)變量就是用來恢復(fù)程序狀態(tài)字的值.另外,MicroBlaze的 堆 棧 地 址 由 低 到 高 增 長 , 故OS_STK_GROWTH==1.
3)根據(jù)測(cè)試板硬件環(huán)境移植移植os_cpu_c.c
需要編寫 10個(gè)簡單的 C函數(shù),分別是OSInitHookBegin() 、 OSInitHookEnd() 、OSTaskCreateHook() 、 OSTaskDelHook() 、OSTaskIdleHook() 、 OSTaskStatHook() 、OSTaskStkInit()、OSTaskSwHook()、OSTCBInitHook()、OStimeTickHook().其 中 唯 一 必 要 的 函 數(shù) 是OSTaskStkInit(),此函數(shù)用來初始化任務(wù)堆棧,初始狀態(tài)的堆棧模擬發(fā)生一次中斷后的堆棧結(jié)構(gòu)在初始化堆棧寄存器時(shí)用與寄存器號(hào)相對(duì)應(yīng)的值進(jìn)行初始化,目的是便于調(diào)試.其余9個(gè)必須聲明,但不一定要包含任何代碼.
4)根據(jù)測(cè)試板硬件環(huán)境移植os_cpu_a.s.
對(duì)OS_CPU_A.S進(jìn)行移植,主要是編寫4個(gè)匯編語言函數(shù),分別是:多任務(wù)啟動(dòng)函數(shù)調(diào)用的一個(gè)函數(shù)OSStartHighRdy()、任務(wù)切換函數(shù)OSCtxSw()、中斷任務(wù) 切 換 函 數(shù) OSIntCtxSw()和 中 斷 服 務(wù) 函 數(shù)OS_CPU_ISR().μC/OS-II啟動(dòng)時(shí)調(diào)用OSStart(),而OSStart()又調(diào)用OSStartHighRdy()運(yùn)行優(yōu)先級(jí)最高的任務(wù).OSCtxSw()的調(diào)用發(fā)生在有更高優(yōu)先級(jí)的任務(wù)就緒或者當(dāng)前任務(wù)不可執(zhí)行的情況下.如果任務(wù)執(zhí)行了某個(gè)函數(shù),其結(jié)果改變了當(dāng)前任務(wù)的狀態(tài),或是改變了別的任務(wù)狀態(tài)都會(huì)引起新的任務(wù)調(diào)度.判斷有比中斷更重要的任務(wù)在運(yùn)行時(shí),OSIntCtxSw()被OSIntExit()調(diào)用.MicroBlaze為每一個(gè)中斷都提供一個(gè)單獨(dú)的中斷向量,Xilinx的XPS工具會(huì)自動(dòng)的生成中斷向量表,地址空間為0x00000010-0x00000014.OS_CPU_ISR()用于判斷中斷源以及執(zhí)行器件所對(duì)應(yīng)的中斷語句和函數(shù).
2.3 編寫應(yīng)用程序測(cè)試操作系統(tǒng)
為了驗(yàn)證μC/OS-II操作系統(tǒng)是否成功移植到軟核處理器MicroBlaze中,編寫應(yīng)用程序進(jìn)行測(cè)試,具體思路是:
首先建立主程序,如main.c.主程序中的入口函數(shù)OSInit執(zhí)行操作系統(tǒng)初始化函數(shù);
其次是調(diào)用OSTaskCreate()創(chuàng)建控制測(cè)試板LED的任務(wù)AppTaskFirst,其優(yōu)先級(jí)為5用來控制引腳分別為P96、 P98、P100的LED的亮滅;
最后OSStart()開啟多任務(wù),調(diào)用OSStartHighRdy()運(yùn)行優(yōu)先級(jí)最高的任務(wù),任務(wù)AppTaskFirst優(yōu)先級(jí)最高,會(huì)循環(huán)執(zhí)行.
設(shè)計(jì)測(cè)試程序代碼如下:
編譯應(yīng)用程序,并通過Program FPGA把軟件程序生成的可執(zhí)行可鏈接格式文件(.ELF)同硬件比特流文件(.BIT)下載到FPGA的測(cè)試板.設(shè)置斷點(diǎn)調(diào)試代碼,通過跟蹤調(diào)試移植的μC/OS-II代碼和觀察LED的亮暗情況,不斷修改代碼直到確定操作系統(tǒng)正常運(yùn)行,至此則μC/OS-II操作系統(tǒng)移植成功.
高職院校的學(xué)生營養(yǎng)素?cái)z入少、三餐不合理、進(jìn)食快、活動(dòng)量少、經(jīng)常熬夜,從而造成營養(yǎng)不良、肥胖發(fā)生率較高。調(diào)查發(fā)現(xiàn),由于學(xué)生的營養(yǎng)知識(shí)的匱乏與營養(yǎng)意識(shí)的淡薄,普遍存在著膳食結(jié)構(gòu)不合理的現(xiàn)象;并且高職院校學(xué)生大多數(shù)不注意奶制品的攝入,這與他們從小的生活習(xí)慣和飲食習(xí)慣有關(guān)[4]。
3.1 在ARM處理器上測(cè)量任務(wù)切換的時(shí)間
實(shí)驗(yàn)環(huán)境:安裝 CentOS Linux系統(tǒng)的 ARM Cortex-A8 TQ335X開發(fā)板、安裝交叉編譯工具鏈的CentOS Linux系統(tǒng).
設(shè)計(jì)一個(gè)基于優(yōu)先級(jí)的可搶占的任務(wù)調(diào)度算法:創(chuàng)建兩個(gè)具有不同優(yōu)先級(jí)的實(shí)時(shí)任務(wù)taskA和taskB,其中taskA的優(yōu)先級(jí)高于taskB的優(yōu)先級(jí),兩個(gè)任務(wù)每隔5毫秒發(fā)生一次調(diào)度.taskA和taskB主體部分均可用如下偽代碼表示.
任務(wù)開啟時(shí),調(diào)用clock_gettime()函數(shù)取得一次系統(tǒng)時(shí)間,接著執(zhí)行一段延遲代碼,再次調(diào)用clock_gettime()函數(shù)取得一次系統(tǒng)時(shí)間(兩個(gè)時(shí)間的差值看做任務(wù)一次執(zhí)行的周期),然后設(shè)置任務(wù)調(diào)度周期(這里設(shè)為5毫秒,也可以是其它合理值),最后調(diào)用clock_nanosleep()將任務(wù)掛起直到這一調(diào)度周期結(jié)束,將開始下一次循環(huán).
單獨(dú)運(yùn)行taskA的進(jìn)程時(shí)的部分結(jié)果:
可以看出taskA每隔5毫秒執(zhí)行一次,并且使用30組數(shù)據(jù)計(jì)算得到taskA的平均執(zhí)行時(shí)間是1334.229微秒.
單獨(dú)運(yùn)行taskB的進(jìn)程時(shí)的部分結(jié)果:
同時(shí)運(yùn)行taskA和taskB的進(jìn)程時(shí)的部分結(jié)果:
可以看出taskA和taskB每隔5毫秒執(zhí)行一次且運(yùn)行時(shí)發(fā)生CPU搶占,taskB的進(jìn)程運(yùn)行時(shí)發(fā)現(xiàn)有優(yōu)先級(jí)更高的taskA的進(jìn)程就緒時(shí),發(fā)生一次任務(wù)切換,taskA的進(jìn)程運(yùn)行結(jié)束退出CPU發(fā)生第二次任務(wù)切換,taskB的進(jìn)程接著運(yùn)行直到進(jìn)程結(jié)束,然后下一調(diào)度周期,開始新的一輪的進(jìn)程調(diào)度.所以,兩任務(wù)共同執(zhí)行的時(shí)間應(yīng)該包括taskA單獨(dú)執(zhí)行的時(shí)間、taskB單獨(dú)執(zhí)行的時(shí)間以及兩次任務(wù)切換的時(shí)間.
表1 19組任務(wù)切換的時(shí)間及平均時(shí)間
13 2047.292 25.878 14 2046.333 25.398 15 2047.000 25.732 16 2046.750 25.607 17 2046.583 25.523 18 2046.583 25.523 19 2046.958 25.711平均值 2053.737 29.100
由表1可以看出,taskA和taskB的共同執(zhí)行時(shí)間是的平均值是2053.737微秒,任務(wù)切換的性能:任務(wù)切換的平均時(shí)間29.100微秒,最差情況下是53.711微秒.
3.2 在MicroBlaze軟核處理器上測(cè)量任務(wù)切換時(shí)間
實(shí)驗(yàn)環(huán)境:ISE14.7集成軟件環(huán)境、FPGA測(cè)試板和示波器.
1)設(shè)計(jì)基于優(yōu)先級(jí)的任務(wù)調(diào)度算法
為了測(cè)量任務(wù)在MicroBlaze軟核處理器上切換時(shí)間,設(shè)計(jì)了一個(gè)基于優(yōu)先級(jí)的任務(wù)調(diào)度算法,具體思路是:任務(wù)創(chuàng)建時(shí)調(diào)用OSTaskCreate()創(chuàng)建兩個(gè)控制測(cè)試板LED的任務(wù),任務(wù)AppTaskFirst優(yōu)先級(jí)為5用來控制引腳分別為P96、P98、P100的LED的亮滅,任務(wù)AppTaskSecond優(yōu)先級(jí)為6用來控制引腳分別為P97、 P99、P102的LED的亮滅;OSStart()開啟多任務(wù),調(diào)用OSStartHighRdy()運(yùn)行優(yōu)先級(jí)最高的任務(wù)AppTaskFirst,任務(wù)AppTaskFirst完成控制引腳分別為P96、P98、P100的LED的亮滅之后調(diào)用OSTaskSuspend將自身掛起,進(jìn)行任務(wù)切換,執(zhí)行系統(tǒng)里優(yōu)先級(jí)最高的任務(wù)AppTaskSecond,任務(wù)AppTaskSecond完成控制引腳分別為P97、P99、P102的LED的亮滅之后調(diào)用OSTaskResume將任務(wù)AppTaskFirst喚醒,接下來的時(shí)間任務(wù)就在AppTaskFirst和AppTaskSecond之間不斷來回切換 .
相關(guān)程序代碼如下:
2)估算任務(wù)的切換時(shí)間
為了得到任務(wù)切換的時(shí)間這里使用示波器測(cè)量了測(cè)試板P96、P98兩個(gè)管腳對(duì)應(yīng)的I/O口的電平變換.對(duì)應(yīng)不同延遲參數(shù)M和N使用示波器來測(cè)量LED亮和暗的延遲.如圖6和圖7分別是延遲參數(shù)M和N均為4時(shí)使用示波器測(cè)得的LED亮的延遲和LED暗的延遲.由圖6可知LED亮的延遲是252微秒,由圖7可知LED暗的延遲是272微秒.
圖6 M和N均為4時(shí)LED亮的延遲
圖7 M和N均為4時(shí)LED暗的延遲
由測(cè)試程序的代碼可知,LED亮的延遲是調(diào)用delay的延遲;LED暗的延遲調(diào)用delay的延遲與任務(wù)切換時(shí)間開銷之和.這里L(fēng)ED亮的延遲大小和LED暗的延遲中調(diào)用delay的延遲大小應(yīng)該是相等,故可得到任務(wù)切換時(shí)間是20微秒.
由于使用示波器測(cè)得的數(shù)值帶一定誤差以及電平變換有延遲等原因,所得到的結(jié)果也是有誤差的.所以為了能夠更好的分析LED亮的延遲和LED暗的延遲,這里使用了統(tǒng)計(jì)的辦法:針對(duì)延遲參數(shù)M和N,設(shè)計(jì)了16組不同的實(shí)驗(yàn),每組實(shí)驗(yàn)用示波器測(cè)得LED亮的延遲T1和LED暗的延遲T2.
表2 針對(duì)M和N的16組不同實(shí)驗(yàn)及其結(jié)果
由于LED亮的延遲是調(diào)用delay的延遲和LED暗的延遲中調(diào)用delay的延遲是關(guān)于M和N對(duì)應(yīng)成比例的,即T1/M=T2/N,故T2-N*T1/M是任務(wù)切換的時(shí)間.
4 249 521 23 6 2 361 153 33 8 6 345 265 35 6 6 345 377 33 4 6 345 489 29 8 2 505 153 27 8 8 473 281 41 8 6 489 393 27 4 8 8 473 505 32平均值 28.875
由表2可知,(T2-N*T1/M)在落在一個(gè)很小的區(qū)間[16微秒,41微秒]內(nèi),結(jié)果是有意義的.這里(T2-N*T1/M)的平均值是28.875微秒,最大值41微秒,據(jù)此得到任務(wù)切換的性能:任務(wù)切換的平均時(shí)間28.875微秒,任務(wù)切換的最差情況是41微秒.
3.3 實(shí)驗(yàn)結(jié)論
任務(wù)在ARM Linux系統(tǒng)上切換的平均時(shí)間29.100微 秒,最 差 情 況 是 53.711微 秒;任 務(wù) 在MicroBlazeμC/OS-II系統(tǒng)上切換的平均時(shí)間是28.875微秒,與在ARM Linux系統(tǒng)下結(jié)果一致,最差情況是41微秒較ARM Linux系統(tǒng)要好一些.實(shí)驗(yàn)結(jié)果表明μC/OS-II系統(tǒng)移植到MicroBlaze之后,不僅可以穩(wěn)定的運(yùn)行,而且可以實(shí)現(xiàn)快速的任務(wù)切換,符合數(shù)控系統(tǒng)的實(shí)時(shí)性要求,可以滿足LT-H10滾齒機(jī)控制系統(tǒng)的應(yīng)用需要.
本文以LT-H10滾齒機(jī)控制系統(tǒng)為課題背景,針對(duì)系統(tǒng)CPU占用率高的問題,為了降低系統(tǒng)CPU占用率,把系統(tǒng)運(yùn)行的部分主站控制驅(qū)動(dòng)程序遷移到底板FPGA MicroBlaze軟核處理器上運(yùn)行,提出了一種基于MicroBlaze軟核處理器的μC/OS-II的移植方案.使用ISE14.7集成軟件環(huán)境構(gòu)建移植環(huán)境將μC/OS-II移植 FPGA MicroBlaze軟核處理器上,通過測(cè)試μC/OS-II在 MicroBlaze可以穩(wěn)定運(yùn)行.針對(duì)MicroBlazeμC/OS-II系統(tǒng)和ARM Linux系統(tǒng)設(shè)計(jì)了兩個(gè)不同的任務(wù)調(diào)度算法對(duì)任務(wù)的切換時(shí)間進(jìn)行測(cè)量和研究.實(shí)驗(yàn)結(jié)果表明移植到MicroBlaze上的μC/OS-II系統(tǒng)不僅可以穩(wěn)定的運(yùn)行,而且可以實(shí)現(xiàn)快速的任務(wù)切換,符合數(shù)控系統(tǒng)的實(shí)時(shí)性要求,可以滿足LT-H10滾齒機(jī)控制系統(tǒng)的應(yīng)用需要.
為了降低ARM CPU的占用率還有許多工作要做,首先要實(shí)現(xiàn)ARM處理器Linux操作系統(tǒng)與FPGA MicroBlaze軟核處理器μC/OS-II操作系統(tǒng)的通信設(shè)計(jì).在LT-H10滾齒機(jī)控制系統(tǒng)中主站要實(shí)現(xiàn)伺服-脈沖控制,總線協(xié)議,I/O控制,數(shù)字光柵尺控制,計(jì)數(shù)器,主軸控制等功能,這些控制功能是實(shí)現(xiàn)在驅(qū)動(dòng)程序部分的,為了降低ARM CPU的占用率,需要實(shí)現(xiàn)這些驅(qū)動(dòng)從ARM處理器Linux操作系統(tǒng)到FPGAMicroBlaze軟核處理器μC/OS-II操作系統(tǒng)的下載.
1費(fèi)繼友,周茉.基于+的嵌入式數(shù)控裝置設(shè)計(jì).制造技術(shù)與機(jī)床,2010,12(12):61–64.
2季照平.基于單片機(jī)ARM嵌入式技術(shù)的數(shù)控系統(tǒng)的開發(fā)研究.輕工科技,2015,(11):47–48,68.
3劉建康,付云忠.基于ARM_FPGA的嵌入式數(shù)控系統(tǒng)硬件設(shè)計(jì)[碩士學(xué)位論文].哈爾濱:哈爾濱工業(yè)大學(xué),2013.
4張開生,陳明,周子超.實(shí)時(shí)操作系統(tǒng)μC/OS-II的實(shí)現(xiàn).電子科技,2013,26(10):36–39.
5趙偉國,李文軍,梁國偉.實(shí)時(shí)嵌入式操作系統(tǒng)-在上的移植.中國計(jì)量學(xué)院學(xué)報(bào),2005,16(2):137–139.
6陳果,馮靜.系統(tǒng)及其消息隊(duì)列詳析.電子元器件應(yīng)用,2011, 3(3):38–42.
7王帥,陳金鷹,鄒振宇.基于的μC/OS-II移植.中國集成電路, 2011,20(7):80–84.
8邵貝貝等譯.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II.第2版.北京:北京航空航天大學(xué)出版社,2003.
9孫豐祥,程玉偉,胡恩俊,等.基于軟核的嵌入式最小系統(tǒng).化工自動(dòng)化及儀表,2013,8(8):36–39.
10胡志東,韓曉明,馬瑞.嵌入式技術(shù)在雷達(dá)數(shù)字接收機(jī)中的應(yīng)用.信息通信,2016,3(3):63–65.
11單超,王萍,朱愛民,等.基于 軟核的嵌入式系統(tǒng)設(shè)計(jì).單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011,11(3):18–21.
μC/OS-II System Porting Based on MicroBlaze Processor
CHANG Hua-Li1,2,YIN Zhen-Yu2
1(University of ChineseAcademy of Sciences,Beijing 100049,China)
2(Shenyang Institute of Computer Technology,ChineseAcademy of Sciences,Shenyang 110171,China)
The LT-H10 hobbing machine numerical control system is an embedded system based on ARM processor.The CPU occupancy in ARM-based NC system is always higher than that in x86-based systems for some characteristic of ARM processor itself limits.A μC/OS-II system porting scheme based on MicroBlaze soft-core processor is presented in this paper,to reduce the occupancy of ARM processor by executing some driver programs of master station on the MicroBlaze soft-core processor of FPGA chip on the bottom plate.The experimental test results show that the μC/OS-II system ported on the MicroBlaze processor can run stably.The rapid context-switch benefits to the real-time of the NC system.We design two different tasks scheduling algorithm to measure and research the context-switch time in MicroBlaze-based μC/OS-II system and ARM-based Linux system.This study can not only meet the application needs of CNC system based on ARM,but also can been applied to CNC system based on X86,to achieve the purpose of reducing CPU occupancy,which has important research meaning and application value in Embedded CNC system.
FPGA;MicroBlaze;μC/OS-II;porting
國家科技重大專項(xiàng)(2014ZX04009031)
2016-08-12;收到修改稿時(shí)間:2016-09-23
10.15888/j.cnki.csa.005742