自从认识了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