日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

RTX51 Tiny內(nèi)核常見問題解決方法

出處:單片機(jī)與嵌入式系統(tǒng) 發(fā)布于:2011-09-05 11:24:26

  引 言

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

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

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

  一般來說,C語言中主程序就是指main()函數(shù)。實際上RTX51 Tiny的主程序是以匯編代碼的形式位Rtx51tny.A51文件中,在程序的:

 

程序

 

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

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

  另外,使用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)小巧精悍,能極大地提高程序的可讀性及可維護(hù)性,但也占用了一定的存儲空間。這是一種以空間換取性能的辦法。由于RTX51操作系統(tǒng)占用了存儲空間,如果不外擴(kuò)存儲器,則至少需要8052系列以上的單片機(jī)。在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)的誤差時間會更大。

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

  事實上,用戶程序的運行是陣發(fā)性的,在一段時間內(nèi)任務(wù)會比較繁忙,而在另一段時間可能會處于空閑狀態(tài)。如果使用os_wait(K_TMO,count,0)函數(shù)進(jìn)行定時,則在不同的時間段會得到不同的結(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。如果單片機(jī)采用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)核配置的基本過程

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

  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個機(jī)器周期。對于傳統(tǒng)的MCS51單片機(jī)來說,1個機(jī)器周期為12個時鐘周期。如果采用12 MHz的晶振,那么每個機(jī)器周期將為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堆棧可使用的RAM地址,默認(rèn)值為地址OFFH(256-1)。FREE_STACK EQU 20:配置堆棧大小為20字節(jié),默認(rèn)值為20(經(jīng)常需要改動)。用戶可根據(jù)自己的實際需要進(jìn)行修改,一般情況下需要配置或修改的內(nèi)容主要有INT_CLOCK、TIMESHAR-ING、FREE_STACK。

  6 其他需要注意的問題

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

 

程序

 

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

  (Conf_tny.a51)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)核簡潔高效,非常適合于運行在資源較少的單片機(jī)上。根據(jù)其設(shè)計思想,我們也很容易把它移植到其它單片機(jī)上。但是它也有缺陷,例如:不支持外部任務(wù)切換;不支持用戶使用定時器T0等。這些缺陷的存在,限制了任務(wù)切換的靈活性。

 


  

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!