今天很高興, 收到了RT-Thread Radio套件,還有ffx和RT-Thread工作室寫的新書《RT-Thread 即時作業系統 編程指南》。 如此令人快樂的事,如此高興,實在是想不到,想不到!太多的人需要感謝了,感謝aozima,感謝ffx,感謝在努力奮鬥中的RT-Thread人!! 一切的一切盡在不言中。。。
自從認識了RT-Thread,一直在關注RT-Thread,也一直在關注RT-Thread Radio項目。其實很早就想能擁有自己的一套RT Radio 開發套件,這樣才能與RT-Thread進行最親密的接觸,融入其中。是的,如今願望終於能實現了,手頭旁邊就擺著RT-Thread Radio套件。看,多麼惟妙惟肖啊,這是真實的。而且意外的出現了,感激與興奮,無以言表。
RT-Thread Radio 套件是今天(20110106)早上收到的。拿到手時,感覺沉甸甸的。開啟一看,興奮的很,忽然有種似曾相識,又有相見恨晚的感覺了。不過心情是高興的!!
二話不說了,馬上放下手頭的工作,看看可愛的RT-Thread Radio,瞭解可愛的RT-Thread吧。。。
RT-Thread Radio (嵌入式網路收音機)是基於RT-Thread即時作業系統的一個實現。RT-Thread國人寫的(這個得強調一下,畢竟。。。)一個即時性線程系統(RTOS)。多任務,多線程,帶有TCP/IP網路通訊協定,檔案系統,圖形介面GUI介面,Finshell 系統(命令列操作介面)等嵌入式作業系統特性。 物件導向編程思想,靈活的系統裁剪特性,巧妙的線程調度演算法等,而且各開發應用資源(開發執行個體,開發源碼移植)已經比較豐富,用它來做嵌入式產品的作業系統再合適不過了^_^,
關於更多RT-Thread相關內幕/核心知識,請查看本部落格網站相關介紹和一些大家都在活躍著的網站:
中國電子開發網(ourdev)
RT-Thread即時線程作業系統:
http://www.ourdev.cn/bbs/bbs_list.jsp?bbs_id=3066
RT-Thread 官方網站(論壇):
http://www.rt-thread.org
好吧,來體驗一下RT-Thread Radio,站在電子開發人員的角度,看看那些令我們稱奇之處。Radio套件是一個網路收音機,其相關簡單介紹如下:
RT-Thread 即時作業系統核心提供了基於優先順序方式的搶佔式線程調度,並提供了完善的線程間
通訊機制。基於RT-Thread 即時作業系統核心,STM32 網路收音機軟體劃分成了數個線程分別
進行mp3 資料的擷取(從網路中或SD 記憶卡中),mp3 軟解壓,使用者介面互動處理。
RT-Thread 檔案系統組件為STM32 網路收音機提供了FAT 檔案系統的支援。STM32 網路收音機的內部資源資料(例如中文字型,Unicode 轉換碼錶等)放於內部SPI Flash。在這個SPI Flash中採用了FAT 檔案系統的儲存格式。同樣STM32 網路收音機也支援播放SD 記憶卡上的mp3、wav檔案播放。
RT-Thread 網路通訊協定棧組件為STM32 網路收音機提供了標準的TCP/IP v4 協議棧組件。依靠協議棧組件及DM9000A 100Mbps 網路介面,STM32 網路收音機把互連網上的mp3 音頻流下載下來並做一定資料緩衝(當前網路收音機支援http 格式的mp3 流和SHOUTcast 格式的mp3 流)。
RT-Thread 圖形化使用者介面組件為STM32 網路收音機提供了圖形化的人機操作介面。STM32F103ZE通過FSMC 串連SSD1289系列LCD 控制器,採用並行的方式操作3,2的液晶屏,而通過SPI 串連的觸控螢幕控制器則為網路收音機反饋相應的操作資訊。
RT-Thread Radio本身是一個開發套件,實現的源碼和硬體原理圖一切都開源(也就是說你很容易的就可以拿來做項目開發),而且還在不斷的更新,會加入各種好用實用的功能模組。除此之外,RT-Thread Radio本身是一個開發套件,上面還帶有各種介面,JTAG(SWD)、USART/CAN/I2S等等。。。
OK先體驗一下了。Radio操作很簡單而且多種多樣,有鍵盤+觸控螢幕+紅外控制可選。
選個電台聽聽吧:
由於RT-Thread中帶有RT-Thread 的網路組件模組是基於LwIP的TCP/IP網路通訊協定了,所以網路收音機也就是這樣實現了,選個豆瓣電台聽聽吧:
豆瓣歐美MHZ。
之後,用網線接到套件的網口與路由器或者交換器直接相連,
自動連接的,很快就串連上了。
音質真不錯啊。和用電腦聽一點區別都沒有,網路也不卡,甚至感覺還要好。
選中播放檔案:
然後選擇裡邊的音樂檔案。聽聽效果真的很不錯!沒想到,Radio的軟解碼和DAC音頻介面IC WM88978結合的那麼好! 不得不驚奇!
看看下面可愛的GUI圖形介面,感覺這個播放器設計得很好,有立體感,簡約而不簡單。使用者圖形介面GUI這也是RT-Thread本身帶有的一個組件啊(可裁剪)。
看看Radio硬體PCB全貌:
Radio套件還有其他功能,如可以通過USB傳送檔案,可以瀏覽圖片,和一些小遊戲。關鍵的,手頭放著這塊套件,把網線連到網路上,沒有電腦,照樣可以聽到那美妙的音樂,這就心滿意足了!!
下面我想隨便說說關於開發相關的事。作為一個嵌入式工程師,選擇一個合適的作業系統作為平台開發是很重要的事。 RT-Thread能做的可不單單是Radio網路播放器了,它能發揮的作用多著呢,因為RT-Thread本身就是那麼的優秀的。
在上面的Radio上,我們無需做什麼更改,讓我們來偷窺一下其裡邊的內幕。。。之前說了,Radio的作業系統核心是RT-Thread,讓我們通過Finshell超級命令來瞭解一下神秘的RT-Thread吧:
把串口線通過電腦了到Radio套件的UART1(串口1)上,如是XP使用者,需開啟超級終端,配置一下參數如下:
類似的如果是linux使用者,使用minicom來串連(設定不麻煩,如不懂設定,請留言),成功後應該看到以下畫面:
按上套件上的Reset重新複位一下看看吧:
可以看到以下資訊:
CPU SN: 37FFD4053150303814760843
mem test pass!!
\ | /
- RT - Thread Operating System
/ | \ 0.4.0 build Jan 3 2011
2006 - 2009 Copyright by rt-thread team
sdcard init failed
SPI File System initialized!
SD File System init failed!
LCD Device ID : 8989 data bus test pass!
/resource/remote.txt open succeed.
rem_codes decode fail,The remote disable
Fri Jan 7 11:14:01 2011
dm9000 id: 0x90000a46
finsh>>operating at 100M full duplex mode
Acquired IP address from DHCP server:192.168.1.7
TCP/IP initialized!
stat -> stopped
看到了嗎,以上就是RT-Thread的開機資訊,從上面我們知道:
硬體CPU 序號:37FFD4053150303814760843
作業系統核心版本號碼: RT-Thread 0.4.0
以及系統其它裝置的資訊,如SPI 檔案系統,SD裝置初始化資訊(由於沒有插入SD卡,所以顯示初始化失敗的資訊),顯示LCD裝置資訊,系統時間,以及硬體IP地址,網路資訊等等。這時我們在PC鍵盤上敲擊Enter健,來親密接觸一下強大的Finsh 命令列介面:
finsh>>
輸入hello()後,
finsh>>hello()
Hello RT-Thread!
0, 0x00000000
接下來我們看看系統核心各樣資訊。
查看系統中各裝置的節點資訊:
finsh>>list_device()
device type
-------- ----------
e0 Network Interface
touch (NULL)
spi0 Block Device
snd Unknown
uart1 Character Device
0, 0x00000000
查看系統用到的訊號量:
finsh>>list_sem()
semaphore v suspend thread
-------- --- --------------
nresum 000 0
nready 000 0
sem1 001 0
sem0 001 0
e0 000 0
eth_lock? 001 0
tx_ack 001 0
sem_IR 000 1:remote
topwin 001 0
shrx 000 0
heap 001 0
spi1lock? 001 0
0, 0x00000000
看看系統線程資訊list_thread():
finsh>>list_thread()
thread pri status sp stack size max used left tick error
-------- ---- ------- ---------- ---------- ---------- ---------- ---
nbuf 0x16 suspend 0x000000a0 0x00000400 0x000000a0 0x00000005 000
tcpip 0x0a suspend 0x000000c8 0x00000400 0x00000220 0x00000014 000
etx 0x0c suspend 0x00000090 0x00000200 0x00000090 0x00000010 000
erx 0x0c suspend 0x00000090 0x00000200 0x000000b0 0x0000000e 000
remote 0x1e suspend 0x00000080 0x00000180 0x00000080 0x00000002 000
key 0x1e ready 0x000000a0 0x00000180 0x000000a0 0x00000005 -02
ply_ui 0x19 suspend 0x000000d0 0x00001000 0x00000498 0x00000005 000
ply_bg 0x0d suspend 0x000000f8 0x00000800 0x000000f8 0x00000005 000
info 0x19 suspend 0x000000d0 0x00000800 0x00000488 0x00000003 000
rtgui 0x0f suspend 0x000000e8 0x00000400 0x000000e8 0x00000005 000
tidle 0x1f ready 0x00000058 0x00000100 0x00000058 0x0000001a 000
tshell 0x14 ready 0x00000088 0x00000800 0x000001b0 0x0000000a 000
0, 0x00000000
看看系統IP資訊:
finsh>>list_if()
Default network interface: e0
ip address: 192.168.1.2
gw address: 192.168.1.1
net mask : 255.255.255.0
dns server: 192.168.1.1
24, 0x00000018
如果要設定系統IP,和DNS,使用set_if() set_dns()來設定。
好了,對RT-Thread有一點感覺了吧,那就趕緊去瞭解RT-Thread,使用RT-Thread吧,儘早的把它應用到自己產品開發中去。我想是不會後悔的。因為RT-Thread是開源的,開發中有什麼問題大家一起來解決吧。能有這次機會,最後再此表示感謝!
2011-01-06