新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 用協(xié)處理器提高μC/OS-II的實時性回到頂部

用協(xié)處理器提高μC/OS-II的實時性回到頂部

作者: 時間:2016-10-08 來源:網絡 收藏

引 言

本文引用地址:http://www.2s4d.com/article/201610/305735.htm

FREESCALE公司的16位HCS12X(簡稱“S12X”)系列單片機引入了一個協(xié)處理器,名為“XGATE”。與普通意義上的浮點協(xié)處理器不同,這個協(xié)處理器主要用來處理中斷。如果采用協(xié)處理器來處理μC/OS-II時鐘節(jié)拍的中斷,那么主CPU無需頻繁加載中斷服務子程序,從而保證μC/OS-II內核的所有函數(shù)執(zhí)行時間都為固定值。這樣,μC/OS-II的實時性就得到了保證,還能以提高時鐘節(jié)拍中斷頻率的方法提高應用系統(tǒng)定時的精度。

μC/OS-II最多支持63個任務,并支持信號量、郵箱、消息隊列等多種進程間通信機制;同時,用戶可以根據(jù)需求對內核中的功能模塊進行裁剪。將μC/OS-II應用到嵌入式系統(tǒng)中,對于提高產品的質量、縮短開發(fā)周期和降低成本都有重要的意義。

為了保證系統(tǒng)的實時性,μC/OS-II采用查表策略,使優(yōu)先級最高的任務一旦進入就緒態(tài)就立刻可以運行。這種查表算法與應用系統(tǒng)的任務數(shù)目無關,執(zhí)行時間是固定值,從而保證了系統(tǒng)的硬實時性。μC/OS-II實時內核中唯一一個執(zhí)行時間受任務數(shù)目影響的函數(shù)是時鐘節(jié)拍,時鐘節(jié)拍的中斷服務子程序需要遍歷所有使用延遲函數(shù)的任務,故執(zhí)行時間與任務數(shù)目有關,為非固定值。此外,時鐘節(jié)拍的頻率也不能太高,否則會因為CPU頻繁加載中斷服務子程序,導致加重了CPU負荷,影響μC/OS-II的實時性。

1 單片機中的協(xié)處理器

HCS12X系列單片機中的XGATE協(xié)處理器是精簡指令集(RISC)結構的處理器,它的工作時鐘頻率是S12X主CPU的2倍。主CPU初始化系統(tǒng)時可決定使用或禁用XGATE。若使用,則XGATE在初始化后就獨立地運行,并通過雙端口RAM與CPU交換數(shù)據(jù),必要時向主CPU發(fā)中斷請求。

XGATE處理完所有的中斷后進入休眠態(tài),停止運行,直到下一次中斷發(fā)生。XGATE比較適合響應的中斷主要是加載頻率高的中斷,或不帶通信緩沖區(qū)的I/O中斷,例如SCI發(fā)送或接收中斷、PWM輸出中斷等。而對于本身帶發(fā)送、接收緩沖區(qū)的中斷(如CAN中斷、USB中斷等),采用協(xié)處理器處理中斷優(yōu)勢不明顯。

μC/OS-II的時鐘節(jié)拍中斷是一個頻繁發(fā)生的中斷,所以很適合采用XGATE來響應。以下重點介紹如何用XGATE協(xié)處理器響應μC/0S—II的時鐘節(jié)拍中斷。

2 用XGATE實現(xiàn)μC/OS-II的時鐘節(jié)拍

μC/0S-11的時鐘節(jié)拍中斷可以采用單片機的實時中斷(Real-TIme Interrupt,RTI)來實現(xiàn)。當然也可以使用定時器中的計數(shù)器來產生時鐘節(jié)拍,原理相同,方法近似。使用XGATE來響應RTI中斷,實現(xiàn)時鐘節(jié)拍時,XGATE協(xié)處理器和主CPU的分工如表1所列。

XGATE負責響應RTI中斷,實現(xiàn)時鐘節(jié)拍,并完成任務延時計數(shù);在任務延時完成后,通知CPU進行任務調度。另外,XGATE還用來響應其他中斷,在需要任務調度時通知CPU。主CPU則只負責運行任務(包括系統(tǒng)任務)和任務調度,只有在需要任務調度時才會加載中斷服務子程序。使用XGATE來實現(xiàn)時鐘節(jié)拍的具體設置步驟如下所述。

2.1 將RTI中斷的控制權交給XGATE

為了將RTI中斷交由XGATE來處理,系統(tǒng)初始化時需要設置S12X單片機中RTI中斷對應的中斷控制寄存器。中斷控制寄存器組成如下:

在S12X單片機中,每一個I/O中斷都有一個中斷控制寄存器與之對應。中斷控制寄存器控制相應的中斷是由S12X CPU響應還是由XGATE來響應,以及該中斷的優(yōu)先級。

中斷控制寄存器中,RQST位為1時,中斷由XGATE來響應;為0時,中斷由S12X CPU響應。為了使用XGATE來響應RTI中斷,需要將RTI中斷對應的中斷控制寄存器的RQST位置1。PRIOLVL[2:0]保存的是對應中斷的優(yōu)先級,值越大,對應中斷的優(yōu)先級越高。如果這3位均為0,那么對應中斷會被禁用。

設置中斷控制寄存器可以調用編譯器提供的一個函數(shù)ROUTE_INTERRUPT。這個函數(shù)需要的參數(shù)是對應中斷的中斷向量相對中斷向量表基址(0xFF00)的偏移量,以及中斷控制寄存器的值。設置RTI中斷控制寄存器的代碼如下:

RUUTE_INTERRUPT (0xF0,0x81);

其中,0xF0是RTI中斷向量相對中斷向量表基址的偏移量,0x81是要設置的中斷控制寄存器的值。

2.2 XGATE與S12X CPU的數(shù)據(jù)共享

XGATE實現(xiàn)μC/OS-II的時鐘節(jié)拍和S12X CPU實現(xiàn)任務調度,都需要訪問與系統(tǒng)的任務控制塊鏈表相關的變量,因此這些變量需要聲明為XGATE和S12X CPU的共享變量。共享變量的聲明需要加上“volatile”類型聲明,并使用“#pragma”預處理命令將其放在共享內存中。

S12 CPU的程序中聲明如下:

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

2.3 XGATE與S12X CPU的指針變量變換

因為XGATE的內存空間編址與S12X CPU的內存空間編址不一樣,所以在指針變量共享時會存在問題。CPU的內存空間和XGATE的內存空間的差別如圖1所示。

從圖1中可以看出,在S12X CPU的尋址空間中,0x1000~0x3FFF為RAM空間;而對XGATE來說,RAM空間的地址范圍為Ox8000~0xFFFF。如果XGATE的程序直接使用CPU的指針變量,則會導致XGATE訪問地址空間0x1000~0x3FFF,該區(qū)域對于XGATE是Flash,從而出錯。為了正確地共享指針變量,在XGATE中使用S12x CPU的指針變量時,需要對指針變量進行變換。S12X系列中不同單片機成員的地址分配可能有所不同。以MC9S12XDT512單片機為例,其內部共有8 KB非分頁RAM,可全都設為S12X CPU和


上一頁 1 2 3 下一頁

關鍵詞:

評論


相關推薦

技術專區(qū)

關閉