搜索
bottom↓
回复: 47

国产实时操作系统RT-Thread 0.2.4正式版

[复制链接]

出0入0汤圆

发表于 2009-3-21 20:50:28 | 显示全部楼层 |阅读模式
这个版本相比0.2.3主要是bug修正,建议使用以前版本的更新到这个版本来。这个版本绝对可以说是国内操作系统中支持平台最多的系统了,支持的平台包括:
- x86,就是一般的32位电脑,能够支持QEMU,VMware等虚拟机虚拟运行。
- Cortex M3,STM32移植
- S3C4510,S3C2410/2440
- ATMEL AT91SAM7S/AT91SAM7X/AT91RM9200
- LPC 2148/LPC 2478
- NDS掌上游戏机
(移植中开发环境不是太统一,从0.2.3延续过来的基本上采用GNU GCC编译,新一些的则采用RealView MDK编译,请自行在bsp目录下查看)

更新记录
- 修正rt_realloc复制内存不对的问题;
- 修正动态创建邮箱时空间过小的问题;
- 修正线程让出处理机时线程状态判断的问题;
- 修正LwIP默认选项中PBUF_POOL_BUFSIZE过小的问题;
- 修正GNU GCC环境中,LwIP定义的packed宏警告的问题;
- 修正IPC对象中释放时不必要的线程重调度问题(这样可以在调度器还未启动时进行动态对象的创建);
- 修正线程在等待线程间同步/通信对象时,由于超时返回,同步/通信对象中等待线程计数错误的问题;
- 添加基于RealView MDK环境下的AT91SAM7S/AT91SAM7X移植,LPC 2148/2478移植;
- 添加基于RealView MDK环境下的STM32移植,RT-Thread第一个基于Cortex M3的移植版本;(感谢由PZLPDY提供的STM32F103ZE开发板)
- 添加基于GNU GCC环境下的LPC2148移植;(由Aozima贡献)
- 添加在代码中直接导出函数和变量到finsh的宏;(RealView MDK环境有效)

0.2.x系列如果不存在比较大的问题,这个版本将是这个系列的终结版本。同时这个版本也做了比较强的压力测试,例如AT91RM9200,AT91SAM7X256的版本都做了100万个以上的TCP包冲击。完整的API参考手册放在:
http://www.rt-thread.org/rt-thread/rttdoc_0_2_3

中文文档在官方网站论坛中有,请自行查看。入门建议先看看其中的附录A和附录B。

点击此处下载RT-Thread 0.2.4正式版 ourdev_426956.zip(文件大小:2.94M) (原文件名:rt-thread-0.2.4.zip)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-3-22 00:08:28 | 显示全部楼层
好用么

出0入0汤圆

 楼主| 发表于 2009-3-22 17:49:53 | 显示全部楼层
用用不就知道了,习惯于工程方式的,用里面realview mdk类的移植,调试非常方便。习惯free的gcc类的,用gdb insight + jlink也非常方便。

出0入0汤圆

发表于 2009-3-22 20:23:22 | 显示全部楼层
占用多少资源,用在哪?

出0入0汤圆

发表于 2009-3-22 20:27:56 | 显示全部楼层
又一个OS

出0入4汤圆

发表于 2009-3-22 20:31:55 | 显示全部楼层
在前面加上“国产”二字感觉有点怪。可以直接就写成“实时操作系统RT-Thread 0.2.4正式版”。

出0入0汤圆

发表于 2009-3-22 20:32:26 | 显示全部楼层
kankan

出0入0汤圆

 楼主| 发表于 2009-3-22 21:41:07 | 显示全部楼层
To ml07077
主要用在ARM上面,ARM7TDMI,ARM946E,STM32等

资源占用情况:LPC2148 (数据是0.2.4beta的,正式版应该相差不大)
aozima 残剑饮血 编译的数据
原封不动  :Program Size: Code=44576 RO-data=1372 RW-data=752 ZI-data=6632  
选择O3测试:Program Size: Code=24996 RO-data=1372 RW-data=492 ZI-data=6636  

