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

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

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

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

電子設(shè)計(jì) ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2020-03-27 08:00 ? 次閱讀

引 言

μVision是德國(guó)Keil公司開(kāi)發(fā)的單片機(jī)IDE軟件,最初主要用于8051系列單片機(jī),目前也有支持ARM系列單片機(jī)的專(zhuān)用版本MDK-ARM。TX51 TINY是RTX51 FULL的子集,僅支持按時(shí)間片循環(huán)任務(wù)調(diào)度,支持任務(wù)間信號(hào)傳遞,最大16個(gè)任務(wù),可以并行地利用中斷。具有以下等待操作:超時(shí)、另一個(gè)任務(wù)或中斷的信號(hào)。但它不能進(jìn)行信息處理,不支持存儲(chǔ)區(qū)的分配和釋放,不支持占先式調(diào)度。RTX51 TINY一個(gè)很小的內(nèi)核,完全集成在KEIL C51編譯器中。更重要的是,它僅占用800字節(jié)左右的程序存儲(chǔ)空間,可以在沒(méi)有外放數(shù)據(jù)存儲(chǔ)器的8051系統(tǒng)中運(yùn)行,但應(yīng)用程序仍然可以訪(fǎng)問(wèn)外部存儲(chǔ)器。RTX51 TINY下文簡(jiǎn)稱(chēng)為內(nèi)核。

目前在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ù)。實(shí)際上RTX51 Tiny的主程序是以匯編代碼的形式位Rtx51tny.A51文件中,在程序的最后:

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

在通常的應(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ù)。

內(nèi)核完全集成在KEIL C51編譯器中,以系統(tǒng)函數(shù)調(diào)用的方式運(yùn)行,因此可以很容易地使用KEIL C51語(yǔ)言編寫(xiě)和編譯一個(gè)多任務(wù)程序,并嵌入到實(shí)際應(yīng)用系統(tǒng)中。

另外,使用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ì)更大。

主要完成os_wait函數(shù)。任務(wù)調(diào)用os_wait函數(shù),掛起當(dāng)前任務(wù),等待一個(gè)或幾個(gè)間隔(K_IVL)、超時(shí)(K_TMO)、信號(hào)(K_SIG)事件。如果所等待的事件已經(jīng)發(fā)生,繼續(xù)執(zhí)行當(dāng)前任務(wù);如果所等待的事件沒(méi)有發(fā)生,則置相應(yīng)的等待標(biāo)志后,掛起該任務(wù),轉(zhuǎn)任務(wù)切換程序段(switchingnow)切換到下一任務(wù)。

事實(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)核在實(shí)際應(yīng)用中的概念和問(wèn)題探討

從上面的程序段可以看出,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ò)程

RTX51 TINY的用戶(hù)任務(wù)具有以下幾個(gè)狀態(tài)。(1)RUNNING:任務(wù)處于運(yùn)行中,同一時(shí)間只有一個(gè)任務(wù)可以處于“RUNNING”狀態(tài)。(2)READY:任務(wù)正在等待運(yùn)行,在當(dāng)前運(yùn)行的任務(wù)時(shí)間片完成之后,RTX51 TINY運(yùn)行下一個(gè)處于“READY”狀態(tài)的任務(wù)。(3)WAITING:任務(wù)等待一個(gè)事件。如果所等待的事件發(fā)生的話(huà),任務(wù)進(jìn)入“READY”狀態(tài)。(4)DELETED:任務(wù)不處于執(zhí)行隊(duì)列。(5)IME OUT:任務(wù)由于時(shí)間片用完而處于“TIME OUT”狀態(tài),并等待再次運(yùn)行。(6)該狀態(tài)寫(xiě)“READY”狀態(tài)相似,但由于是內(nèi)部操作過(guò)程使一個(gè)循環(huán)任務(wù)被切換而被冠以標(biāo)記。

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堆??墒褂玫淖罡逺AM地址,默認(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.a51中有個(gè)非常重要的宏STACK_ERROR,其源程序如下:

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

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

(Conf_tny.a51)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ǔ)

以上分析可以看到這個(gè)內(nèi)核簡(jiǎn)潔高效,非常適合于運(yùn)行在資源較少的單片機(jī)上。根據(jù)其設(shè)計(jì)思想,我們也很容易把它移植到其它單片機(jī)上。但是它也有缺陷,例如:不支持外部任務(wù)切換;不支持用戶(hù)使用定時(shí)器T0等。這些缺陷的存在,限制了任務(wù)切換的靈活性。

