色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

電子工程網(wǎng)

標題: RTX51——Keil的專用于51單片機的嵌入式系統(tǒng) [打印本頁]

作者: alpha321    時間: 2009-11-12 22:02
標題: RTX51——Keil的專用于51單片機的嵌入式系統(tǒng)
  RTX51是一款非常緊湊的用于51單片機的嵌入式系統(tǒng),支持多任務(wù)、中斷和時間片調(diào)度。特別是RTX51 Tiny,能用于真正的51單片系統(tǒng)。該系統(tǒng)在Keil UV2上可用,且?guī)д{(diào)試支持。經(jīng)過多年的改進,RTX51已經(jīng)很成熟。
    本人認為,在51的簡單應(yīng)用中,這個輕量級的RTX51還是很實用的。有哪位用過,不妨交流一下自己的看法,本人在此先行謝過。
  RTX51很容易使用,在此提供一個例子,單片機控制兩個LED亮滅閃爍。
rtx_tes.rar (669 Bytes)
其中設(shè)置如下


作者: lelee007    時間: 2009-11-12 22:24
這個OS局限性太大,沒什么大的實際用途

對網(wǎng)絡(luò)應(yīng)用支持么?

而且現(xiàn)在的MCU越來越便宜了,復雜、對性能有需求的,51很難勝任

RTX51學學就可以了
作者: alpha321    時間: 2009-11-13 10:31
非常感謝,樓上說的沒錯,RTX51專用于51單片機。
如果需要網(wǎng)絡(luò)應(yīng)用,可以選其它架構(gòu)的片子。
在這里我不妨就事論事,在可以用51的場合,51芯片和RTX51還是搭配的。
試看更低端的MCU,有的連C都不支持。好在51的資料豐富,開發(fā)工具還算不錯,也很便宜。
作者: alpha321    時間: 2009-11-13 10:46
如果我沒有記錯,wangkj的顯卡就用了51,“stc51單片機主控,cpld+sdram實現(xiàn)顯卡硬件”。當然,這位的應(yīng)用做得很高端,本人望塵莫及。
作者: alpha321    時間: 2009-11-13 17:47
一個簡單的例子,51直接驅(qū)動兩個LED亮滅閃爍。
// ===========================================
//                        test project for RTX51 Tiny
// ===========================================
#include   
// 包含RTX51 tiny頭文件
#include   

// ---------------------------------------------------------------
// 指示燈口線定義
sbit LED0 = P1^0;
sbit LED1 = P1^1;

// ---------------------------------------------------------------
// 定義閃爍周期。為突出差異,兩個周期設(shè)為不同的值。
const unsigned char ucDly0 = 53;
const unsigned char ucDly1 = 137;

// =========================================
// 第一個任務(wù)“_task_ 0”,系統(tǒng)啟動默認加載的任務(wù)
void job0(void) _task_ 0
{
    static bit LED_Flag = 0;

        // 加載另一個任務(wù)
        os_create_task(1);
        
        while(1)
        {
                // 指示燈輸出
                LED0 = LED_Flag;
                // 位寄存器取反
                LED_Flag = ~LED_Flag;
                // 延時等待,RTX51系統(tǒng)過程調(diào)用
                os_wait2(K_TMO, ucDly0);
        }
}

// ---------------------------------------------------------------
// 第二個任務(wù),除了沒有“加載另一個任務(wù)”外與第一個任務(wù)基本相同
void job1(void) _task_ 1
{
    static bit LED_Flag = 0;

        while(1)
        {
                LED1 = LED_Flag;
                LED_Flag = ~LED_Flag;
               
                os_wait2(K_TMO, ucDly1);
        }
}

// =========================================
作者: alpha321    時間: 2009-11-19 14:45
上面是該例子的源代碼,其中沒有用到時間片調(diào)度,CONF_TNY.A51中只改了兩個默認的參數(shù):INT_CLOCK,設(shè)為9216是為在fosc = 11.0592MHz時得到10MS的系統(tǒng)調(diào)度周期;TIMESHARING設(shè)為0,禁止時間片調(diào)度。
作者: alpha321    時間: 2009-11-21 09:23
  該例子中可以看出RTX51應(yīng)用的特點,沒有C程序中常用的main()過程,只有用_task_關(guān)鍵字定義的任務(wù),每個任務(wù)是一個封閉閉的循環(huán)。main()的功能已被RTX51接管了;系統(tǒng)等待調(diào)用os_wait2()。其實還有os_wait1(),os_wait()兩個等待過程,三者之間功能略有差異,具體可參考“C:\Keil\C51\HLP\TR51.CHM”。
  還有其它可供調(diào)用的RTX51系統(tǒng)例程,可以參考RTX51的函數(shù)說明。
作者: alpha321    時間: 2009-12-5 08:00
RTX51用MCS51匯編語言寫成,KEIL是不提供源碼的,但不影響正常使用。UV2中附帶的例子很不錯,TRAFFIC是一個應(yīng)用RTX51 TINY的交通燈控制程序,其中用了UART通信,重寫了putchar()、getkey()等過程,以適應(yīng)RTX51任務(wù)調(diào)用。
作者: alpha321    時間: 2009-12-11 10:11
交通燈控制程序TRAFFIC,其功能是控制一個供行人通過的路口的交通指示燈,忙碌時段內(nèi)車輛通行方向為綠燈,行人通行方向為紅燈。行人要通過時,按下按鍵,交通燈轉(zhuǎn)換為車輛通行方向為紅燈,行人通行方向為綠燈,讓行人通過,稍后恢復為車輛通行。空閑時段內(nèi)車輛通過方向黃燈亮滅閃爍。如果系統(tǒng)與串行終端連接,則終端上顯示控制器內(nèi)部的實時時間,可以通過終端設(shè)置控制器的時間,忙碌時段的開始時間和結(jié)束時間。
這是一個典型的過程控制例子,其中的單片機系統(tǒng)等待的時間較長,工作狀態(tài)轉(zhuǎn)換也較頻繁,程序如果用前后臺方式設(shè)計,工作量大而且容易出錯。用RTX51 則程序很簡潔,實時性能也不錯。
作者: alpha321    時間: 2009-12-11 10:31
TRAFFIC中有效的任務(wù)劃分為:
1)實時時間計時CLOCK;
2)行人通過時的按鍵輸入KEYREAD;
3)忙碌時交通燈控制LIGHTS;
4)空閑時交通燈控制BLINKING;
5)終端命令接收COMMAND;
6)終端輸入時ESC捕獲GET_ESC。
其中KEYREAD、COMMAND和CLOCK始終運行,LIGHTS和BLINKING交替運行,GET_ESC只在終端輸入時運行。
作者: alpha321    時間: 2009-12-19 17:08
其實,用RTX的更方便的是功能的裁剪。TRAFFIC中的功能,用前后臺編程也可以很方便地實現(xiàn),有興趣的可以試試。但是,以上提到的各個任務(wù),在前后臺系統(tǒng)中要做增減是很費勁的,而用RTX則很方便,刪除一個任務(wù)本身和等待該任務(wù)的信號的操作即可,修改的地方很少,幾乎不留痕跡?梢栽囋囋谇昂笈_系統(tǒng)上的修改過程是如何繁瑣。
作者: ydz0515    時間: 2010-2-2 11:01
支持LZ。像TRAFFIC這樣的例子,如果不使用RTX51,即使高手也做不了那么完善。

