91人人爽人人澡人人爽人人精品_久久久久久网站精品免费_色婷婷狠狠躁日日躁夜夜躁_一个人在线日本www_99久久精品在_综合狠狠久久_久久久久久精品精品夜免费啦 _精品久久影院国产

咨詢熱線:021-80392549

用協(xié)處理器提高IJLC/OSn,Il的實(shí)時(shí)性

放大字體  縮小字體 發(fā)布日期:2014-10-21     來(lái)源:[標(biāo)簽:出處]     作者:[標(biāo)簽:作者]     瀏覽次數(shù):111
核心提示:
引 言
   
μC/OS-II最多支持63個(gè)任務(wù),并支持信號(hào)量、郵箱、消息隊(duì)列等多種進(jìn)程間通信機(jī)制;同時(shí),用戶可以根據(jù)需求對(duì)內(nèi)核中的功能模塊進(jìn)行裁剪。將μC/OS-II應(yīng)用到嵌入式系統(tǒng)中,對(duì)于提高產(chǎn)品的質(zhì)量、縮短開發(fā)周期和降低成本都有重要的意義。
    為了保證系統(tǒng)的實(shí)時(shí)性,μC/OS-II采用查表策略,使優(yōu)先級(jí)最高的任務(wù)一旦進(jìn)入就緒態(tài)就立刻可以運(yùn)行。這種查表算法與應(yīng)用系統(tǒng)的任務(wù)數(shù)目無(wú)關(guān),執(zhí)行時(shí)間是固定值,從而保證了系統(tǒng)的硬實(shí)時(shí)性。μC/OS-II實(shí)時(shí)內(nèi)核中唯一一個(gè)執(zhí)行時(shí)間受任務(wù)數(shù)目影響的函數(shù)是時(shí)鐘節(jié)拍,時(shí)鐘節(jié)拍的中斷服務(wù)子程序需要遍歷所有使用延遲函數(shù)的任務(wù),故執(zhí)行時(shí)間與任務(wù)數(shù)目有關(guān),為非固定值。此外,時(shí)鐘節(jié)拍的頻率也不能太高,否則會(huì)因?yàn)镃PU頻繁加載中斷服務(wù)子程序,導(dǎo)致加重了CPU負(fù)荷,影響μC/OS-II的實(shí)時(shí)性。
    Freescale公司的16位HCS12X(簡(jiǎn)稱“S12X”)系列單片機(jī)引入了一個(gè)協(xié)處理器,名為“XGATE”。與普通意義上的浮點(diǎn)協(xié)處理器不同,這個(gè)協(xié)處理器主要用來(lái)處理中斷。如果采用協(xié)處理器來(lái)處理μC/OS-II時(shí)鐘節(jié)拍的中斷,那么主CPU無(wú)需頻繁加載中斷服務(wù)子程序,從而保證μC/OS-II內(nèi)核的所有函數(shù)執(zhí)行時(shí)間都為固定值。這樣,μC/OS-II的實(shí)時(shí)性就得到了保證,還能以提高時(shí)鐘節(jié)拍中斷頻率的方法提高應(yīng)用系統(tǒng)定時(shí)的精度。


1 單片機(jī)中的協(xié)處理器
   
HCS12X系列單片機(jī)中的XGATE協(xié)處理器是精簡(jiǎn)指令集(RISC)結(jié)構(gòu)的處理器,它的工作時(shí)鐘頻率是S12X主CPU的2倍。主CPU初始化系統(tǒng)時(shí)可決定使用或禁用XGATE。若使用,則XGATE在初始化后就獨(dú)立地運(yùn)行,并通過(guò)雙端口RAM與CPU交換數(shù)據(jù),必要時(shí)向主CPU發(fā)中斷請(qǐng)求。
    XGATE處理完所有的中斷后進(jìn)入休眠態(tài),停止運(yùn)行,直到下一次中斷發(fā)生。XGATE比較適合響應(yīng)的中斷主要是加載頻率高的中斷,或不帶通信緩沖區(qū)的I/O中斷,例如SCI發(fā)送或接收中斷、PWM輸出中斷等。而對(duì)于本身帶發(fā)送、接收緩沖區(qū)的中斷(如CAN中斷、USB中斷等),采用協(xié)處理器處理中斷優(yōu)勢(shì)不明顯。
    μC/OS-II的時(shí)鐘節(jié)拍中斷是一個(gè)頻繁發(fā)生的中斷,所以很適合采用XGATE來(lái)響應(yīng)。以下重點(diǎn)介紹如何用XGATE協(xié)處理器響應(yīng)μC/0S—II的時(shí)鐘節(jié)拍中斷。


2 用XGATE實(shí)現(xiàn)μC/OS-II的時(shí)鐘節(jié)拍
   