去掉FinSH shell:Program Size: Code=16040 RO-data=1112 RW-data=412 ZI-data=3140  
再选择O3       :Program Size: Code=10732 RO-data=1112 RW-data=152 ZI-data=3144   

和他相同的版本,我编译的数据
去掉finsh(方法:把finsh group删除掉,rtconfig.h中RT_USING_FINSH, FINSH_USING_SYMTAB, FINSH_USING_DESCRIPTION这几个宏定义都注释掉)

然后O3编译(下同):
Program Size: Code=8428 RO-data=324 RW-data=116 ZI-data=1860  

如果在rtconfig.h中再注释掉(取消掉动态内存和静态内存池支持)
RT_USING_HEAP,RT_USING_MEMPOOL
Program Size: Code=6776 RO-data=324 RW-data=84 ZI-data=1812

出0入0汤圆

 楼主| 发表于 2009-3-22 21:41:44 | 显示全部楼层
To atommann
我也感觉是啊,下次不加了,加得累。

出0入0汤圆

 楼主| 发表于 2009-3-22 21:42:17 | 显示全部楼层
原来发在ARM板块的帖子:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3213324&bbs_page_no=1&search_mode=3&search_text=ffxz&bbs_id=1032

出0入0汤圆

 楼主| 发表于 2009-3-27 14:03:50 | 显示全部楼层
贴两个图:

(原文件名:rtthread_startup.jpg)

这个是RT-Thread启动的序列,前面ARM复位中断、各个模式栈配置、复制RW清零ZI跳到main函数省略掉了(这部分可以说超出了OS的范畴)


(原文件名:thread_create.jpg)
Thread创建的序列


(原文件名:thread_delete.jpg)
Thread删除的序列

出0入0汤圆

发表于 2009-3-27 15:38:14 | 显示全部楼层
看了网站,给点建议:
建议使用wordpress/mediawiki或其它CMS系统做站点首页
提供Quick Start/Tutorial,功能介绍不错,貌似还少了个全面的特性介绍

支持一个

出0入0汤圆

 楼主| 发表于 2009-3-30 15:42:48 | 显示全部楼层
谢谢建议!web不是太熟悉,以前做了一个页面,可能可以考虑放上去。

全面特性的文档会在这一两周内发布出来(“RT-Thread实时操作系统编程指南”),并给出一些视频教程。

出0入0汤圆

发表于 2009-3-30 15:53:55 | 显示全部楼层
顶一个

出0入0汤圆

发表于 2009-3-30 20:50:30 | 显示全部楼层
期待楼主的(“RT-Thread实时操作系统编程指南”),看英文头疼

出0入0汤圆

发表于 2009-4-1 17:03:54 | 显示全部楼层
同期待

出0入0汤圆

发表于 2009-4-17 07:29:39 | 显示全部楼层
好!

出0入0汤圆

 楼主| 发表于 2009-4-17 11:38:28 | 显示全部楼层
RT-Thread/STM32F103VB 0.3.0 beta2也释放出来了,如果问题不大的话,下一步开始公布文件系统的代码了,当然编程指南文档也在更新调整中。

出0入0汤圆

 楼主| 发表于 2009-4-23 12:24:56 | 显示全部楼层
RT-Thread/STM32上文件系统的输出::

    finsh>>ls("/")
    Directory /:
    MAKEFILE                458
    UU              <DIR>
    TT              <DIR>
            0, 0x0000
    finsh>>cat("/Makefile")
    # Makefile for Device Filesystem
    #
    DFS_ROOT_DIR    = ..

    include $(DFS_ROOT_DIR)/config.mk

    CFLAGS  += -I$(DFS_ROOT_DIR)/inc

    DFS_OBJS        = $(DFS_SRC:.c=.o)

    all: $(DFS_OBJS)
    .PHONY: all

    clean :
            $(RM) *.o *~ *.bak
            $(RM) .depend

    dep : .depe     0, 0x0000

