RT-Thread/STM32 0.3.0 RC1发布

发布于 2009-12-26 00:36:14
实时线程操作系统(RT-Thread)是国内RT-Thread工作室精心打造的开源实时操作系统,历时4年的呕心沥血开发,力图突破国内没有小型开源实时操作系统的局面,它不仅仅是一款开源意义的实时操作系统,也是一款产品级别的实时操作系统,它已经被国内十多所企业所采用,被证明是一款能够长时间稳定持续运行的操作系统。

实时线程操作系统从0.2.4正式版发布以来,目前已经一年多了,0.3.0开发分支在稳步进行中,亦收到来自国内十数个缺陷反馈、补丁修正,从针对STM32的beta1版本、beta2版本到LM3S的beta1版本,它总是力求发布一个稳定的版本,向着0.3.0正式版、稳定版迈进,而现在,就是RT-Thread开发工作室献上的0.3.0第一候选版,面向ST STM32微控制器(ARM公司的最新Cortex-M3构架处理器)。

The Real-time Thread Operating System is an open source real-time operating system developed by the RT-Thread Studio based in China, after four years' fully concentrated development. It is aimed to change the current situation in China that there is no domestic owned Intellectual Patent (IP) in the small scale open source real-time operating system area. It is a real-time operating system not only on the open source level but also on the commercial standard level. Having been used by more than ten companies in China, it proved to be an operating system running stably for a long time.

It has been one year since our RT-Thread official version 0.2.4 has been released. The version 0.3.0 branch is currently under development. We have received lot of feedbacks from our customers, and have been fixing bugs as well as making big progress. From the beta 1 and beta 2 versions of STM32, to the beta 1 version of LM3S, we kept developing step by step towards the stable official Release 0.3.0. Now, RT-Thread Studio is proud to announce that the first 0.3.0 release candidate edition has been released. It is developed for the ST STM32 microcontroller (the latest processor with Cortex-M3 Architecture developed by ARM).

这个版本自0.3.0 beta2版本以来的更新记录:
内核:
- 添加rt_memory_info函数用于获得系统内存信息情况;
- 添加rt_calloc函数声明;
- 添加minilibc小型C库,仅用于GCC编译环境;
- 添加GCC编译支持,采用scons构建系统;
- 添加software timer的实现;
- 更改semaphore和mutex值为无符号值;
- 更改邮箱、消息队列超时值为0,当再次计算出下一超时点为负数时;
- 更改内存池钩子函数参数;
- 移除不存在的钩子函数,添加缺少的对象钩子函数声明;
- 从IPC中移除fast_event;
- 修正event clear的bug;
- 修正memory重新分配的bug;
- 修正串口初始化的问题;
- 修正mutex_release bug;
- 修正周期性定时器在超时时停止自身的bug;
- 修正内存池初始化的bug;
- 修正设备初始化函数中激活参数的bug;
- 修正RT_IPC_FLAG_PRIO处理的bug;

LwIP轻型TCP/IP协议栈:
- 升级LwIP到1.3.1版本;
- 在LwIP中添加list_if,set_if,set_dns命令;
- 更改DHCP休眠时间为微秒;
- 修正LwIP DHCP选项问题;
- 修正lwip_select函数返回值问题;

文件系统:
- 添加ELM FatFs文件系统;
- 修正EFSL的编译警告;
- 修正closedir中不释放fd的bug;
- 修正lseek中SEEK_END处理的bug;

FinSH shell:
- finsh添加退格键的支持;
- finsh添加历史记录、符号自动完成的支持;
- 修正finsh不能使用USART2的问题;

STM32相关:
- 升级ST固件库到3.1.0;
- STM32添加LD、MD、HD、CL设备的支持;
- STM32上添加DM9000A、STM32F107以太网驱动;
- 修正rt_serial_getc函数的bug;
- 修正CM3上下文切换时被高优先级中断抢占的问题;
- 修正rt_realloc函数中关于内存使用统计的bug;
- 修正当缓冲中不存在数据时rt_serial_read的bug;
- 修正serial发送中断的bug;
- 修正Keil MDK 3.5以下版本编译错误的问题;

这个版本是0.3.0正式版本的候选版本,原使用beta1或beta2版本的用户,强烈建议更新的新的版本来。欢迎反馈您的信息给RT-Thread论坛。




RT-Thread开发工作室
2009.12.26
下载附件[rt-thread stm32 0.3.0 rc1.zip]
下载附件[RT-Thread 0.3.0 Introduction.pdf]
下载附件[RTT_STM32.pdf]
下载附件[rtthread_lwip.pdf]
下载附件[rtthread finsh shell.pdf]
下载附件[board.zip]

查看更多