μC/0S-11的時(shí)鐘節(jié)拍中斷可以采用單片機(jī)的實(shí)時(shí)中斷(Real-Time Interrupt,RTI)來(lái)實(shí)現(xiàn)。當(dāng)然也可以使用定時(shí)器中的計(jì)數(shù)器來(lái)產(chǎn)生時(shí)鐘節(jié)拍,原理相同,方法近似。使用XGATE來(lái)響應(yīng)RTI中斷,實(shí)現(xiàn)時(shí)鐘節(jié)拍時(shí),XGATE協(xié)處理器和主CPU的分工如表1所列。

    XGATE負(fù)責(zé)響應(yīng)RTI中斷,實(shí)現(xiàn)時(shí)鐘節(jié)拍,并完成任務(wù)延時(shí)計(jì)數(shù);在任務(wù)延時(shí)完成后,通知CPU進(jìn)行任務(wù)調(diào)度。另外,XGATE還用來(lái)響應(yīng)其他中斷,在需要任務(wù)調(diào)度時(shí)通知CPU。主CPU則只負(fù)責(zé)運(yùn)行任務(wù)(包括系統(tǒng)任務(wù))和任務(wù)調(diào)度,只有在需要任務(wù)調(diào)度時(shí)才會(huì)加載中斷服務(wù)子程序。使用XGATE來(lái)實(shí)現(xiàn)時(shí)鐘節(jié)拍的具體設(shè)置步驟如下所述。
2.1 將RTI中斷的控制權(quán)交給XGATE
   
為了將RTI中斷交由XGATE來(lái)處理,系統(tǒng)初始化時(shí)需要設(shè)置S12X單片機(jī)中RTI中斷對(duì)應(yīng)的中斷控制寄存器。中斷控制寄存器組成如下:

    在S12X單片機(jī)中,每一個(gè)I/O中斷都有一個(gè)中斷控制寄存器與之對(duì)應(yīng)。中斷控制寄存器控制相應(yīng)的中斷是由S12X CPU響應(yīng)還是由XGATE來(lái)響應(yīng),以及該中斷的優(yōu)先級(jí)。
    中斷控制寄存器中,RQST位為1時(shí),中斷由XGATE來(lái)響應(yīng);為0時(shí),中斷由S12X CPU響應(yīng)。為了使用XGATE來(lái)響應(yīng)RTI中斷,需要將RTI中斷對(duì)應(yīng)的中斷控制寄存器的RQST位置1。PRIOLVL[2:0]保存的是對(duì)應(yīng)中斷的優(yōu)先級(jí),值越大,對(duì)應(yīng)中斷的優(yōu)先級(jí)越高。如果這3位均為0,那么對(duì)應(yīng)中斷會(huì)被禁用。
    設(shè)置中斷控制寄存器可以調(diào)用編譯器提供的一個(gè)函數(shù)ROUTE_INTERRUPT。這個(gè)函數(shù)需要的參數(shù)是對(duì)應(yīng)中斷的中斷向量相對(duì)中斷向量表基址(0xFF00)的偏移量,以及中斷控制寄存器的值。設(shè)置RTI中斷控制寄存器的代碼如下:
    RUUTE_INTERRUPT (0xF0,0x81);
    其中,0xF0是RTI中斷向量相對(duì)中斷向量表基址的偏移量,0x81是要設(shè)置的中斷控制寄存器的值。
2.2 XGATE與S12X CPU的數(shù)據(jù)共享
   
XGATE實(shí)現(xiàn)μC/OS-II的時(shí)鐘節(jié)拍和S12X CPU實(shí)現(xiàn)任務(wù)調(diào)度,都需要訪問(wèn)與系統(tǒng)的任務(wù)控制塊鏈表相關(guān)的變量,因此這些變量需要聲明為XGATE和S12X CPU的共享變量。共享變量的聲明需要加上“volatile”類型聲明,并使用“#pragma”預(yù)處理命令將其放在共享內(nèi)存中。

    S12 CPU的程序中聲明如下:


    在XGATE的程序中,需要使用extern聲明這些變量,具體語(yǔ)句如下:

工博士工業(yè)品商城聲明:凡資訊來(lái)源注明為其他媒體來(lái)源的信息,均為轉(zhuǎn)載自其他媒體,并不代表本網(wǎng)站贊同其觀點(diǎn),也不代表本網(wǎng)站對(duì)其真實(shí)性負(fù)責(zé)。您若對(duì)該文章內(nèi)容有任何疑問(wèn)或質(zhì)疑,請(qǐng)立即與商城(rz-tex.com)聯(lián)系,本網(wǎng)站將迅速給您回應(yīng)并做處理。
聯(lián)系電話:021-31666777
新聞、技術(shù)文章投稿QQ:3267146135  投稿郵箱:syy@gongboshi.com

推薦文章
最新更新
點(diǎn)擊排行
黎城县| 德钦县| 宁晋县| 高州市| 密山市| 新营市| 龙海市| 太原市| 江阴市| 旌德县| 舟山市| 石家庄市| 苏州市| 顺平县| 广昌县| 天等县| 包头市| 浦城县| 刚察县| 蕉岭县| 平原县| 青浦区| 扎兰屯市| 读书| 莱芜市| 临西县| 长岛县| 合江县| 镇康县| 内丘县| 渭源县| 洛川县| 永昌县| 施甸县| 桐城市| 兴安县| 健康| 静乐县| 清远市| 乌兰浩特市| 周至县|