5k的cache,一般文件读写经过缓存后就不再读写SD卡了(SDIO模式),希望能够做个对比测试,看看带cache功能的文件系统速度能够达到多少。

出0入0汤圆

 楼主| 发表于 2009-5-6 22:20:30 | 显示全部楼层
-- from RT-Thread论坛
[新项目]资源丰富的RT-Thread版本
由 bernard &#187; 2009年 5月 6日 21:53

这段时间做的大多数是STM32等小资源的版本,原来RT-Thread的一些强项受限于内存方面的原因一直得不到发挥,所以这里就重新建立一个新Open Source项目(代码还是基于同一份代码,RT-Thread 0.3.0,但会着重做相关优化)。

新项目主要侧重点是资源丰富的平台,例如44b0,2410/2440等,主要不同点是内存的多少(MMU无关紧要,有当然就更好了)。按照这种类型的划分,常见的s3c44b0,s3c2410/2440,s3c6410,AT91RM9200,AT91SAM9260 /9263,PXA320,PXA168,OMAP3,Jz4740等都可归为这类。在这类系统上,RT-Thread的优势是在不损失实时性的条件下强化了图形处理及动态模块加载技术,以获得在8M~32M memory上和Linux/WinCE 64M~128M类似的效果。

同时,今天我也开始进行这种资源丰富平台的测试代码开发,所以我这边的环境应该是没问题了,是一款非常新的Marvell PXA系列芯片(与PXA168用的一个核心),包括了图形加速,高清播放能力,应该是个优秀的开发平台。如果您有类似上述提及的平台,并且对这种系统感兴趣,欢迎加入到RT-Thread大家庭来。

这个新项目主要工作包括:
- 大系统优化算法,哈希表,红黑树等。
- 动态加载技术,动态链接技术。
- 图形系统的完善,包括混合渲染,3D效果等。
- 输入设备的处理,简单的键盘,触摸屏,复杂的滚动球,多点触摸等。
- [远期] 视频/音频播放,xvid或h.264,硬解或软解。
- [远期] 基于webkit或netsurf的浏览器

出0入0汤圆

 楼主| 发表于 2009-5-6 22:27:49 | 显示全部楼层
对技术感兴趣的同学(PXA系列芯片,手持无线相关,Linux或RTOS),并有意在上海发展的,可以考虑联系我,招人啦^-^(今年有好几个名额呢)

出0入31汤圆

发表于 2009-5-7 08:55:08 | 显示全部楼层
楼上是个好消息!!!!!

出0入0汤圆

发表于 2009-5-7 09:15:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-7 09:30:07 | 显示全部楼层
关注一下

出0入0汤圆

 楼主| 发表于 2009-5-8 21:06:58 | 显示全部楼层
-= 多核的思考 from www.rt-thread.org =-

这两天写了部分代码,在PXA9xx的芯片上跑起来了。因为PXA9xx是一个异构多核平台,分为Application Core和Communication Core,都是ARM9的核心。这份代码是从Application Core启动,初始化Application Core的串口,然后Reset Communication Core。Communication Core的入口点也在这份代码中,在设置了ARM模式下各个栈后,初始化自己的串口。

开始是打算两个Core都用一个入口点,但担心到两个Core各个ARM模式下栈不能用相同的空间,所以还是把Communication Core的入口点分开了。目前两个Core的启动都没问题,串口输出也没什么问题。在设计中,两个Core会重用大部分代码,例如串口输出,只在最后的硬件输出上才选择向哪个Core的串口进行输出。中断处理部分两个Core用一份代码,因为中断控制器实际上是一个(虽然有中断具体送到哪个Core的选项,但因为代码重用,中断处理反而变得非常简单了)。等中断处理部分也调试好了,就可以把整个RT-Thread移植过去,不过还没想好是否也要让RT- Thread跨越两个核进行运行,变成一个真正意义上的多核。

