0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

多任務(wù)實時操作系統(tǒng)RTX51 Tiny的概念和應(yīng)用問題探究

電子設(shè)計 ? 來源:單片機與嵌入式系統(tǒng)應(yīng)用 ? 作者:賈水英,楊建紅,謝 ? 2020-09-03 17:48 ? 次閱讀

來源:單片機嵌入式系統(tǒng)應(yīng)用,作者:賈水英 , 楊建紅 , 謝宏偉

引言

μVision是德國Keil公司開發(fā)的單片機IDE軟件,最初主要用于8051系列單片機,目前也有支持ARM系列單片機的專用版本MDK-ARM。RTX51是其自帶的運行于8051系列單片機上的小型多任務(wù)實時操作系統(tǒng),可用來設(shè)計具有實時性要求的多任務(wù)軟件。 RTx51有2個版本:RTX51 Tiny和RTX51 Full。RTX51 Tiny是RTX51 Full的子集。RTX51 Tiny自身僅占用900字節(jié)左右的程序存儲空間,可以很容易地運行在沒有外部擴展存儲器的8051單片機系統(tǒng)上。

目前在8051系列單片機上使用多任務(wù)實時操作系統(tǒng),絕大多數(shù)應(yīng)用都選擇了RTX51 Tiny。本文就其在實際應(yīng)用中的一些概念和具體問題進行了探討。RTX51Tiny內(nèi)核的版本為1.06,C51編譯器版本為7.50。

1 RTX51 Tiny中有沒有主程序的問題

一般來說,C語言中主程序就是指main()函數(shù)。參考文獻(xiàn)[3]稱RTX51 Tiny沒有主程序,其實這是一種誤解。實際上RTX51 Tiny的主程序是以匯編代碼的形式位于Rtx51tny.A51文件中,在程序的最后:

多任務(wù)實時操作系統(tǒng)RTX51 Tiny的概念和應(yīng)用問題探究

在通常的應(yīng)用中,一般都是將RTX51 Tiny內(nèi)核做成lib文件,使用的時候直接調(diào)用相應(yīng)的系統(tǒng)函數(shù)即可,在應(yīng)用程序中沒有體現(xiàn),用戶也無需關(guān)心。這造成了一部分用戶的誤解,以為RTX51沒有main()函數(shù)。

另外,參考文獻(xiàn)[4]提到,使用RTX51 Timy時用戶程序中不需要包含main()函數(shù),它會自動從任務(wù)0開始運行;如果用戶程序中包含main()函數(shù),則需要利用os_cre- ate_task()函數(shù)來啟動RTX51實時操作系統(tǒng)。這段話前一部分是正確的,前文也對此做了解釋。但后一部分則值得商榷。在RTX51操作系統(tǒng)中,是存在main()函數(shù)的,只不過存在于庫文件RTX51tny.lib之中,用戶的應(yīng)用程序中不能再包含main()函數(shù)。任務(wù)0為應(yīng)用程序的入口,所有其他任務(wù)都在任務(wù)0中創(chuàng)建。

2 存儲空間占用

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

3 關(guān)于使用os_wait()函數(shù)定時的問題

RTX51 Tiny內(nèi)核中,TIMESHARING的默認(rèn)值為5,以外部時鐘振蕩器頻率為12 MHz計算,任務(wù)輪轉(zhuǎn)時間為50 ms。如果想定時1個30 ms的時間間隔,在任務(wù)比較重時,使用os_wait(K_TMO,3,0)將得不到準(zhǔn)確的結(jié)果。因為別的任務(wù)的執(zhí)行時間已經(jīng)占據(jù)了1個任務(wù)的輪轉(zhuǎn)時間 50 ms,超出了20 ms。如果任務(wù)比較多,同時任務(wù)的負(fù)擔(dān)都比較重,相應(yīng)的誤差時間會更大。

RTX51 Tiny使用os_wait()函數(shù)作定時,只有當(dāng)系統(tǒng)任務(wù)較輕時,使用os_wait(K_IVL,count,0)和 os_wait(K_TMO,count,0)才能達(dá)到一致的效果;而在任務(wù)較重時,使用這2個函數(shù)所得到的結(jié)果會有很大差別。參考文獻(xiàn)[5]對此做了詳細(xì)介紹,此處只作簡單補充。

事實上,用戶程序的運行是陣發(fā)性的,在一段時間內(nèi)任務(wù)會比較繁忙,而在另一段時間可能會處于空閑狀態(tài)。如果使用 os_wait(K_TMO,count,0)函數(shù)進行定時,則在不同的時間段會得到不同的結(jié)果。所以,要實現(xiàn)較為精確和穩(wěn)定的定時,最好還是使用 os_wait(K_IVL,count,O)函數(shù),而不是os_wait(K_TMO,count,O)。除非延時時間很長,如超過了所有任務(wù)的輪轉(zhuǎn)時間總和,os_wait(K_IVL,count,O)和os_wait(K_TM0,count,O)的延時效果才會相同。