关注者
0
被浏览
29.1k
24 个回答
bernard
bernard 2009-12-26
PDF版本的发布说明
(好多同学说这个PDF字体有问题,显示不了,这里重新做了一份)
shaolin
shaolin 2009-12-26
PDF文档的字体似乎有点问题,我这边打开都是空白。
bernard
bernard 2009-12-26
好的,我重装个PDF转换器,重新打印一遍吧。
ljt8015
ljt8015 2009-12-26
RT-ThreadSTM32F103ZE分支0.3.0 beta2版本 中 有 goahead

这个怎么没有了啊?
panxiaoku
panxiaoku 2009-12-26
这个要顶。。支持
bernard
bernard 2009-12-26
RT-ThreadSTM32F103ZE分支0.3.0 beta2版本 中 有 goahead

这个怎么没有了啊?


这个放到netutils组件中发布吧。
bernard
bernard 2009-12-26
RT-Thread/STM32 配置指南

STM32芯片类型的配置
STM32系列是包含多种型号的芯片,例如常用的STM32F103VB,STM32F103ZE等。在ST的官方分类上,STM32F103又分成了LD,MD,HD,STM32F105,STM32F107则叫做CL系列,所以当您使用RT-Thread时,请先确定您使用的芯片型号,在软件的配置上主要是两个地方(在工程的选项中):1、在工程Target中选择您相应的芯片型号;2、在C/C++定义上,根据您STM32芯片型号,设置STM32F10X_HD或STM32F10X_CL(实际上这个是配置ST的固件库)

STM32开发板的配置
不同的STM32芯片其差别体现在,片内Flash容量,片内SRAM容量,外设情况等。而对于STM32F103ZE这种类型的芯片,还能通过FSMC总线扩展出板载的SRAM,Nor Flash等。其中和操作系统密切相关的一个是,可用内存的多少。RT-Thread针对STM32芯片使用的是小型的内存管理算法,它需要知道它所能够使用、所能够管理的内存区域是哪一块区域(一段连续的地址范围)。

在Keil MDK中打开RT-Thread的board.h文件,其中有涉及到RAM的配置(片内的或外扩的),具体请见附件中的PDF文档。
bernard
bernard 2009-12-26
RT-Thread上的LwIP
LwIP简介
LwIP 是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈,它在包含完整的TCP协议实现基础上实现了小型的资源占用,因此它十分适合于使用到嵌入式设备中,占用的体积大概在几十kB RAM和40KB ROM代码左右。

由于 LwIP 出色的小巧实现,而功能也相对完善(包含相对完整的BSD风格socket编程),用户群比较广泛。实时线程操作系统(RT-Thread)采用 LwIP 做为默认的 TCP/IP 协议栈,同时根据小型设备的特点对其进行再优化,体积相对进一步减小,RAM 占用缩小到5kB附近(依据上层应用使用情况会有所浮动)。

在STM32上使用RT-Thread/LwIP
目前在STM32上内建了几种以太网驱动,可根据自己硬件情况选择相应驱动:
- Microchip ENC28j60
- DM9000A (16bit模式)
- STM32F107

如果使用的是前两种驱动,可以选择使用project_lwip目录中的工程,把它们都复制到bsp\stm3210目录中(重名的文件覆盖即可)。project_lwip工程的配置是:
RT-Thread Kernel + LwIP,选择ENC28J60或DM9000A做为以太网接口。

如果是ENC28J60,其硬件连接是
SPI2连接ENC28J60,GPIO B Port12做为片选,GPIO B Port0做为触发中断。

DM9000A只能通过FSMC连接到STM32上,默认是STM32F103ZE芯片,16bit模式
连接到FSMC Bank1的NorSRAM4上,基地址是0x6C000000。

RT-Thread/LwIP上的TCP例程
TCP服务端
以下是如何在RT-Thread上使用BSD socket接口的一个TCP服务端例子,当把这个代码加入到RT-Thread时,它会自动向finsh 命令行添加一个tcpserv命令,在finsh上执行tcpserv()函数即可启动这个TCP服务端,它是在端口5000上进行监听。

当有TCP客户向这个服务端进行连接后,只要服务端接收到数据,它立即向客户端发送“This is TCP Server from RT-Thread.”的字符串。

如果服务端接收到q或Q字符串时,服务器将主动关闭这个TCP连接。如果服务端接收到exit字符串时,服务端将退出服务。

TCP客户端
以下是如何在RT-Thread上使用BSD socket接口的一个TCP客户端例子。当把这个代码加入到RT-Thread时,它会自动向finsh 命令行添加一个tcpclient命令,在finsh上执行tcpclient(url, port)函数即可启动这个TCP服务端,url指定了这个客户端连接到的服务端地址或域名,port是相应的端口号。

当TCP客户端连接成功时,它会接收服务端传过来的数据。当有数据接收到时,如果是以q或Q开头,它将主动断开这个连接;否则会把接收的数据在控制终端中打印出来,然后发送“This is TCP Client from RT-Thread.”的字符串。