RT-Thread跨越两个核运行是可能的:虽然两个核并不是绝对的相同(一个是ARM926一个是ARM946),但如果在不启用ARM926 MMU情况下,两个核心几乎可以看成是相同的,这样的运行方式,RT-Thread甚至可以看成是在一个对称处理器(SMP)系统上运行。但缺点也非常明显,这两个Core是异构的(Memory空间地址基本重合,外设也可以按统一的地址相互访问),它们的cache是分离的,也就是说,在一个核中修改一个变量,另外一个核去读取这个变量,因为第一核cache的原因,另外那个核读到的可能是以前的值。

在这种模式下跨核运行,那么两边的 cache不得不关闭,速度也就大大受到影响。再另外一种方法是,需要两边共享的全局数据单独放在一个非cache段中,同时在OS的层面制定出一套远程对象机制(这个对于多核结构的操作系统来说是必须的,见后面的解释),对远程对象自动禁用cache,这些远程对象需要包括动态申请用于交互的内存空间(前面的跨核访问的静态变量已经放在非cache段中了,但动态分配的内存没有)

远程对象,或者叫做远程IPC,实际上就是跨越核心的线程间通信
当一个核心上的线程阻塞在一个由另一个核上线程把持的资源时(例如semaphore),这个核将切换到其他就绪的线程上去(至少是IDLE线程)。但是当另外那个核上线程把这个资源释放时,会如何呢?传统的单核系统会自动寻找阻塞在这个资源上的线程,把它唤醒并做线程调度器的重调度。那么多核系统,将面临着需要通过某种特定的方式通知另外的核(打断它当前运行),让它试图做一次线程调度器的重调度。对,核与核之间的中断通知将必不可少!

上一个话题引申开来(:) ,有时候梳理梳理自己的思维非常重要,这点也是在写上面那段话想到的),多核的调度器应该如何?通常,例如用于数据处理的MIPS多核,核心与核心之间也不是平等的,会有所侧重。如果是这样,显然调度器不是一个公平的调度器。这里要说的是和实时系统相关的,多核实时调度器。单核的实时调度器具备非常强烈的占用欲望,只有线程的优先级高,处理机立马就抢占过去,容不得半点马虎。多核实时调度器也可以由它拓展而来:例如上面说的双核,应该运行整个系统中最高优先级的两个线程。具体的可以是,在出现线程抢占点时,询问各个核上当前线程的优先级,如果就绪线程优先级高于此优先级,经过中断的方式通知这个核心,让它进行线程调度器的重调度。无疑这个调度器将是公平的:每个核心都公平对待,而不分实时任务还是分时任务。似乎扯得太远了,算是工作上的一些灵感吧!

出0入0汤圆

发表于 2009-5-15 20:29:03 | 显示全部楼层
好啊,有空去研究

出0入0汤圆

发表于 2009-5-15 23:23:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-17 21:33:28 | 显示全部楼层
又一个要做多核的OS?建议还是把自己所属的做好再考虑其他的,当然有纳税人资助的就另当别论了。

出0入0汤圆

发表于 2009-5-17 23:57:16 | 显示全部楼层
【27楼】 xz6000
又一个要做多核的OS?建议还是把自己所属的做好再考虑其他的,当然有纳税人资助的就另当别论了。
-----------------------------------------------------------------------------------------
楼上纵然可以骂这个OS是个垃圾..
但最后一句,实属不该呀!
难道是"国产"二字刺激了你? 作者已说过,以后绝对不会再使用这两个字

出0入0汤圆

 楼主| 发表于 2009-5-18 08:51:39 | 显示全部楼层
如上面说的,上面的思路仅仅是一些多核的思考,并没决定RT-Thread就要往多核方向发展。只是我的工作是和多核相关的,所以上面的那些内容算是工作中的一些记录。至于其他的,清者自清吧。

出0入0汤圆

 楼主| 发表于 2009-5-20 09:21:07 | 显示全部楼层
