當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]本文從具體的內(nèi)核分析出發(fā),對(duì)使用RTX51 Tiny操作系統(tǒng)時(shí)的一些概念和應(yīng)用中的問(wèn)題進(jìn)行了闡述和澄清,使大家對(duì)RTX5l Tiny有更為清晰的認(rèn)識(shí)。RTX51 Tiny微操作系統(tǒng)的使用,可以使用戶(hù)把更多的精力關(guān)注在應(yīng)用本身而無(wú)需考慮復(fù)雜的底層驅(qū)動(dòng)。

引 言
    μVision是德國(guó)Keil公司開(kāi)發(fā)的單片機(jī)IDE軟件,最初主要用于8051系列單片機(jī),目前也有支持ARM系列單片機(jī)的專(zhuān)用版本MDK-ARM。RTX51是其自帶的運(yùn)行于8051系列單片機(jī)上的小型多任務(wù)實(shí)時(shí)操作系統(tǒng),可用來(lái)設(shè)計(jì)具有實(shí)時(shí)性要求的多任務(wù)軟件。RTx51有2個(gè)版本:RTX51 Tiny和RTX51 Full。RTX51 Tiny是RTX51 Full的子集。RTX51 Tiny自身僅占用900字節(jié)左右的程序存儲(chǔ)空間,可以很容易地運(yùn)行在沒(méi)有外部擴(kuò)展存儲(chǔ)器的8051單片機(jī)系統(tǒng)上。
    目前在8051系列單片機(jī)上使用多任務(wù)實(shí)時(shí)操作系統(tǒng),絕大多數(shù)應(yīng)用都選擇了RTX51 Tiny。本文就其在實(shí)際應(yīng)用中的一些概念和具體問(wèn)題進(jìn)行了探討。RTX51Tiny內(nèi)核的版本為1.06,C51編譯器版本為7.50。

1 RTX51 Tiny中有沒(méi)有主程序的問(wèn)題
    一般來(lái)說(shuō),C語(yǔ)言中主程序就是指main()函數(shù)。參考文獻(xiàn)[3]稱(chēng)RTX51 Tiny沒(méi)有主程序,其實(shí)這是一種誤解。實(shí)際上RTX51 Tiny的主程序是以匯編代碼的形式位于Rtx51tny.A51文件中,在程序的最后:

   
    在通常的應(yīng)用中,一般都是將RTX51 Tiny內(nèi)核做成lib文件,使用的時(shí)候直接調(diào)用相應(yīng)的系統(tǒng)函數(shù)即可,在應(yīng)用程序中沒(méi)有體現(xiàn),用戶(hù)也無(wú)需關(guān)心。這造成了一部分用戶(hù)的誤解,以為RTX51沒(méi)有main()函數(shù)。
    另外,參考文獻(xiàn)[4]提到,使用RTX51 Timy時(shí)用戶(hù)程序中不需要包含main()函數(shù),它會(huì)自動(dòng)從任務(wù)0開(kāi)始運(yùn)行;如果用戶(hù)程序中包含main()函數(shù),則需要利用os_cre-ate_task()函數(shù)來(lái)啟動(dòng)RTX51實(shí)時(shí)操作系統(tǒng)。這段話(huà)前一部分是正確的,前文也對(duì)此做了解釋。但后一部分則值得商榷。在RTX51操作系統(tǒng)中,是存在main()函數(shù)的,只不過(guò)存在于庫(kù)文件RTX51tny.lib之中,用戶(hù)的應(yīng)用程序中不能再包含main()函數(shù)。任務(wù)0為應(yīng)用程序的入口,所有其他任務(wù)都在任務(wù)0中創(chuàng)建。

2 存儲(chǔ)空間占用
    RTX51tiny操作系統(tǒng)小巧精悍,能極大地提高程序的可讀性及可維護(hù)性,但也占用了一定的存儲(chǔ)空間。這是一種以空間換取性能的辦法。由于RTX51操作系統(tǒng)占用了存儲(chǔ)空間,如果不外擴(kuò)存儲(chǔ)器,則至少需要8052系列以上的單片機(jī)。在Keil自帶的幫助文件GS51.PDF中,對(duì)比做了詳細(xì)的介紹。其中有關(guān)存儲(chǔ)空間方面的信息是:RAM需求為7字節(jié)DATA,外加每個(gè)任務(wù)占用3字節(jié)IDATA空間;代碼量(即ROM)約900字節(jié)。