RT-Thread/LwIP上的UDP例程
UDP服务端
以下是如何在RT-Thread上使用BSD socket接口的一个UDP服务端例子,当把这个代码加入到RT-Thread时,它会自动向finsh 命令行添加一个udpserv命令,在finsh上执行udpserv()函数即可启动这个UDP服务端,它是在端口5000上进行监听。

当服务端接收到数据时,它将把数据打印到控制终端中;
如果服务端接收到exit字符串时,服务端将退出服务。

UDP客户端
以下是如何在RT-Thread上使用BSD socket接口的一个UDP客户端例子。当把这个代码加入到RT-Thread时,它会自动向finsh 命令行添加一个udpclient命令,在finsh上执行udpclient (url, port)函数即可启动这个TCP服务端,url指定了这个客户端连接到的服务端地址或域名,port是相应的端口号。

当UDP客户端启动后,它将连续发送5次“This is UDP Client from RT-Thread.”的字符串给服务端,然后退出。

代码详细解析见PDF附件。
bernard
bernard 2009-12-26
强大的finsh shell

注:输入一条命令后,后请回车执行,推荐使用PuTTY免费软件,串口调试助手默认不发送回车符。如果是list_thread这样的命令,请在后面加入(),这个和C语言代码是相同的

FinSH组件起因
通常,大家在接触RT-Thread时,都会以为这是一个最不重要的组件,可有可无,而且在产品中也不会用到,用了还担心是否会对系统造成不必要的开销,甚至影响到系统的稳定性、可靠性。

做为单片机系统的研发人员,可能大多使用JTAG来调试程序,出问题了就祭出仿真器的尚方宝剑,似乎宝剑一出,任何前方的艰难险阻就会因难而解。只是有一类情况(而且这种情况还是困扰系统稳定的最大的问题),问题出现的几率并不是100%的,时间上非确定,环境上非确定。例如一个系统存在内存泄漏,如何去确定它是否存在内存泄漏呢,难道等到内存全部使用完了才发觉?

FinSH在STM32版本中新加特性
目前RT-Thread在google svn的版本添加了下面的新功能:
- 命令历史记录
通过上、下键,浏览历史命令,并把当前命令切换成相应的命令。切换后可以继续编辑命令。
- 自动完成 & 获得帮助
在输入一部分命令时,例如list,继续输入TAB键,获得相应匹配的命令帮助,如果系统中只存在唯一的命令,将自动补全后面缺少的内容
bernard
bernard 2009-12-26
第一个RC1版本补丁,板载SRAM初始化函数忘记加了,直接把补丁文件传上来,覆盖同名文件即可,同样的,直接从google svn更新也能够获得这份更新。

如果您需要使用开发板上外扩的SRAM,可以使用这份补丁,否则不需要更新。
showe
showe 2009-12-30
哪里可以获得这个系统?
skyfaller
skyfaller 2009-12-31
里面的几个sample是怎么组织的?bsp\stm3210下面的几个子工程打开后,文件列表的文件路径都不对
aozima
aozima 2009-12-31
bspstm3210下面的几个子工程打开后

COPY子工程的全部文件(不含 ".svn" 目录)到上一级目录并覆盖之
zhuyongs168
zhuyongs168 2010-01-03
好东西学习一下!
max1859
max1859 2010-01-21
好的,先进来学习一下...
tzl1975
tzl1975 2010-01-30
非常奇怪,为什么我配置为外部RAM的时候,系统就会出现硬件错误呢。外部ram的容量和地址都是和默认设置一样的呀。运行后串口输出如下:
psr: 0x20000818
pc: 0x20000818
lr: 0x00000006
r12: 0x0000003c
r03: 0x20000808
r02: 0x20000808
r01: 0x00000005
r00: 0x00000034
hard fault on thread: (NULL)
thread pri status sp stack size max used left tick error
-------- ---- ------- ---------- ---------- ---------- ---------- ---

配置为内部RAM就能够正常运行

又看了一下,发现配置为外部RAM,下载完程序以后断电重启,就能运行正常了。
qianang
qianang 2010-03-03
有没有CAN的驱动???给做一个吧??
gideon518j
gideon518j 2010-03-08
版主好 建议编写完善的开发文档, 类似MSDN或者JDK帮助文档, 方便普及推广.
foodeyun
foodeyun 2010-04-29
我用LP2478测试了一下,发现FINISH shell不能工作。
我使用超级终端,当系统运行起来后,串口有输出,按下键盘,串口没有输出,按什么都没有反应。
通过仿真器发现,RT-Thread一直处于idle任务之中,无法再调度任务了。
是不是lpc2478的串口接收程序还有问题?
bernard
bernard 2010-04-29
当没有事情干的时候就进入idle线程,这个是正确的。总不可能,处理器没工作要做时,OS还自作主张偷偷摸摸干些其他事。

嗯,先确定下你的硬件没什么问题,输入是配置对的。
zyshiyan
zyshiyan 2010-08-07
支持国产软件,相信该贴是入门的接近,潜心研究一下代码先。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友