没想到多核来得如此之快:君正的Jz4755将是一款双核CPU

出0入0汤圆

发表于 2009-5-20 09:25:55 | 显示全部楼层
Jz4755不是多核  是4750的剪裁版

出0入0汤圆

 楼主| 发表于 2009-5-20 09:50:14 | 显示全部楼层
http://www.ingenic.cn/pfWebplus/productServ/products/pfCustomPage.aspx
Jz4755          360MHz XBurst, 双核CPU          720P          Yes          LQFP176

看它的图,似乎是一款异构的双核,没datasheet,看不太明白。

出0入0汤圆

发表于 2009-5-22 22:10:25 | 显示全部楼层
【28楼】 aozima 残剑饮血
抱歉,我无意冒犯。只是说,目前自己的基础没打牢就转向多核领域似乎早了些,毕竟在嵌入式领域多核平台用得少之又少。就例如文中说的PXA处理器,应用核很少会去跑一个简单的OS,一般会是Win CE或者Linux。Marvell的一些处理器性能确实非常高,拿来当单片机使,太委屈了。

出0入0汤圆

发表于 2009-5-23 20:37:07 | 显示全部楼层
【32楼】 ffxz
对不起  是我错了  4755虽然剪裁了  管脚少了  却多了一个核  专门负责视频部分   不过这个核应该和操作系统无关

出0入0汤圆

发表于 2009-6-4 15:47:39 | 显示全部楼层
出文档了没有

出0入0汤圆