看到不少研究生以RTX51_TINY應(yīng)用方法做論文課題,其實教授也用不好,愿意的話在這里貼幾篇碩士論文,結(jié)果是用錯了。當然評委也是蒙古教授,學生能研究到這個程度就不錯了,畢竟中國還沒有一個博士或者教授能寫的出來51_RTOS 呀.
作者: alpha321    時間: 2010-3-15 00:09
非常感謝樓上的回帖!

其實我是這樣理解的, 國內(nèi)不是寫不出51_RTOS, 很大程度上是不屑于去寫. 我從來不敢低估各位國內(nèi)同行的實力, 甚至我都認為某些國內(nèi)同行技術(shù)實力和創(chuàng)造性絕不亞于國外同行. 政策和資金方面的引導那不是咱搞技術(shù)的能確定的, 在此不提.

其實51是不適合用來做論文的,就算做出來也不見得能通過答辯或發(fā)表, 在這方面它顯得技術(shù)含量不高, 沒人會當回事. 前幾年我接觸過一個研究生, 做DSP + ARM9 + USB + FS + IP/TCP, 視頻采集處理 + 壓縮存儲 + 主機端程序.  不到一年時間, 從原理圖, PCB, 算法, 軟件都搞定. 結(jié)果有人給評優(yōu)秀, 根本不問那是怎么搞出的.