4 INT_CLOCK的設(shè)置與延時計算

RTX5 Tiny中與延時相關(guān)的2個參數(shù)為INT_CLOCK和TIMESHARING。先來看Rtx5ltny.A51源程序中的一段:

從上面的程序段可以看出,RTX51 Tiny內(nèi)核使用Timer0作為硬件定時器,Timer0工作在方式1(16位計數(shù)方式)。因此,如果想增加定時器溢出時間,可以修改INl_CLOCK的定義。但不能無限制地增大,最大只能到216一1,即65 535。如果單片機采用12 MHz的晶振,則每次定時器溢出的最長時間為65.535ms。如果INT_CLOCK的定義值超過了這個數(shù)據(jù),并不能達(dá)到預(yù)期的結(jié)果。例如,把 INT_CLOCK定義為100 000(Oxl86AOH),那么實際上INT_CLOCK為34 464(Ox86AOH)。本來是想定時100 ms,實際上得到的卻是34.4 ms。因此,在設(shè)置具體延時時間時必須仔細(xì)計算。

系統(tǒng)的任務(wù)輪轉(zhuǎn)時間等于每次定時器溢出時間與TIMESHARING的乘積。因此,要將系統(tǒng)的任務(wù)輪轉(zhuǎn)時間設(shè)置為特殊的時長,可以通過INT_CLOCK與TIME-SHARING兩個參數(shù)的不同組合來實現(xiàn)。不過在一般的應(yīng)用當(dāng)中,都是采用其系統(tǒng)的默認(rèn)值,無須修改。

5 修改內(nèi)核配置的基本過程

RTX51TNY.A51為RTX51 Tiny的核心程序,包括所有的函數(shù)定義,不需要改動。通常改動的是配置程序CONF_TNY.A51,主要內(nèi)容如下。

INT_REGBANK EQU 1:定時器中斷時使用的寄存器組默認(rèn)值是寄存器組1,一般無需改動。

INT_CLOCK EQU 10000:硬件定時器零TimerO的溢出時間,即1個滴答(tick)的時間長度。默認(rèn)值是10 000個機器周期。對于傳統(tǒng)的MCS51單片機來說,1個機器周期為12個時鐘周期。如果采用12 MHz的晶振,那么每個機器周期將為lμs,1個滴答的時長為10 ms。

TIMESHARING EQU5:定義時間片輪轉(zhuǎn)(round-robin timeout)時間,默認(rèn)值為5個滴答(1個滴答為Tim—erO的1次溢出)。如果INT_CLOCK為10 000,時鐘頻率為12 MHz,則1個時間片的輪轉(zhuǎn)時間為50 ms,即每個任務(wù)每次最大可獲得的執(zhí)行時間為50 ms。如果TIME-SHARING定義為O,則禁止時間片輪轉(zhuǎn)。

RAMTOP EQU 0FFH:定義CPU堆??墒褂玫淖罡逺AM地址,默認(rèn)值為地址OFFH(256-1)。FREE_STACK EQU 20:配置堆棧大小為20字節(jié),默認(rèn)值為20(經(jīng)常需要改動)。用戶可根據(jù)自己的實際需要進行修改,一般情況下需要配置或修改的內(nèi)容主要有 INT_CLOCK、TIMESHAR-ING、FREE_STACK。

6 其他需要注意的問題

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

通過仿真發(fā)現(xiàn),程序會在此處死循環(huán)。

(Conf_tny.a(chǎn)51)FREE_STACK EQU 20:配置堆棧大小為20字節(jié),默認(rèn)值為20。選擇合適的堆棧大小,即設(shè)置合適的FREE_STACK值,可達(dá)到最佳效果。

②同堆棧一樣,輪轉(zhuǎn)時間片的長度也不宜設(shè)置得過大或過小。設(shè)置得過大,則一些持續(xù)時間較短的事件無法響應(yīng)。如果輪轉(zhuǎn)時間設(shè)置得過小,則CPU的很大一部分功能被消耗在任務(wù)切換上了;如果任務(wù)多,處理時間長,無疑會無形中增加系統(tǒng)的負(fù)擔(dān)。需要根據(jù)具體的需要權(quán)衡。

結(jié)語

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

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631989
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7430

    瀏覽量

    163517
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6684

    瀏覽量

    123140