发表于 2009-6-5 12:44:53 | 显示全部楼层
0.2.4
config.local
##########
PLATFORM=sam7x
PREFIX=/home/llm/work/arm-2009q1/bin/arm-none-eabi-
BUILDTYPE=ROM
BOARD=sam7x
###########
make[3]: *** [../../lib/libcpu_AT91SAM7X.a] 错误 1
make[3]: Leaving directory `/home/llm/Download/rt-thread-0.2.4/kernel/libcpu/arm'
make[2]: *** [all] 错误 2
make[2]: Leaving directory `/home/llm/Download/rt-thread-0.2.4/kernel/libcpu'
make[2]: Entering directory `/home/llm/Download/rt-thread-0.2.4/kernel/bsp'
make -C sam7x
make[3]: Entering directory `/home/llm/Download/rt-thread-0.2.4/kernel/bsp/sam7x'
make[3]: *** 没有指明目标并且找不到 makefile。 停止。
make[3]: Leaving directory `/home/llm/Download/rt-thread-0.2.4/kernel/bsp/sam7x'
make[2]: *** [all] 错误 2
make[2]: Leaving directory `/home/llm/Download/rt-thread-0.2.4/kernel/bsp'
make[1]: *** [all] 错误 2
make[1]: Leaving directory `/home/llm/Download/rt-thread-0.2.4/kernel'
make: *** [all] 错误 2

makefile里面没有指明目标
楼主能不能给我完整的makefile
上面那个config.local还是我自己加的
应该还需要一个target
怎么写楼主给个示范阿

出0入0汤圆

 楼主| 发表于 2009-6-5 12:53:09 | 显示全部楼层
sam7x没有gcc的移植

如果要做,需要自己补上start.S

出0入0汤圆

发表于 2009-6-5 13:42:48 | 显示全部楼层
lpc214X那个GCC移植,有很多问题
1,
application.c
#include "lpc214x.h"
include 的那个文件LPC214X.h 文件名应改为小写
2,lincpu 相应目录下面根本就没有startup.S和context.S
这两个文件

这个移植也是不完整的

makefile也还需要改动
在前面指明了路径是这个
LIBCPU_ASRC  = startup.S context.S
LIBCPU_AOBJ  = $(LIBCPU_ASRC:%.S=$(OBJDIR)/libcpu_obj/%.o)
规则却是
#-------------------
$(OBJDIR)/libcpu_obj/%.o : $(LIBCPU_DIR)/%.S
        @echo
        @echo "Build RT...." $<
        $(CC) -c $(ALL_ASFLAGS) $< -o $@

这两个目录下面都没有要用到的.S文件

建议楼主做好一个相应的GCC移植
好作为参考

出0入0汤圆

发表于 2009-6-5 14:01:07 | 显示全部楼层
回楼上:lpc2148-gcc那个是我干的..(照猫画虎,我对rt-thread完全不懂)
楼主打包的时候漏了两个文件.在这个帖子:  http://www.rt-thread.org/phpbb/viewtopic.php?f=4&t=203
的4楼给补上了...Makefile也有更新...

我是在WIN下用的arm-elf-gcc 没有注意大小写,抱歉

因为我一向不喜欢楼主写的那个python来配置.所以这个Makefile和其它的移植完全不同,是完全独立的...
直接在kernel/bsp/lpc2148_gcc/目录下make即可...

出0入0汤圆

发表于 2009-6-5 14:13:57 | 显示全部楼层
居然还有如此狗血的内幕,楼主也太懒了,这个工作顺手之劳也没做.
makefile写得很清楚

打了补丁后可以了

出0入0汤圆

 楼主| 发表于 2009-6-5 14:47:53 | 显示全部楼层
ls,我也不是太懒吧,因为sam7x目前确实没做gcc移植

lpc214x-gcc则是因为一时漏掉了,所以没法补上(版本都发布出去了,要补上版本号再怎么样也得升级吧)

我写的Makefile应该是比较清晰的,但配置么,因为GUI的配置工具还没Ready,所以显得麻烦些。

出0入0汤圆

发表于 2009-6-5 14:53:20 | 显示全部楼层
:)
这世上不是一个说法叫PATCH么
你那个Makefile是很清晰,就是include几次麻烦,
还有那些define太多了,
个人觉得这样不好
你应该在每个demo下面单独定义自己的makefile和config
不要弄到一块去,
因为每个人一般都只关注1-2个CPU
装得越多越复杂越没人花时间看。

出0入0汤圆

 楼主| 发表于 2009-6-5 15:27:51 | 显示全部楼层
是的,目前这个Makefile确实有些弊病,关注这么多CPU的估计也只是我们了,发觉bsp的列表越弄越长了

define,那是少不了的,因为你还没试过其中最复杂的2410套件,这个套件可是把所有RT-Thread的包都囊括进来了,而且是自由裁剪。以前的dooloo rtos不能做到自由裁剪,RT-Thread做到了!小,能够小到极致,大,能大到功能满足大多数应用。PXA9xx的移植也运行起来了……

呵呵,欢迎patch

出0入0汤圆

 楼主| 发表于 2009-6-5 15:30:22 | 显示全部楼层
预告预告::
感谢 深圳傲世卡尔科技有限公司 提供LM3S开发板用于LM3S移植,提供STM32F107开发板用于STM32的升级支持。

所以,大约在未来几周RT-Thread会推出LM3S的支持,以及未来数数周STM32F107的支持(关键看STM32F107什么时候能够拿到)

出0入0汤圆

发表于 2009-6-5 17:53:51 | 显示全部楼层
希望bernard能将性能完善得更好!~
STM32F107开发板会以最快的速度发给您

出0入0汤圆

 楼主| 发表于 2009-6-7 12:06:12 | 显示全部楼层
今天获悉ancheel把RT-Thread应用到一个简单的抄表系统上,主要用于评估把RT-Thread使用到真实工程的可行性,目前评估下来,一周稳定运行。

本人对这种系统不是太熟悉,聊了聊,说是这种系统最好能够稳定运行一年以上,因为检修一般是一年进行一次。所以我也希望有时间能够做一个RT-Thread一年的稳定性测试,为RT-Thread的真实运用扫清障碍。可惜目前的enc28j60模块有问题,如果没什么问题的话,原来是打算让它直接接入到互联网中去测测稳定性的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 13:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表