我想說的是, 搞論文別搞51, 搞51別搞論文. 這甚至可以說不是同一個行業(yè). 我也實話說如果想解決學習或應(yīng)用中的問題, 可以適當參考一下我的帖子, 如果做論文, 不只是我的帖子, 就是這個網(wǎng)站, 恐怕也難滿足這樣的期望吧.
作者: alpha321    時間: 2010-3-15 00:14
有一陣子沒時間來發(fā)帖了, 對不住關(guān)注該話題的各位. 有機會我會把以前做過的一些應(yīng)用貼上來, RTX51 和 UC/OS-II的都有, 希望對各位有用.  現(xiàn)在的問題是我有好長時間不搞51了, 也沒時間整理那些東西, 非常抱歉.
作者: ncschen    時間: 2010-5-17 13:57
學習學習
作者: alpha321    時間: 2010-5-19 00:34
RTX51應(yīng)用中的各任務(wù)多由 task 0 創(chuàng)建, 在建立各任務(wù)后, 在 task 0 的最后將該任務(wù)本身刪除: os_delete_task( 0 );
作者: supergame111    時間: 2010-6-30 15:23
好好學習學習
作者: yuzhigan    時間: 2010-7-6 21:25
回復17樓supergame111
值得好好學習
作者: yuzhigan    時間: 2010-7-6 21:25
謝謝分享,好東西
作者: irzn    時間: 2010-7-7 15:45
不提供源代碼很不方便啊
作者: hyingsheng    時間: 2010-7-8 20:48
收藏了 謝謝啊 很好
作者: alpha321    時間: 2010-7-28 20:05
回復20樓irzn
這的確是一個缺點,不過uc/os-II是提供源碼的,可是并不太適合51。事實上,我們在做PC編程時,windows的API還是VC/VB的控件,都是不提供源碼的,不過這也沒影響我們的正常開發(fā).
作者: alpha321    時間: 2010-7-28 20:22
RTX51中很有意義的一個特點是為系統(tǒng)進入待機(Idle)或掉電(Power down)狀態(tài)提供了一個實現(xiàn)空閑任務(wù)Idle task的宏, 在系統(tǒng)各個任務(wù)都不執(zhí)行(執(zhí)行條件未滿足)時, 使系統(tǒng)自動進入休眠狀態(tài), 為降低系統(tǒng)功耗提供了操作的可能. 各種51芯片的待機和掉電操作略有不同, 喚醒方式也有所差別. 應(yīng)用時可視所用芯片適當選擇. 文檔中提供的一個例子, 是使通常的51單片機進入待機模式的宏定義:
CPU_IDLE MACRO
ORL PCON,#1 ; set 8051 CPU to IDLE
ENDM
在conf_tny.a51中, 定義CPU_IDLE_CODE為空閑任務(wù)的開關(guān),設(shè)為1時,允許進入空閑任務(wù).此時必須定義CPU_IDLE的宏.
另外,CPU_IDLE也可以不進入休眠狀態(tài),而是點亮一個空閑狀態(tài)指示燈,或熄滅忙碌狀態(tài)指示燈,或設(shè)置一個其他狀態(tài), 具體操作可根據(jù)應(yīng)用而定.
作者: alpha321    時間: 2010-7-28 21:09
說點關(guān)于操作系統(tǒng)的題外話. 當前炙手可熱的LINUX, 其前身實際是大名鼎鼎的UNIX, 后者在從巨型機到微型機/工作站上長期居于領(lǐng)導地位, 經(jīng)過多年的發(fā)展, 達到了相當高的技術(shù)水準, 同時其結(jié)構(gòu)也演化得相當復雜, 多數(shù)版本難以在微型機上運行, 更別說嵌入式系統(tǒng)了.