3 關(guān)于使用os_wait()函數(shù)定時(shí)的問(wèn)題
    RTX51 Tiny內(nèi)核中,TIMESHARING的默認(rèn)值為5,以外部時(shí)鐘振蕩器頻率為12 MHz計(jì)算,任務(wù)輪轉(zhuǎn)時(shí)間為50 ms。如果想定時(shí)1個(gè)30 ms的時(shí)間間隔,在任務(wù)比較重時(shí),使用os_wait(K_TMO,3,0)將得不到準(zhǔn)確的結(jié)果。因?yàn)閯e的任務(wù)的執(zhí)行時(shí)間已經(jīng)占據(jù)了1個(gè)任務(wù)的輪轉(zhuǎn)時(shí)間50 ms,超出了20 ms。如果任務(wù)比較多,同時(shí)任務(wù)的負(fù)擔(dān)都比較重,相應(yīng)的誤差時(shí)間會(huì)更大。
    RTX51 Tiny使用os_wait()函數(shù)作定時(shí),只有當(dāng)系統(tǒng)任務(wù)較輕時(shí),使用os_wait(K_IVL,count,0)和os_wait(K_TMO,count,0)才能達(dá)到一致的效果;而在任務(wù)較重時(shí),使用這2個(gè)函數(shù)所得到的結(jié)果會(huì)有很大差別。參考文獻(xiàn)[5]對(duì)此做了詳細(xì)介紹,此處只作簡(jiǎn)單補(bǔ)充。
    事實(shí)上,用戶(hù)程序的運(yùn)行是陣發(fā)性的,在一段時(shí)間內(nèi)任務(wù)會(huì)比較繁忙,而在另一段時(shí)間可能會(huì)處于空閑狀態(tài)。如果使用os_wait(K_TMO,count,0)函數(shù)進(jìn)行定時(shí),則在不同的時(shí)間段會(huì)得到不同的結(jié)果。所以,要實(shí)現(xiàn)較為精確和穩(wěn)定的定時(shí),最好還是使用os_wait(K_IVL,count,O)函數(shù),而不是os_wait(K_TMO,count,O)。除非延時(shí)時(shí)間很長(zhǎng),如超過(guò)了所有任務(wù)的輪轉(zhuǎn)時(shí)間總和,os_wait(K_IVL,count,O)和os_wait(K_TM0,count,O)的延時(shí)效果才會(huì)相同。

4 INT_CLOCK的設(shè)置與延時(shí)計(jì)算
    RTX5 Tiny中與延時(shí)相關(guān)的2個(gè)參數(shù)為INT_CLOCK和TIMESHARING。先來(lái)看Rtx5ltny.A51源程序中的一段:

   
    從上面的程序段可以看出,RTX51 Tiny內(nèi)核使用Timer0作為硬件定時(shí)器,Timer0工作在方式1(16位計(jì)數(shù)方式)。因此,如果想增加定時(shí)器溢出時(shí)間,可以修改INl_CLOCK的定義。但不能無(wú)限制地增大,最大只能到216一1,即65 535。如果單片機(jī)采用12 MHz的晶振,則每次定時(shí)器溢出的最長(zhǎng)時(shí)間為65.535ms。如果INT_CLOCK的定義值超過(guò)了這個(gè)數(shù)據(jù),并不能達(dá)到預(yù)期的結(jié)果。例如,把INT_CLOCK定義為100 000(Oxl86AOH),那么實(shí)際上INT_CLOCK為34 464(Ox86AOH)。本來(lái)是想定時(shí)100 ms,實(shí)際上得到的卻是34.4 ms。因此,在設(shè)置具體延時(shí)時(shí)間時(shí)必須仔細(xì)計(jì)算。
    系統(tǒng)的任務(wù)輪轉(zhuǎn)時(shí)間等于每次定時(shí)器溢出時(shí)間與TIMESHARING的乘積。因此,要將系統(tǒng)的任務(wù)輪轉(zhuǎn)時(shí)間設(shè)置為特殊的時(shí)長(zhǎng),可以通過(guò)INT_CLOCK與TIME-SHARING兩個(gè)參數(shù)的不同組合來(lái)實(shí)現(xiàn)。不過(guò)在一般的應(yīng)用當(dāng)中,都是采用其系統(tǒng)的默認(rèn)值,無(wú)須修改。