收藏 人收藏

    評論

    相關(guān)推薦

    多任務(wù)操作系統(tǒng)源代碼(Keil Rtx51)

    多任務(wù)操作系統(tǒng)源代碼(Keil Rtx51
    發(fā)表于 07-07 09:34

    RTX-51 實時操作系統(tǒng) 中英文版

    RTX-51 實時操作系統(tǒng) 中英文版RTX51是一個適用于8051 家族的實時多任務(wù)
    發(fā)表于 10-29 15:16

    rtx51 full實時操作系統(tǒng)

    有誰有哪個rtx51 full實時操作系統(tǒng)呢,有的話發(fā)給我吧,謝謝!
    發(fā)表于 05-09 22:52

    RTX51 Tiny內(nèi)核應(yīng)用中有什么常見問題?

    多任務(wù)實時操作系統(tǒng),可用來設(shè)計具有實時性要求的多任務(wù)軟件。RTx51有2個版本:RTX51
    發(fā)表于 09-20 08:17

    請問誰有51操作系統(tǒng)Rtx51 Tiny多任務(wù)操作系統(tǒng)源碼嗎?

    本人是操作系統(tǒng)菜鳥級別 想先了解一下Rtx51 Tiny 誰有源碼嗎 跪求源碼
    發(fā)表于 11-05 20:40

    RTX51 Tiny內(nèi)核應(yīng)用種常見的問題有哪些?

    本文從具體的內(nèi)核分析出發(fā),對使用RTX51 Tiny操作系統(tǒng)時的一些概念和應(yīng)用中的問題進行了闡述和澄清,使大家對RTX5l
    發(fā)表于 04-28 06:22

    RTX-Tiny操作系統(tǒng)怎么使用?

    什么是RTX51?RTX-Tiny操作系統(tǒng)怎么使用?
    發(fā)表于 09-30 07:03

    51單片機多任務(wù)同時執(zhí)行

    51單片機多任務(wù)同時執(zhí)行。RTX51 Tiny是一種實時操作系統(tǒng)(RTOS),可以用它來建立多個
    發(fā)表于 08-03 16:58

    RTX51微型實時內(nèi)核資料

    。 RTX51 Tmall: ·專為無擴展數(shù)據(jù)的單芯片應(yīng)用而設(shè)計。 但是,它可以與任何8051目標(biāo)系統(tǒng)一起使用。 ·支持C51編譯器的所有內(nèi)存型號(小型、緊湊型和大型)。 操作系統(tǒng)變量
    發(fā)表于 08-12 06:18

    KEIL RTX51實時操作系統(tǒng)中文版

    KEIL RTX51實時操作系統(tǒng)中文版:RTX51是一個適用于8051 家族的實時多任務(wù)
    發(fā)表于 09-23 17:10 ?0次下載

    如何使用rtx51小型實時操作系統(tǒng)

    本手冊解釋如何使用rtx51小型實時操作系統(tǒng)并給出rtx51完全版功能的概述。這個手冊并不是一本詳細(xì)的實時應(yīng)用的入門教程并且假定你已經(jīng)熟悉了
    發(fā)表于 06-30 22:44 ?298次下載

    RTX51 TINY的分析

    RTX51 TINY的分析   RTX51 TINY是一種應(yīng)用于MCS5l系列單片機的小型多任務(wù)實時
    發(fā)表于 03-29 15:10 ?5665次閱讀
    <b class='flag-5'>RTX51</b> <b class='flag-5'>TINY</b>的分析

    RTX-51 實時操作系統(tǒng)

    RTX51是一個適用于8051 家族的實時多任務(wù)操作系統(tǒng)RTX51使復(fù)雜的系統(tǒng)和軟件設(shè)計 以及
    發(fā)表于 04-07 09:38 ?191次下載

    RTX51 Tiny內(nèi)核在實際應(yīng)用中的概念和問題探討

    目前在8051系列單片機上使用多任務(wù)實時操作系統(tǒng),絕大多數(shù)應(yīng)用都選擇了RTX51 Tiny。本文就其在實際應(yīng)用中的一些概念和具體問題進行了探
    的頭像 發(fā)表于 03-27 08:00 ?2550次閱讀
    <b class='flag-5'>RTX51</b> <b class='flag-5'>Tiny</b>內(nèi)核在實際應(yīng)用中的<b class='flag-5'>概念</b>和問題探討

    基于RTX51嵌入式多任務(wù)實時操作系統(tǒng)的智能卡電能表設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于RTX51嵌入式多任務(wù)實時操作系統(tǒng)的智能卡電能表設(shè)計.pdf》資料免費下載
    發(fā)表于 10-26 09:12 ?2次下載
    基于<b class='flag-5'>RTX51</b>嵌入式<b class='flag-5'>多任務(wù)實時</b><b class='flag-5'>操作系統(tǒng)</b>的智能卡電能表設(shè)計