LINUX的作者別開生面, 將UNIX結(jié)構(gòu)作了一個恰當?shù)男薷?這種修改現(xiàn)在被認為是獨創(chuàng)), 得到了LINUX內(nèi)核. 該內(nèi)核生逢其時, 有GNU的支持, 不同的版本被大量用于服務(wù)器和嵌入式系統(tǒng), 伸縮性很強的系統(tǒng)性能使這只小企鵝大顯神威.

諸位可看看該系統(tǒng)的特點, 實時性能不比UCOSII, 圖形性能不比WINDOWS, 難學難用更是其他系統(tǒng)不及的. 通用設(shè)備的驅(qū)動程序更是奇缺.

為此, 多個公司對LINUX進行了再開發(fā), 比如著名的REDHAT, 還有國內(nèi)的紅旗LINUX. 然而, 這樣一來, LINUX不再是自由的了, 要獲得使用權(quán)得交費了. 還能稱之為自由軟件嗎?

也許這種局面將來會有改觀. 關(guān)于這個問題, 有興趣的朋友不妨談?wù)効捶?
作者: alpha321    時間: 2010-8-5 12:45
LINUX能發(fā)展到今天而且很流行,自有它的道理,暫且不提。搞嵌入式系統(tǒng),選LINUX是不錯的,但不能因此一葉障目,認為除LINUX以外再無其它嵌入式系統(tǒng),須知山外青山,藝無止境。
作者: alpha321    時間: 2010-8-5 12:54
前面提的RTX51,多指RTX51 tiny, 這是RTX51的一個片內(nèi)RAM支持版本, 隨KEIL編譯器一塊提供,占用很小的內(nèi)部RAM空間,完成任務(wù)的調(diào)度. RTX51 FULL為片外RAM支持版本, 進程調(diào)度現(xiàn)場保存較大的在片外RAM中, 支持的系統(tǒng)數(shù)據(jù)交換方式也更豐富, 如數(shù)據(jù)郵箱等(RTX51 tiny 只支持信號).
作者: xubin_hh    時間: 2010-8-5 13:08
先看看
作者: alpha321    時間: 2010-8-19 20:24
RTX51 Tiny固定用定時器T0作為系統(tǒng)時鐘發(fā)生器,一般系統(tǒng)中設(shè)置系統(tǒng)時鐘周期為10ms左右.如上面例子中定時常數(shù)設(shè)為"9216".但對于時間要求很苛刻的應(yīng)用,如LED數(shù)碼管掃描,將其作為獨立的任務(wù)來調(diào)度,10ms左右的周期太長了.在RTX51 Tiny中提供了在T0系統(tǒng)時鐘中斷例程中執(zhí)行代碼的方式,可用來保證滿足這種實時限制,把動態(tài)LED數(shù)碼顯示的周期性掃描驅(qū)動獨立成為一個子過程,在T0中斷例程中調(diào)用即可.
作者: hotpower    時間: 2010-8-25 21:24
不錯,先學好這些。
去掉51兩字即可用于ARM
作者: alpha321    時間: 2010-9-3 12:45
感謝hotpower.
在Keil RealView中,RTX系列中間件更全面,包括RTX內(nèi)核、IP協(xié)議棧、SD卡文件系統(tǒng)等,都是基于ARM的32位組件。關(guān)于這些組件,本人并不太了解,因此不敢在此妄加評論。但可以肯定的是,RTX應(yīng)該比我前邊提到的RTX51功能更強大。對此有了解的朋友,不妨介紹介紹RTX。
作者: daoyuan79    時間: 2010-9-6 11:46
感覺這方面的資料很少,
作者: alpha321    時間: 2010-9-8 18:28
回復31樓daoyuan79
不是資料少,是國內(nèi)用的人少.其實在每個Keil的版本下都有RTX51的,還有詳細的文檔和例子.只不過這些文檔是英文的,看的人不多.
作者: mqxc    時間: 2010-9-15 21:51
謝謝分享
作者: noescape    時間: 2010-9-17 22:28
學習學習了
作者: wenjin0386    時間: 2010-9-19 10:34
做個記號!
作者: alpha321    時間: 2010-9-28 19:11
RTX51 TINY對資源的占用很少,其用戶指南上邊提到所需代碼空間(CODE)最大為900字節(jié),實際應(yīng)用中可能比該值小.占用的內(nèi)部數(shù)據(jù)空間(DATA)為7字節(jié),另外每增加一個任務(wù),堆?臻g會多占用3字節(jié),但任務(wù)最多為16個.RTX51 TINY固定占用T0作為系統(tǒng)定時器,用寄存器組(BANK)0作為系統(tǒng)使用的組,但允許用戶的中斷例程使用其他寄存器組.
作者: alpha321    時間: 2010-9-30 07:58
通常在C51中,如果選擇只用一個寄存器組,則在進入中斷例程時,將PSW,ACC,R0-R7全部壓入堆棧,即使該中斷例程沒有使用其中的任何寄存器.如果為中斷例程分配了寄存器組,則進入中斷時僅切換寄存器組,R0-R7并不壓棧.
作者: zengguangjun    時間: 2010-9-30 12:04
資源緊張時可以選擇ProtoThread,有興趣的可以試試。
作者: alpha321    時間: 2010-10-8 17:26
回復38樓zengguangjun
感謝38樓!
這也是一種不錯的方案,http://code.google.com/p/protothread/有這種內(nèi)核的介紹.
作者: @︻$▅▆▇◤    時間: 2010-10-9 11:44
LZ不錯哦。
學東西最好是從最小的東西學起,這樣慢慢延伸出去,效果最好。
作者: renmingcan    時間: 2010-10-10 12:55
我就會用51tiny顯示個LED
作者: alpha321    時間: 2010-10-12 18:48
象其它的嵌入式操作系統(tǒng)一樣,RTX51Tiny在具體應(yīng)用的時候,也需要根據(jù)項目的功能設(shè)計做相應(yīng)的任務(wù)劃分,明確各任務(wù)擔當?shù)木唧w功能以及任務(wù)之間的聯(lián)系.這個問題似乎與RTX51Tiny本身無關(guān),只要做過設(shè)計的都明白這些,不管是否用嵌入式操作系統(tǒng),這個思路是最基本的.
  在我前面舉的LED的例子中,兩個任務(wù)之間是沒有聯(lián)系的,實際應(yīng)用中很少有這種相互之間完全獨立的任務(wù)共存于一個完整的應(yīng)用系統(tǒng)中.比如一個數(shù)據(jù)采集-控制系統(tǒng)中,可能有這樣的任務(wù):
