查看: 28466|回復: 62
打印 上一主題 下一主題

RTX51——Keil的專(zhuān)用于51單片機的嵌入式系統

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2009-11-12 22:02:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: 興趣
  RTX51是一款非常緊湊的用于51單片機嵌入式系統,支持多任務(wù)、中斷和時(shí)間片調度。特別是RTX51 Tiny,能用于真正的51單片系統。該系統在Keil UV2上可用,且帶調試支持。經(jīng)過(guò)多年的改進(jìn),RTX51已經(jīng)很成熟。
    本人認為,在51的簡(jiǎn)單應用中,這個(gè)輕量級的RTX51還是很實(shí)用的。有哪位用過(guò),不妨交流一下自己的看法,本人在此先行謝過(guò)。
  RTX51很容易使用,在此提供一個(gè)例子,單片機控制兩個(gè)LED亮滅閃爍。
rtx_tes.rar (669 Bytes)
其中設置如下

沙發(fā)
發(fā)表于 2009-11-12 22:24:35 | 只看該作者
這個(gè)OS局限性太大,沒(méi)什么大的實(shí)際用途

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

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

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

// ---------------------------------------------------------------
// 指示燈口線(xiàn)定義
sbit LED0 = P1^0;
sbit LED1 = P1^1;

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

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

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

// ---------------------------------------------------------------
// 第二個(gè)任務(wù),除了沒(méi)有“加載另一個(gè)任務(wù)”外與第一個(gè)任務(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);
        }
}

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

看到不少研究生以RTX51_TINY應用方法做論文課題,其實(shí)教授也用不好,愿意的話(huà)在這里貼幾篇碩士論文,結果是用錯了。當然評委也是蒙古教授,學(xué)生能研究到這個(gè)程度就不錯了,畢竟中國還沒(méi)有一個(gè)博士或者教授能寫(xiě)的出來(lái)51_RTOS 呀.
13
 樓主| 發(fā)表于 2010-3-15 00:09:15 | 只看該作者
非常感謝樓上的回帖!

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

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

我想說(shuō)的是, 搞論文別搞51, 搞51別搞論文. 這甚至可以說(shuō)不是同一個(gè)行業(yè). 我也實(shí)話(huà)說(shuō)如果想解決學(xué)習或應用中的問(wèn)題, 可以適當參考一下我的帖子, 如果做論文, 不只是我的帖子, 就是這個(gè)網(wǎng)站, 恐怕也難滿(mǎn)足這樣的期望吧.
14
 樓主| 發(fā)表于 2010-3-15 00:14:46 | 只看該作者
有一陣子沒(méi)時(shí)間來(lái)發(fā)帖了, 對不住關(guān)注該話(huà)題的各位. 有機會(huì )我會(huì )把以前做過(guò)的一些應用貼上來(lái), RTX51 和 UC/OS-II的都有, 希望對各位有用.  現在的問(wèn)題是我有好長(cháng)時(shí)間不搞51了, 也沒(méi)時(shí)間整理那些東西, 非常抱歉.
15
發(fā)表于 2010-5-17 13:57:19 | 只看該作者
學(xué)習學(xué)習
16
 樓主| 發(fā)表于 2010-5-19 00:34:23 | 只看該作者
RTX51應用中的各任務(wù)多由 task 0 創(chuàng )建, 在建立各任務(wù)后, 在 task 0 的最后將該任務(wù)本身刪除: os_delete_task( 0 );
17
發(fā)表于 2010-6-30 15:23:42 | 只看該作者
好好學(xué)習學(xué)習
18
發(fā)表于 2010-7-6 21:25:22 | 只看該作者
回復17樓supergame111
值得好好學(xué)習
19
發(fā)表于 2010-7-6 21:25:47 | 只看該作者
謝謝分享,好東西
20
發(fā)表于 2010-7-7 15:45:43 | 只看該作者
不提供源代碼很不方便啊
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页