5 修改內(nèi)核配置的基本過(guò)程
    RTX51TNY.A51為RTX51 Tiny的核心程序,包括所有的函數(shù)定義,不需要改動(dòng)。通常改動(dòng)的是配置程序CONF_TNY.A51,主要內(nèi)容如下。
    INT_REGBANK EQU 1:定時(shí)器中斷時(shí)使用的寄存器組默認(rèn)值是寄存器組1,一般無(wú)需改動(dòng)。
    INT_CLOCK EQU 10000:硬件定時(shí)器零TimerO的溢出時(shí)間,即1個(gè)滴答(tick)的時(shí)間長(zhǎng)度。默認(rèn)值是10 000個(gè)機(jī)器周期。對(duì)于傳統(tǒng)的MCS51單片機(jī)來(lái)說(shuō),1個(gè)機(jī)器周期為12個(gè)時(shí)鐘周期。如果采用12 MHz的晶振,那么每個(gè)機(jī)器周期將為lμs,1個(gè)滴答的時(shí)長(zhǎng)為10 ms。
    TIMESHARING EQU5:定義時(shí)間片輪轉(zhuǎn)(round-robin timeout)時(shí)間,默認(rèn)值為5個(gè)滴答(1個(gè)滴答為T(mén)im—erO的1次溢出)。如果INT_CLOCK為10 000,時(shí)鐘頻率為12 MHz,則1個(gè)時(shí)間片的輪轉(zhuǎn)時(shí)間為50 ms,即每個(gè)任務(wù)每次最大可獲得的執(zhí)行時(shí)間為50 ms。如果TIME-SHARING定義為O,則禁止時(shí)間片輪轉(zhuǎn)。
    RAMTOP EQU 0FFH:定義CPU堆棧可使用的最高RAM地址,默認(rèn)值為地址OFFH(256-1)。FREE_STACK EQU 20:配置堆棧大小為20字節(jié),默認(rèn)值為20(經(jīng)常需要改動(dòng))。用戶(hù)可根據(jù)自己的實(shí)際需要進(jìn)行修改,一般情況下需要配置或修改的內(nèi)容主要有INT_CLOCK、TIMESHAR-ING、FREE_STACK。

6 其他需要注意的問(wèn)題
    ①堆棧的大小要設(shè)置得合適,太大浪費(fèi)資源,太小又會(huì)出現(xiàn)堆棧錯(cuò)誤。在系統(tǒng)運(yùn)行中,有時(shí)會(huì)發(fā)現(xiàn)程序總在某一處死循環(huán),而從邏輯上卻常常分析不出問(wèn)題之所在,很有可能是堆棧溢出。在conf_tny.a(chǎn)51中有個(gè)非常重要的宏STACK_ERROR,其源程序如下:

   
    通過(guò)仿真發(fā)現(xiàn),程序會(huì)在此處死循環(huán)。
    (Conf_tny.a(chǎn)51)FREE_STACK EQU 20:配置堆棧大小為20字節(jié),默認(rèn)值為20。選擇合適的堆棧大小,即設(shè)置合適的FREE_STACK值,可達(dá)到最佳效果。
    ②同堆棧一樣,輪轉(zhuǎn)時(shí)間片的長(zhǎng)度也不宜設(shè)置得過(guò)大或過(guò)小。設(shè)置得過(guò)大,則一些持續(xù)時(shí)間較短的事件無(wú)法響應(yīng)。如果輪轉(zhuǎn)時(shí)間設(shè)置得過(guò)小,則CPU的很大一部分功能被消耗在任務(wù)切換上了;如果任務(wù)多,處理時(shí)間長(zhǎng),無(wú)疑會(huì)無(wú)形中增加系統(tǒng)的負(fù)擔(dān)。需要根據(jù)具體的需要權(quán)衡。

結(jié) 語(yǔ)
    本文從具體的內(nèi)核分析出發(fā),對(duì)使用RTX51 Tiny操作系統(tǒng)時(shí)的一些概念和應(yīng)用中的問(wèn)題進(jìn)行了闡述和澄清,使大家對(duì)RTX5l Tiny有更為清晰的認(rèn)識(shí)。RTX51 Tiny微操作系統(tǒng)的使用,可以使用戶(hù)把更多的精力關(guān)注在應(yīng)用本身而無(wú)需考慮復(fù)雜的底層驅(qū)動(dòng)。而且整個(gè)應(yīng)用軟件系統(tǒng)結(jié)構(gòu)清晰,維護(hù)方便,可節(jié)省大量的時(shí)間和人力。當(dāng)程序比較復(fù)雜時(shí),它的優(yōu)點(diǎn)就體現(xiàn)得更明顯。然而,由于硬件資源及其自身的限制,對(duì)于功能復(fù)雜、要求較高的應(yīng)用來(lái)說(shuō),就顯得有些吃力了,用戶(hù)需要自己編寫(xiě)功能擴(kuò)展程序。無(wú)論如何,它仍然是8位單片機(jī)應(yīng)用中操作系統(tǒng)的首選。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