責(zé)任編輯:gt


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

    關(guān)注

    38

    文章

    7439

    瀏覽量

    163529
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1361

    瀏覽量

    40191
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3238

    瀏覽量

    57550
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    多任務(wù)實(shí)時(shí)操作系統(tǒng),可用來(lái)設(shè)計(jì)具有實(shí)時(shí)性要求的多任務(wù)軟件。 RTx51有2個(gè)版本:RTX51 TinyRTX51 Full。RTX51
    的頭像 發(fā)表于 09-03 17:48 ?5392次閱讀
    多任務(wù)實(shí)時(shí)操作系統(tǒng)<b class='flag-5'>RTX51</b> <b class='flag-5'>Tiny</b>的<b class='flag-5'>概念</b>和應(yīng)用問(wèn)題探究

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

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

    RTX51 TINY怎么使用?

    RTX51 TINY怎么使用?KEIL RTX51 TINY內(nèi)核的分析與應(yīng)用
    發(fā)表于 04-28 06:11

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

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

    有哪些措施可以去優(yōu)化RTX51 Tiny程序呢

    怎樣去配置RTX51 Tiny的硬件定時(shí)器呢?怎樣去配置RTX51 Tiny的庫(kù)文件呢?
    發(fā)表于 01-26 06:06

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

    RTX51 TINY是一個(gè)小型實(shí)時(shí)內(nèi)核,專(zhuān)為代碼大小是最重要因素的單芯片應(yīng)用而設(shè)計(jì)。 RTX51內(nèi)核只需要900字節(jié)的代碼空間,非常適合不
    發(fā)表于 08-12 06:18

    KEIL RTX51 TINY內(nèi)核的分析與應(yīng)用

    簡(jiǎn)要介紹RTX51 TINY 的基本情況和使用方法;詳細(xì)分析這個(gè)內(nèi)核的任務(wù)管理和內(nèi)存管理的運(yùn)行機(jī)制, 并給出其主要代碼流程圖。
    發(fā)表于 04-16 08:57 ?128次下載

    基于RTX51 TINY的加密短消息通信系統(tǒng)

    介紹一種基于RTX51 TINY的加密短消息通信系統(tǒng),可以實(shí)現(xiàn)手機(jī)與手機(jī)以及手機(jī)與計(jì)算機(jī)之間的加密短消息通信。
    發(fā)表于 06-22 15:10 ?77次下載

    RTX51 TINY的分析

    RTX51 TINY的分析   RTX51 TINY是一種應(yīng)用于MCS5l系列單片機(jī)的小型多任務(wù)實(shí)時(shí)操作系統(tǒng)。它完全集成Keil C5l
    發(fā)表于 03-29 15:10 ?5669次閱讀
    <b class='flag-5'>RTX51</b> <b class='flag-5'>TINY</b>的分析

    RTX51 Tiny容易混淆的問(wèn)題有哪些應(yīng)該如何解決

    RTX51 Tiny是 Keil uVision自帶的一個(gè)小型嵌入式RTOS,具有小巧、速度快、系統(tǒng)開(kāi)銷(xiāo)小、使用方便等優(yōu)點(diǎn)。使用RTX51 Tin
    發(fā)表于 09-04 17:27 ?2次下載
    <b class='flag-5'>RTX51</b> <b class='flag-5'>Tiny</b><b class='flag-5'>中</b>容易混淆的問(wèn)題有哪些應(yīng)該如何解決

    RTX51 Tiny中有哪些問(wèn)題容易混淆如何解決

    RTX51 Tiny是 Keil uVision自帶的一個(gè)小型嵌入式RTOS,具有小巧、速度快、系統(tǒng)開(kāi)銷(xiāo)小、使用方便等優(yōu)點(diǎn)。使用RTX51 Tin
    發(fā)表于 08-19 17:31 ?2次下載
    <b class='flag-5'>RTX51</b> <b class='flag-5'>Tiny</b>中有哪些問(wèn)題容易混淆如何解決

    RTX51 Tiny有哪些問(wèn)題容易混淆

    51單片機(jī)專(zhuān)門(mén)定制的,所以51單片機(jī)上的運(yùn)行效率比其它一些通用的RTOS性能也要好一些。 但是,由于RTX51 Tiny的相關(guān)資料和書(shū)籍比
    發(fā)表于 07-23 17:37 ?2次下載
    <b class='flag-5'>RTX51</b> <b class='flag-5'>Tiny</b>有哪些問(wèn)題容易混淆

    RTX51 Tiny中有哪些問(wèn)題容易混淆

    RTX51 Tiny是 Keil uVision自帶的一個(gè)小型嵌入式RTOS,具有小巧、速度快、系統(tǒng)開(kāi)銷(xiāo)小、使用方便等優(yōu)點(diǎn)。使用RTX51 Tin
    發(fā)表于 07-17 17:38 ?3次下載
    <b class='flag-5'>RTX51</b> <b class='flag-5'>Tiny</b>中有哪些問(wèn)題容易混淆

    C51單片機(jī)與實(shí)時(shí)系統(tǒng)RTX51(Tiny / Full)

    C51單片機(jī)與實(shí)時(shí)系統(tǒng)RTX51(Tiny / Full)
    發(fā)表于 11-18 14:51 ?50次下載
    C<b class='flag-5'>51</b>單片機(jī)與實(shí)時(shí)系統(tǒng)<b class='flag-5'>RTX51</b>(<b class='flag-5'>Tiny</b> / Full)

    RTX51 Tiny用戶(hù)手冊(cè)

    RTX51手冊(cè) RTX51手冊(cè) RTX51手冊(cè) RTX51手冊(cè)
    發(fā)表于 08-27 11:41 ?0次下載