1)系統(tǒng)初始化;
2)傳感器數(shù)據(jù)采集;
3)數(shù)據(jù)換算和處理;
4)控制運算和輸出;
5)數(shù)據(jù)和狀態(tài)顯示;
6)參數(shù)設(shè)定.
  這是一個簡單的例子,除任務(wù)1)外,其他任務(wù)都是在系統(tǒng)中循環(huán)執(zhí)行的,任務(wù)3)需要任務(wù)2)的輸出數(shù)據(jù)作為運算的基礎(chǔ),任務(wù)4)需要任務(wù)3)的結(jié)果作為控制的依據(jù).任務(wù)5)則作為當前狀態(tài)的顯示,采用其他任務(wù)的狀態(tài)信息和數(shù)據(jù).任務(wù)6)的設(shè)定結(jié)果則作為其他任務(wù)的輸入信息.
  設(shè)想這樣一個應(yīng)用功能的系統(tǒng),盡量簡化它的具體操作,然后劃分成幾個任務(wù),分別按RTX51Tiny的任務(wù)編寫要求寫好任務(wù),調(diào)試并運轉(zhuǎn)正常.然后看看這樣的任務(wù)在不用RTX51Tiny的前后臺系統(tǒng)中又如何實現(xiàn)調(diào)度.這將對理解嵌入式操作系統(tǒng)有幫助.有興趣的不妨將這些任務(wù)移植到其它操作系統(tǒng)上試試,比如LINUX上(當然不是51平臺了).
作者: alpha321    時間: 2010-10-16 13:45
這也是題外話. 具體的應(yīng)用和操作系統(tǒng)本身沒有必然的關(guān)系, 比如可以在一個復雜的操作系統(tǒng)上做一個相對簡單的應(yīng)用, 也可以基于一個簡單的操作系統(tǒng)甚至是前后臺做一個相當復雜的應(yīng)用,這都有現(xiàn)成的很多例子.
  當然, 隨著越來越復雜的應(yīng)用需求, 平臺也越來越復雜, 操作系統(tǒng)功能也越來越強, 這也是有目共睹的事實. 作為嵌入式操作系統(tǒng)內(nèi)核學習的實驗, 我們不妨以簡單直觀的LED燈作為應(yīng)用, 在此基礎(chǔ)上舉一反三, 掌握核心的知識并達到運用自如.
作者: dory    時間: 2010-10-21 16:05
xuexi!!!
作者: dory    時間: 2010-10-21 16:05
再xuexi !!!!
作者: deedzhaoyun    時間: 2010-10-21 17:14
寫的好,下載回去看看.
作者: alpha321    時間: 2010-10-26 17:20
前邊提到的中斷例程問題, 其實很多相對簡單的中斷例程不妨用匯編語言編寫, 比如前邊提到的LED數(shù)碼管動態(tài)掃描, 可以避免C51在進入中斷例程時把沒有影響到的R0-R7,PSW逐個入棧,退出中斷例程前又逐個出棧形成的執(zhí)行時間(這個有時很重要)和代碼及堆棧空間上的浪費. 畢竟51的速度和空間都是有限的. 有些特殊的地方, 匯編語言能發(fā)揮獨到的優(yōu)勢.
作者: hzndskj    時間: 2010-10-27 21:49
正在搞這個,有幫助。
作者: ddllxxrr    時間: 2010-12-23 14:16
好資料我正找呢
作者: hzh557    時間: 2011-3-2 14:43
呵呵,強
作者: ywwork2011    時間: 2011-3-4 10:29

作者: linhao2011    時間: 2011-3-10 09:56
學習,以后的再謙虛點,牛人太多了,呵呵
作者: alpha321    時間: 2011-3-13 20:45
還是題外話,
如果大家不嫌51太老,我推薦一款很經(jīng)典的片子,CY7C68013,支持USB2.0的FULL SPEED 及 HIGH SPEED 的 DEVICE端接口,51的架構(gòu)能做到如此高速實屬不易。更可取的是,該芯片系列支持二次枚舉,即芯片內(nèi)部不用事先寫入固件程序,在插到PC機的USB口時,驅(qū)動程序?qū)CU所需的目標程序通過USB下傳到片內(nèi)RAM開始執(zhí)行。這個特性比較適合僅和PC機連接工作的高速設(shè)備。
作者: 海中孤島    時間: 2011-3-20 16:47
學習
作者: dadaowai    時間: 2011-4-12 21:36
學習,以后的再謙虛點,牛人太多了,呵呵
作者: klyzh2003    時間: 2011-4-20 20:05
51裝操作系統(tǒng),有點小材大用嫌疑!
作者: kongchau    時間: 2011-4-29 21:47
學習中。。。
作者: 古木風    時間: 2013-5-27 22:44
原來我想多了
作者: 18821911106    時間: 2014-7-27 19:37

謝謝分享,好東西
作者: JZS    時間: 2015-1-23 22:51
剛?cè)腴T的,來看看
作者: pcbkey    時間: 2015-2-22 14:10
支持一下
作者: lucent    時間: 2015-5-26 11:28
呵呵。技術(shù)不分高大尚,夠用為原則。
作者: red178    時間: 2020-5-29 08:47
學習中……。




歡迎光臨 電子工程網(wǎng) (http://m.54549.cn/) Powered by Discuz! X3.4