rt-thread-official/ChangeLog_CN.md

84 KiB
Raw Blame History

版本: RT-Thread 2.0.0 RC

发布时间:2014/11/4

随着RT-Thread功能越来越多如何发布版本也成为一件头疼的事情因为需要仔细对比最近三个月来的修改记录。这次的发布距离上一次beta版本依然是三个月的时间但按照发布计划已然推迟了一个月进行发布。

在这三个月中,开源社区上也发生了很多有趣的事情:

阿嘉的使用RT-Thread的四轴飞行器毕业设计惊艳亮相采用了1个STM32F4 + 8个STM32F1进行飞行控制总计9个MCU的另类实现方式沿循四轴飞行器的路线与国内匿名团队合作采用RW009 Wi-Fi控制的迷你四轴飞行器也在稳步推进过程中。

RT-Thread做为一个开源组织参与的CSDN开源夏令营结出了丰硕的果实 由hduffddybz参与的IPv6协议栈移植最新版本的lwIP-head版本移植在这次发布中已经包括进来从而能够在使用RT-Thread的小型设备上实现TCP/IP v4/v6双栈的支持 由wzyy2参与的GDB stub实现也完美的支持BeagleBoneBlack开发板和STM32F4平台 CSDN开源夏令营其他的成果例如bluedroid移植也有了初步的成果希望能够在后续的版本可能会是2.1.0系列版本包含进来。CSDN开源夏令营是一次非常棒的活动能够让学生提前进入实战了解软件开发的初步知识。对开源社区来说也是一次非常有益的社区互动活动。希望明年这个活动可以继续关注RT-Thread、嵌入式开发的同学可以关注明年的动向。

当前智能化设备是一个备受关注的领域针对这一领域的特点RT-Thread也相应的做出了积极的响应所以这个版本开始加入sensor的应用框架APP/算法 <--> sensor framework <--> RT-Thread device driver <--> 硬件外设。希望在小型化的RT-Thread操作系统基础上融合智能化相关的技术让RT-Thread成为这方面可选的OS系统之一。RT-Thread操作系统的sensor框架也尝试新的实现方式即采用C++的方式来实现当然也会考虑C方面的兼容无疑C++的面向对象特性会更好所以最终选择了C++在这个基础上也可能融合其他的一些生态技术例如ARM mbed平台上的一些社区组件技术。所以这个发布版本中既包括sensor框架也包括了C++底层的一些基础支撑。

这个版本是RT-Thread 2.0.0系列正式版本的候选版本正式版本预计会在年底正式发布距离正式版本还会加入更完善的一些支撑例如各种传感器驱动。也计划2014年11月22日在上海浦东举行RT-Thread嵌入式系统沙龙活动欢迎大家关注并参与进行RT-Thread方方面面的技术交流。

以下是这个版本的更改记录:

[内核]

  • 修正当采用高级别优化编译时idle任务中查询是否有僵尸线程的潜在bug

  • 修正memory pool中的竞争问题

  • 在console中打开设备时加入流标志进行打开

[组件]

  • 加入C++基础支撑组件。C++组件依赖于RT_USING_LIBC库当使用GCC编译器时请注意查看其中的说明文档并更改ld script

  • 修正DFS中NFS打开目录的bug

  • 更改DFS ROMFS默认romfs_root为弱化符号

  • 添加DFS中dfs_file_lseek接口中关于fs的检查

  • 移除I2C core中无用的core lock锁

  • 添加sensor framework采用C++的方式支持各种sensor

  • 修正serial框架中DMA发送的bugheyuanjie87

  • 移除SPI框架中不必要的device初始化代码

  • 完善SPI Wi-Fi网卡RW009驱动并提供RSSI相关的命令

  • 修正MSH中未定义DFS_USING_WORKDIR时更改当前目录的bug

  • 修正MSH中未定义RT_LWIP_TCP时依然定义了netstat命令的bug

  • 修正MSH中未定义RT_USING_HEAP时依然定义了free命令的bug

  • 修正finsh中FINSH_USING_HISTORY相关的裁剪

  • 加入gdb stub组件当前支持ARM Cortex-A8和Cortex-M3/4wzyy2

  • 统一不同编译器下使用LIBC的宏为RT_USING_LIBC原有的宏定义RT_USING_NEWLIB/RT_USING_ARM_LIBC需要从rtconfig.h中移除并替换成RT_USING_LIBC

  • 加入最新的lwIP分支lwip-head以提供IPv4/v6双栈的功能hduffddybz

  • YMode中打开串口设备时添加open flagarmink

[bsp]

  • 加入北京京微雅格的M7华山低功耗FPGA的ARM Cortex-M3移植aozima

  • 加入北京京微雅格的M7 EMAC以太网驱动aozima

  • AT91SAM9260分支中更改RT_USING_NEWLIB为RT_USING_LIBC

  • BeagleBoneBlack分支中加入gdb stub支持wzyy2

  • LPC176x分支中加入C++支持;

  • LPC176x分支中修正SD卡驱动返回卡信息的bug

  • 修正LPC408x分支中GCC编译时的问题

  • LPC408x分支中加入C++支持;

  • 龙芯1B分支中加入UART3驱动

  • 加入飞索半导体的MB9BF568 FM4分支移植yangfasheng

  • mini2440分支中更改RT_USING_NEWLIB为 RT_USING_LIBC

  • stm32f0x分支中移除不同编译器下的LIBC定义统一更改为RT_USING_LIBC

  • stm32f0x分支中加入串口接收溢出中断处理armink

  • stm32f40x分支中加入gdb stub支持并添加UART6驱动wzzy2

  • zynq7000分支中更改RT_USING_NEWLIB为RT_USING_LIBC

  • 加入ARM Cortex-M4芯片指令级的ffs实现

  • 修正MB0BF618S分支中缺少timer初始化的bugmike mao

[工具]

  • 移除Python 2.6中未支持的语法xfguo

  • 移除Windows平台中的startupinfo信息对Python版本兼容性更好

  • 修正CPPPATH被打乱的bug

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

版本: RT-Thread 2.0.0 Beta

发布时间:2014/8/1

v2.0.0这个版本系列是RT-Thread当前的开发分支如果要上新项目建议使用这个版本来进行预计这个版本的正式版会在年底发布。欢迎对这个版本进行测试、并反馈问题能够早日进入到稳定版。

v2.0.0版本的开发相对活跃些开源社区提供了强有力的支持如Arda贡献的TM4C129x移植Romeo贡献的frdm-k64f移植xiaonong的LPC4300移植等以及睿赛德服务公司捐赠的Zynq7000移植MB9BF618S移植以及SPI WiFi网卡的驱动代码等。

更改记录

[内核]

  • 移除rt_device_init_all()函数在系统启动时不需要再调用这个函数来初始化驱动而是由上层应用执行rt_device_open时自动进行设备初始化
  • 修正设备对象引用计数在打开设备失败依然递增的问题;
  • 增加WEAK宏用于定义/声明弱符号;
  • 在执行静态内存块分配前重置线程的errno
  • 修正timer未打开调试选项时无用的静态函数定义导致编译警告
  • 启动timer前对timer进行强制移除
  • 在执行soft timer超时函数时打开调度器锁
  • 新增块设备的自动刷新参数RT_DEVICE_CTRL_BLK_AUTOREFRESH

[工具]

  • 修正scons命令编译时选择keil mdk (armcc)编译器时,命令行太长编译失败的问题;

[移植]

  • 移除rt_device_init_all()相关的调用;
  • 根据串口框架调整相关的驱动代码;
  • 新增frdm-k64f移植FreeScale K64芯片
  • 移除K60Fxxxx移植
  • 新增LPC43xx移植NXP LPC4357芯片
  • 移除LPC176x中的组件初始化配置
  • 修正龙芯1B移植ls1bdev中链接脚本关于组件初始化部分的配置
  • 修正STM32F40x中UART3的配置
  • 修正STM32F40x中GNU GCC连接脚本中ROM/RAM大小的配置
  • 移除STM32F107中的组件初始化配置
  • 增强STM32F107 EMAC驱动性能同时加入自动查找PHY芯片地址功能
  • 重写xplorer4330NXP LPC4330芯片移植xiaonong完成
  • 新增Zynq7000 ARM Dual Cortex-A9移植
  • 新增MB9BF618S移植
  • 新增tm4c129x移植并加入相应的EMAC以太网驱动

[组件]

  • DFS: 新增根据设备对象获得其上装载文件系统路径的函数dfs_filesystem_get_mounted_path(struct rt_device* device);
  • DFS: 修正readdir在GNU GCC下的编译警告
  • DeviceDrivers新增workqueue实现
  • DeviceDrivers: 修正USB Device栈中的一些拼写错误
  • DeviceDrivers: 重写serial框架能够让串口设备驱动同时支持三种模式poll、interrupt、DMA。模式选择需要在执行rt_device_open时由open flags指定
  • DeviceDrivers: 加入更多的SPI设备驱动例如RW009的SPI WiFi网口驱动2.4G 802.11 b/g/nWEP/WPA/WPA2SoftAP/StationSPI NorFlash块设备驱动ENC28J60以太网网卡驱动
  • Finsh: list_device()命令中增加refcount的信息
  • Finsh: 修正'0'零常量无法识别的错误;
  • Finsh: mv命令实现把一个文件移动到一个目录中
  • Finsh: ifconfig命令支持对一个网络接口的基本配置
  • Finsh: 新增netstat命令用于显示当前系统中TCP连接的状态
  • Finsh: 修正当命令行太长导致的缓冲区移除的问题;
  • libc: 修正arm libc中未使用DFS时的编译警告
  • libc: 修正newlib中使用DFS时的系统调用编译警告GNU GCC下
  • lwIP 1.4.1: 默认打开LWIP_SO_SNDTIMEO以支持连接发送超时
  • lwIP 1.4.1: 修正MEMP_NUM_TCP_SEG定义错误的问题
  • lwIP 1.4.1: 加入RT_LWIP_REASSEMBLY_FRAG选项定义以支持IP分组及合并
  • lwIP 1.4.1: ethnet网络接口支持定义LWIP_NO_TX_THREAD/LWIP_NO_RX_THREAD以关闭etx/erx线程
  • lwIP 1.4.1: 用户可以重新定义RT_LWIP_ETH_MTU以修改网络中的MTU值
  • lwIP 1.4.1: 修正LWIP_NETIF_LINK_CALLBACK条件编译的问题
  • lwIP 1.4.1: 完善移植相关的注释;
  • log trace: 增加log_session_lvl接口
  • log trace: log trace中的session引用更改成常量形式
  • ymodem: 增强数据接收的稳定性;

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

版本: RT-Thread 2.0.0 Alpha 发布时间:2014/4/8

RT-Thread 2.0.0分支的第一个技术预览版本仅用于展示2.0.0发展分支的演化动向(按照roadmap2.0.0这个分支会有一部分RT-Thread和Linux互补性的技术为Linux增加更好的实时性为RT-Thread增加更多的功能性这份技术预览版正是朝着这个目标而努力),欢迎反馈建议和问题。

[组件变更]

  • msh bugfix 和功能性增强。新的 msh 在调用外部模块方面更加方便。
  • DFS nfs 的 bugfix 和内置命令的增强。ELM FatFS加入对扇区不匹配情况下的信息输出这样能够及时定位问题。
  • JS新添了轻量级Javascript引擎可以在RT-Thread中直接运行javascript脚本。
  • VMM可以在qemu中运行的 Virtual Machine Module 组件。暂时只支持 realview-pb-a8 的 bsp。
  • CMSIS版本更新至 3.20
  • driversUSB 协议栈的重构。新的框架中编写驱动变得更加容易了。

[BSP 变更]

  • beaglebone串口驱动更新
  • realview-a8添加了 VMM 组件

[编译脚本]

  • 固件加入scons --target=ua -s用于准备用户应用环境

[发布后记]

RT-Thread 2.0.0. Alpha版本相比于RT-Thread 1.2.1,新的特性主要有两部分:

  • RT-Thread + Linux双系统这部分以RealView-A8处理器(ARM Cortex-A8单核)为蓝本给出一个简单的双系统并行运行的demo在没有硬件的环境下可以使用QEMU软件虚拟方式的执行。这个链接中包含一个编译好的Linux及RT-Thread二进制包可以直接下载进行体验。

目录中有 Linux 的内核镜像 zImageramdisk rootfs.cpio.gz。可以用 qemu-system-arm -M realview-pb-a8 -kernel zImage -initrd rootfs.cpio.gz -serial vc -serial vc 来启动。启动之后 Linux 的控制台在第一个串口上(Atl + Ctrl + 3),可以直接无密码以 root 用户登录。登录之后加载内核模块: insmod rtvmm.ko 来启动 RT-Thread。RT-Thread 启动之后控制台在第二个串口上(Atl + Ctrl + 4)。第一个串口Linux shell依然可以使用第二个串口则是RT-Thread的shell。

  • JavaScript解析器这个是由牛头哥移植的可以在一个非常小资料的MCU上以JavaScript脚本方式进行编程、开发。根据这种方式也提供了RN001JS的以太网硬件模块以JavaScript脚本语言作为二次开发提供在线web(即WebIDE)进行编程并运行JavaScript程序。JavaScript作为一门轻量级、解释型的语言更容易上手配合WebIDE、及提供的一些example可以使得开发变得非常的轻松也包括一些传感器的JavaScript例子让做网页的人也可以玩硬件了

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 1.2.1 发布时间: 2014/4/8

在原有的1.2.0版本的bug修正版本也是1.2.0系列的第一个修正版本,原则上不添加任何的新功能,我们尽量会按照每个季度一个修订版本的方式推进。大家在使用的过程中有什么问题还请反馈给我们,这些问题很可能会在下个版本中修正!

以下是更改记录: [内核]

  • 用户应用,增加用户应用命令行参数支持;
  • 在挂起一个任务时,把相应的定时器也关闭;

[BSP]

  • BeagleBone加入更多串口驱动支持
  • 移除BSP中rt_device_init_all函数调用改成打开设备时自动进行初始化
  • LPC176x移除components初始化管理器
  • LPC4088修正LED驱动的问题
  • STM32F107移除components初始化管理器

[组件]

  • 文件系统ELM FatFS加入对扇区不匹配情况下的信息输出这样能够及时定位问题
  • 文件系统NFS网络文件系统修正相关的一些编译警告信息
  • 文件系统copy命令加入文件夹方式复制功能
  • 文件系统RAMFS加入到components初始化管理器中
  • 文件系统ROMFS用于转换文件的工具mkromfs.py增加Linux主机的支持
  • CMSIS更新到3.2.0版本;
  • 串口驱动框架加入serial->ops->control的调用
  • 命令行系统优化msh支持用户应用的命令行参数
  • 命令行系统当使用msh时默认使用msh >的命令行提示符;
  • TCP/IP协议栈导出更多的lwIP接口给用户应用
  • POSIX thread修正了同时使用lwIP组件时的编译警告
  • 第三方组件加入TJPGD的移植加入libpng的移植

[编译脚本]

  • 固件加入scons --target=ua -s用于准备用户应用环境

[发布后记]

  • RT-Thread携带了众多的BSP不一定能够一一保证每个分支上把RT-Thread上相应的功能使用起来。所以针对这种情况我们有一款评估用的硬件开发板RealBoard 4088在上面力求把一些相关例程都添加上这样在一个基本的BSP基础上可以对照着把其他的组件、功能添加进去
  • RealBoard 4088使用的RT-Thread版本主要以RT-Thread 1.2.1版本为主。

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 1.2.0正式版本 发布时间: 2014/1/6

实现roadmap中提到的大部分内容

1文档方面已完成《RT-Thread编程手册》同时还有论坛上jiezhi童鞋的《一起来学RT-Thread系列连载教程》 2BSP分支方面新增cortext-A8(beaglebone)cortext-R4(rm48x50)UNITY-2(SEP6200),lpc408x的移植 3组件方面

  • 加入msh(类似linux shell的风格),能够直接执行应用程序
  • 新增freemodbus 1.6.0的移植
  • 新增开源的嵌入式关系数据库SQLite 3.8.1的移植
  • 新增Ymodem协议
  • 默认使用lwIP 1.4.1

下面是自RT-Thread 1.2.0 RC版本发布以来具体的变更履历 内核:

  • timer.c - 使用跳跃表(skip list)实现系统定时器链表并在bsp中的startup.c中重新加入定时器初始化函数rt_system_timer_init()
  • rtdebug.h - 新增宏定义RT_DEBUG_IN_THREAD_CONTEXT
  • idle.c - 在函数rt_thread_idle_excute()中一次清除所有的死线程
  • scheduler.c - 新增API rt_critical_level()返回调度器上锁次数

移植:

  • cortex-m0 - 修正 cortex-m0 GCC移植中hardfault的问题点
  • cortex-r4 - 在startup后释放IRQ堆栈空间
  • cortex-r4 - 按字节长度分配堆栈空间

BSP分支

  • 新增lpc408x移植
  • bsp/stm32f0x - 增加USART1USART2驱动支持finsh支持组件初始化
  • bsp/simulator - 当RTGUI配置无效时打印错误信息
  • bsp/simulator - 默认情况下关闭RTGUI选项
  • bsp/simulator - 增加createdef.py文件来生成VS的def文件
  • bsp/simulator - 当使用VC++编译时去除_TIME_T_DEFINED的定义
  • bsp/xplorer4330 - 重命名文件Retarget.c为retarget.c,否则linux系统中编译会报错
  • bsp/xplorer4330 - 修正GCC编译链接时关于ENTRY的警告
  • bsp/rm48x50 - 新增GCC的移植
  • bsp/K60Fxxxx - 修正一个编译错误

组件:

  • dfs - 正确处理mkfs未实现的情况
  • dfs - 使用指针代替index变量
  • dfs - 在函数dfs_filesystem_lookup()将含义模糊的指针变量名称empty重命名为fs
  • dfs - 修正dfs_unmount问题点
  • dfs - 在设备打开错误时令挂载失败
  • dfs/elmfat - 令elmfatfs每次都检查扇区大小
  • net - 新增freemodbus 1.6.0的移植
  • finsh - 新增FINSH_USING_MSH_ONLY选项
  • finsh - 只有当shell设备为空时调用rt_console_get_device()
  • finsh - 修正FINSH_USING_SYMTAB未定义的错误
  • finsh - 重构control按键的处理
  • msh - 增加文件和路径名称自动补全的功能
  • msh - msh内增加执行module的功能
  • msh - msh内增加更多的命令
  • libc - 修正 _sys_read()/_sys_write()问题点
  • external - 增加开源的嵌入式关系数据库SQLite 3.8.1的移植
  • pthreads - 避免ESHUTDOWN重复定义
  • mtd_nand - 在MTD nand中增加更多的调试措施
  • mtd_nand - 修正操作MTD nand时起始块错误的问题
  • lwip-1.4.1 - 在lwIP内加入更多的RT-Thread选项设置
  • log_trace - 修正函数memmove()参数使用错误的问题
  • drivers/pipe - 增加一个control命令来获得pipe剩余的空间
  • drivers/serial - 如果读写长度为0则立即返回

例程:

  • examples - 用rt_sem_control()中的RT_IPC_CMD_RESET命令rt_sem_trytake()来清除信号量
  • examples - 始终打印输出测试结果
  • examples - 在所有的测试结束后打印输出简报
  • examples - 在TC线程中清除变量_tc_stat的TC_STAT_RUNNING状态
  • examples - 重新实现loop功能并新增finsh命令tc_loop
  • examples - 在tc_stop中增加延时由原来的延时RT_TICK_PER_SECOND/2调整为10 * RT_TICK_PER_SECOND
  • examples - 在SConscript中判断TC如果被使能在CPPPATH中增加TC路径
  • examples - 新增一个in-mem-log的例子
  • semaphore_priority.c - 在cleanup时释放信号量
  • heap_realloc.c - 检查调用realloc(ptr, 0)是否成功
  • thread_delete.c - tc线程的延时应该比tid2的延时长保证其测试过程中正常运行
  • thread_delay.c - 放宽超时判断条件因为当RT_TICK_PER_SECOND为1000时容易产生1个tick的误差
  • semaphore_static.c - 放宽超时判断条件因为当RT_TICK_PER_SECOND为1000时容易产生1个tick的误差
  • semaphore_dynamic.c - 放宽超时判断条件因为当RT_TICK_PER_SECOND为1000时容易产生1个tick的误差

其他:

  • 更新README.md

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 1.2.0RC 发布时间: 2013/10/10/ 10:19

主要说明: 该版本新增ARM Cortex-A8的支持(BeagleBone)新增UNITY-2内核的支持(SEP6200)新增Ymodem协议。

变更履历

[内核]

  • 修正rtdef.h中的拼写错误(MSC_VER -> _MSC_VER)
  • 修正scheduler.c中的调试打印输出错误
  • ipc - 在函数rt_event_recv()中增加对参数option有效性的检查
  • device - 增加统计设备引用次数的变量ref_count
  • memheap - 修正内存块分割问题点
  • memheap - 优化函数rt_memheap_realloc()
  • kservice - 函数声明使用rt_vsnprintf代替vsnprintf

[组件]

  • dfs - 修正dfs_file.c中一处变量参数类型错误的问题
  • dfs - 增加mount table
  • dfs - 在building脚本中加入ramfs的支持
  • dfs - 修正ramfs中O_APPEND write的问题
  • dfs/elm - 在mkfs中加入device_open/close
  • dfs/jffs2 - 修正jffs2_opn/opendir中的f_flag初始化问题
  • dfs/jffs2 - 修正jffs2卸载问题
  • pthread - 修正一处编译警告
  • drivers/pipe - 增加rt_pipe_init/rt_pipe_detach
  • drivers/pipe - 增加非阻塞读写和强制写模式
  • drivers/pipe - 当恢复读的时候调用函数rx_indicate()
  • drivers/pipe - 增加一个设备类型(pipe类型)
  • drivers/portal - 实现portal设备类型
  • drivers/ringbuffer - 修改一些模糊不清的函数名称
  • drivers/ringbuffer - 新增put_force和putchar_force接口函数
  • finsh - 当set_device时增加设备检查
  • finsh - 在rx_ind中增加对shell设备的自动设置
  • finsh - 增加pipe和portal设备的描述
  • finsh - 在变量定义时使用别名
  • finsh - 当关闭设备时注销rx_indicate
  • finsh - 修正命令行太长的问题
  • finsh/msh - 只有当DFS_USING_WORKDIR使能时才声明cd/pwd
  • init - 为新的组件初始化机制更新连接脚本
  • init - 增加组件初始化调试代码
  • logtrace - 整理代码,去除编译警告
  • logtrace - 增加LOG_TRACE_VERBOSE
  • logtrace - 调整log values
  • logtrace - 只有当finsh使能的时候才声明cmd
  • libc/minilibc - 在sys/time.h中增加gettimeofday的声明
  • utilities - 新增ymodem

工具:

  • building.py - 增加clang静态缝隙器的支持
  • building.py - 为Keil MDK增加buildlib功能
  • building.py - 在clang-analyze中执行'clang -Wall -fsyntas-only'
  • clang-analyze.py - 增加一个定制工具实现clang静态分析

分支:

  • 新增BeagleBone的移植
  • 新增SEP6200的移植
  • 新增K60Fxxxx的移植
  • 修正Linux中的编译错误(lm4f232, stm32f40x, xplorer4330)
  • cortex-m3 - 加强hard fault的异常处理函数
  • at91sam9260 - 更新串口驱动,使用组件中的通用串口驱动
  • at91sam9260 - 更新工程目录结构
  • at91sam9260 - 修正编译错误
  • at91sam9260 - 内嵌GPLv2许可
  • stm32f10x - 删除无用的文件
  • stm32f10x - 更新工程目录结构
  • stm32f10x - 更新工程文件
  • stm32f10x - 为使用新的组件初始化更新连接脚本
  • stm32f10x - 为使用新的组件初始化更新SD card驱动
  • stm32f10x - 为使用新的组件初始化更新DM9000驱动
  • stm32f10x - 更新串口驱动,使用组件中的通用串口驱动
  • stm32f10x - 修正rtgui初始化问题
  • simulator - 为使用新的组件初始化更新代码以便支持mingw
  • simulator - 支持Linux系统
  • simulator - 修正Linux系统中的SDL初始化问题
  • simulator - 在rt_components_init之后初始化SDL
  • simulator - 将对SDL设置的内容移入drivers/SConstruct
  • simulator - 在env中获得CORSS_TOOL和EXEC_PATH的值
  • simulator - 支持clang-analyze
  • simulator - 增加tap netif driver

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

版本: RT-Thread 1.2.0 Beta 版本

发布时间: 2013/6/30

进过开发人员三个月的努力RT-Thread 1.2.0 Beta 版本如期发布。 该版本默认采用lwIP 1.4.1协议栈USB device stack也进一步完善。加入 log_trace 子系统,加入组件初始化升级版本,加入 ARM Cortex-R 的移植。

主要变化:

  • 1新增组件初始化功能
  • 详情请看论坛帖子[新功能] 组件初始化
  • 2支持ARM Cortex-R系列处理器
  • Grissiom 完成 ARM Cortex-R 的移植目前BSP中已有TI RM48x50分支仅支持TI CCS开发环境
  • 3文件系统中新增 RAMFS
  • 4加入 log_trace 子系统
  • 5优化Cortex-M4线程上下文切换使用了浮点运算的线程才保存及恢复FPU寄存器
  • 详情请看论坛帖子[优化]cortex-m4f线程切换优化FPU寄存器
  • 6新增API rt_memheap_realloc()
  • 7重新实现ringbuffer采用镜像的方法区分“满”和“空”同时支持任意大小的buffer
  • 8内核中加入RT_KERNEL_MALLOC/RT_KERNEL_FREE/RT_KERNEL_REALLOC宏。 如果用户未定义这些宏将默认指向rt_malloc/rt_free/rt_realloc。 同时内核仅局限于使用这些宏来使用动态内存
  • 9在 building.py 中新增生成 cscope database 的选项
  • 10USB组件新增reset函数支持热插拔
  • 11scons编译系统支持CCS开发环境
  • 12USB组件新增状态信息USB_STATE_NOTATTACHEDUSB_STATE_ATTACHEDUSB_STATE_POWERED...

修复问题点:

  • 1USB组件HOST可以挂起endpoints
  • 2simulator分支修复 serial_write 问题
  • 3udisk可以被弹出
  • 4iar.py中修复绝对路径的问题
  • 5dfs_fs.h内增加dfs_mkfs()函数的申明
  • 6生成MDK工程文件的时候加入library文件
  • 7当PC不再接受数据的时候重置VCOM相应的状态
  • 8USB组件返回正确的LangID字符串长度给HOST
  • 9Cortex-M0Cortex-M3Cortex-M4上下文切换时回收系统初始化时用到的栈空间

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------

版本: RT-Thread 1.2.0 Alpha版本

发布时间: 2013/4/10

遵循2013年RT-Thread roadmapRT-Thread 1.2.0 Alpha版本发布Alpha意味着此版本为技术预览版仅用于展示RT-Thread 1.2.0未来的发展方向并不适合于开发正式产品。RT-Thread 1.2.0版本是1.1.x系列的下一个分支这个分支主要体现的是RT-Thread 1.x系列的文档情况。当然也有一些功能、代码方面的增强。

伴随着新版本的到来RT-Thread有几个重大的转变 1代码托管从google code(SVN)迁移到github(GIT) 2RT-Thread与RTGUI区分开来并成为两个独立的开发分支 3重视文档将文档建设作为1.2.0版本的首要任务来抓

内核主要变化: 1加入__rt_ffs函数用于实现32位整数中获取第一个置1的位同时调度器中位图相关算法直接使用__rt_ffs函数CPU移植时可定义RT_USING_CPU_FFS使用芯片指令完成。

2新的中断注册机制 weety加入interrupt description功能用于为interrupt增加更多的信息同时中断服务例程也可以携带用户自定义的参数类型。

  • 这部分对ARM7、ARM9、MIPS等影响很大需要对CPU移植做相应的一些修改。
  • 这部分对ARM Cortex-M系列芯片没有影响。

3调整定时器插入位置为相同超时定时的后面。

组件主要变化: 1添加lwIP 1.4.1。 2在finsh shell中加入module shell功能。finsh shell本身是一个C语言表达式的shell命令行而module shell更类似于一个传统的命令行由命令参数等方式构成。

分支主要变化: 1完善simulator分支支持RTGUI支持应用模块。 2完善at91sam9260分支的移植及驱动更新。

编译系统主要变化: 1开启省略编译时长命令特性如果需要查看编译时命令行可以使用scons --verbose查看。 2加入生成CodeBlocks工程特性。 3修正当系统安装使用Keil MDK 4.6+版本的问题。

github主要提交履历: 5646189b29: elm fatfs支持mkfs并且无需提前执行dfs_mount; mount/umount/mkfs操作也不会引起reset 22786f8817: 允许用户自定义PID和VID 0001344105: 更明确的定时器运行机制,如果两个定时器在同一个时刻发生超时,那么先开始的定时器先处理 5d68ef8ec1: 修正使用64位GCC时编译finsh过程中发生错误的问题 a4d661dcf1: 修正dfs_elm.c中一处内存泄露并且在mount fatfs失败时执行 umount fatfs操作 43228aeb9c: 修正list_tcps问题ipaddr_ntoa不是可重入的函数。 3de4b92a68: 修正AT91SAM9260分支中PHY link状态错误的问题。 1abaa0492d: 在kservice.c中增加__rt_ffs的实现。 ec6f9e3b5a: 修正在dfs.c中一处空指正的问题。 92d4c1939b: 修正at91sam9260分支上下文切换问题点避免idle任务堆栈溢出。 fb9ea5eada: 在at91sam9260分支中使能MMU并且更新SDIO和EMAC驱动。 009eccf640: 修正函数list()中错误使用strncpy的问题点。 83751c63e3: 在dlopen.c中增加出错处理。

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.1.1稳定版本 发布时间: 2013/6/30

这个版本是一个基于RT-Thread 1.1.0正式版的bug修正版相比于1.1.0版本,基本上没有添加什么新的功能,以下是修改记录: 内核:

  • 修正timer激活时插入队列顺序的问题
  • 内核中加入RT_KERNEL_MALLOC/RT_KERNEL_FREE/RT_KERNEL_REALLOC宏。如果用户未定义这些宏将默认指向rt_malloc/rt_free/rt_realloc。同时内核仅局限于使用这些宏来使用动态内存
  • 加入Miscellaneous Device类型设备
  • 当未定义RT_USING_CONSOLE时将把rt_kprintf置空以节省字符串占用空间
  • memheap对象加入rt_memheap_realloc函数接口
  • rt_exit_critical函数可以在调度器未启动时使用
  • keil工程文件生成中支持加入库文件

组件:

  • 修正lwIP 1.4.0中ipv4/ip.c中IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT宏定义错误的问题
  • 加入RAMFS内存文件系统
  • 统一working目录特性不支持的字符串位置
  • DFS中加入内存分配失败的保护
  • DFS中df输出更多有意义的信息

分支:

  • lm3s8962/lm3s9b9x 增加EMAC驱动在接收时如果内存不够丢弃数据包并重新打开EMAC中断

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 1.1.0 正式版发布 发布时间: 2012/12/31

2012年玛雅人预言的世界末日没有到来但是我们的 RT-Thread 1.1.0 正式版却如约而至。

看看 1.1.0 突出的更改及改进情况,首先 1.1.0 版本是 1.0.x 系列的一个升级版本,并未包括实质性、大的改动,改动主要体现在: 内核:强化应用模块。通过 1.1.0 开发时主要使用的平台ART、realtouch-stm32f4对应用模块进行相应的修正并真正的在 Cortex-M 系列上使用起来。

驱动框架:这部分是 1.1.0 分支所主要新增的部分,包括: =>USB device/host stack; =>SDIO 框架(支持 SDIO 设备、SD/MMC 设备) =>SPI BUSIIC device =>WDT、RTC 等设备; =>MTD NOR 及 Nand 设备;

文件系统部分也有显著的更改:由 prife 移植了 JFFS2、UFFS 以及 YAFFS2。这部分已经比国外的 ecos、RTEMS 支持更广泛。 YiHui 加入并验证了 LUA 脚本的功能。 prife 新增了全面的 Windows Simulator 的分支并把内核shell各个文件系统TCP/IP 以及 GUI 组件都运行通过。 现在虽然已经出了 1.1.0 RC 版本,但在 1.1.0 正式版出来前还会新加一个功能scons 前端工具。 这个增加的是工具部分,对 RT-Thread 代码的修改尽量少,它主要通过使用图形界面的方式来动态生成 RT-Thread 的各个工程文件,当然也包括编译功能。目的是方便于(新)用户使用,而不是直接面对命令行(命令行模式还会保留,以方便例如 RT-Thread 开发人员这样的尽情进行 Hacking。 以上摘录自《写在 RT-Thread 1.1.0 发布之前》

新版的 RTGUI 仍需要完善,此次 1.1.0 正式版本中暂不包括,之后会有单独的 RTGUI 版本发布。 想获取更多 RTGUI 信息的同学,请关注 https://github.com/RT-Thread/RTGUI

以下是自 RT-Thread 1.1.0 RC 版本发布后,详细的更新内容: 内核:

  • 在设备注册时增加设备检查步骤
  • 在 kservice.c 中修正一处未定义 compiler 时的编译错误
  • 在 memheap.c 中增加对 heap object 的互斥操作
  • 重新定义宏 RT_NULL 由 ((void*)0) 变更为 0
  • 在 module.c 中使用 RT_DEBUG_LOG 代替 rt_kprintf
  • 应用模块中删除 rt_current_module
  • 应用模块中用户可以使用 rt_module_unload() 来卸载一个模块
  • 修正函数 clock_time_system_init() 中对变量 _timevalue.tv_usec 初始化错误的问题点
  • 软件定时器中修正 next timeout 处理错误的问题点
  • 函数 rt_kprintf() 中修正一处由 Grissiom 发现的 BUG
  • 修正函数 rt_components_init() 中对 pthread 初始化问题点
  • device.c 中,如果设备不存在则返回 RT_EOK

文件系统:

  • 完善 jffs2 移植,支持 GCC 编译器(使用 NEWLIB
  • 修正函数 dfs_unmount() 中存在的一处 BUG
  • 修正函数 dfs_uffs_seek() 中存在的一处 BUG
  • 修正 DFS 中 O_APPEND 和 lseek 问题点
  • 在 DFS 中增加对 dfs_fd 的合法性检查
  • 修正 uffs 中未初始化所有设备操作函数
  • 更新 uffs支持 MTD 接口
  • 增加 DFS_NFS_MAX_MTU 选项,修复读写 NFS 时包长度超过1个 mtu 长度的 bug
  • 修复 NFS 中 seek 的一处 BUG
  • 修复向 NFS server 上创建文件/目录时路径和权限的 BUG

组件:

  • 加入 LUA 脚本的功能
  • finsh 组件中完善对 win32 移植分支的支持
  • 完善 USB device stack
  • RTC 驱动框架中新增对 RTC alarm 的支持
  • 串口驱动框架中增加对 DMA 传输的支持
  • LwIP 组件中增加对 MSC 编译器的支持
  • LwIP 组件中增加 RT_LWIP_ALIGN_SIZE 设置
  • 网络接口可以再 LwIP 初始化以后再进行初始化
  • minilibc 中增加更多的 errno
  • newlib 中完善模块加载后的退出功能
  • 新增 RT_USING_MEMHEAP_AS_HEAP 功能,可以使用 memheap 作为系统默认的 memory heap

工具:

  • 在 building.py 中支持自动生成 Visual Studio 工程
  • 新增 SConsUI 图形界面工具

分支:

  • 新增 PPC405 分支

  • 新增 NXP LPC4330 分支

  • 新增 win32 的 simulator 分支 --完善对编译环境 Visual Studio 2005 及以上版本的支持 --支持 finsh --支持 LWIP --支持 jffs2elm fatfsuffs

  • mini2440 分支 -- 支持 SDHC

  • efm32 分支 --修正 ubuntu 下 GCC 编译的错误

  • sam7x 分支 --修正使用Lwip后编译错误的问题

以下是此次版本发布时的测试环境: windows 7 ubuntu 10.04 LTS 64-bit python 2.7.3 scons 2.1.0 IAR 6.30 MDK 4.53 arm-2011.09-69-arm-none-eabi.exe mips-2011.09-86-mips-sde-elf.exe 以下是 google code SVN 中自 RT-Thread 1.0.0 发布后的统计数据,感谢各位同学做出的努力,使得 RT-Thread 1.1.0 正式版顺利发布

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.1.0 RC 发布时间: 2012/10/12

原计划在2012年9月30日发布的 RT-Thread 1.1.0 Beta2 版本变更为 RT-Thread 1.1.0 RC 现在发布了。 RC 版本的发布意味着离 RT-Thread 1.1.0 正式版的发布已经不远了在RC版本之后将不再有新功能加入。欢迎大家测试让我们一起迎接 RT-Thread 1.1.0 正式版的到来。

此次发布主要是加入了 USB device stackRTGUI 组件与 github 上的 RTGUI 开发分支保持同步;

以下是详细的更新内容: 内核:

  • 删除 rtm.c 文件
  • 修正 timer control 中 timer 标志设置错误的问题点
  • rtdef.h 中新增对 Microsoft Visual C++ 编译器的检查
  • 新增设备控制命令 RT_DEVICE_CTRL_BLK_SYNC
  • 新增图形设备控制命令 RTGRAPHIC_CTRL_FILL_RECT 和 RTGRAPHIC_CTRL_DRAW_RECT
  • 将模块的线程优先级从原来的 RT_THREAD_PRIORITY_MAX - 1 变为 RT_THREAD_PRIORITY_MAX - 2
  • module 中修正 section 拷贝问题点
  • module 中修正 模块删除失败的问题

文件系统:

  • 修正 elm fatfs 中 f_seekdir 存在的问题
  • dfs_elm.c 中新增接口 ff_memalloc() 和 ff_memfree()
  • 修正 dfs_elm.c 中函数 dfs_elm_open() 存在的内存泄露的问题
  • 修正 dfs_elm.c 中函数 dfs_elm_mount() 存在的未初始化的问题
  • 在函数 disk_ioctl() 中增加对 CTRL_SYNC 的处理
  • 新增 RT_DFS_ELM_CODE_PAGE 选项
  • DFS POSIX 中增加 O_BINARY 标志
  • 修正 ff.c 中函数 mem_cpy() 增加对字节未对齐的处理

组件:

  • 新增 USB device stack
  • components_init.c 重命名为 componets.c
  • components_init.h 重命名为 componets.h
  • 串口驱动框架中增加默认的 configuration
  • 修正 serial.c 中函数rt_serial_control() 一处变量未初始化的问题
  • 删除函数 rt_ringbuffer_get_datasize()
  • 新增 pipe 读,写,创建,销毁 API
  • 新增 data queue 的实现
  • 修正 ring buffer 越界问题点
  • 修正函数 rt_spi_release_bus() 中断言判断错误的问题点
  • rtc.c 中 time() 函数增加 open 操作
  • MTD NAND 中新增 move_page 接口添加mtd_nand成员oob_free更改成员block_size为pages_per_block
  • LWIP 中新增连接失败后关闭 sock 的操作
  • USB stack 中新增 ADK 协议的实现
  • LWIP 中函数 eth_device_init() 中当定义 LWIP_DHCP 时,设置 NETIF_FLAG_DHCP 标志;当定义 LWIP_IGMP 时,设置 NETIF_FLAG_IGMP 标志
  • minilibc 中新增接口 isspace() 和 atol()
  • 删除了重复定义的 rt_list_entry

工具:

  • 在 building.py 中新增 MakeCopy(), GlobSubDir() 和 GetConfigValue() 函数
  • 新增 wizard.py - 自动生成 SConscript 的脚本
  • 增加 --copy-header 选项,拷贝 RT-Thread 头文件到本地
  • 修正 win32 系统中 GNU GCC 路径设置错误的问题点
  • 增加 remove_components 功能

分支:

  • m16c62p 分支 --修正任务堆栈初始化时未设置任务返回地址的问题

  • upd70f3454 分支 --修正任务堆栈初始化时未设置任务返回地址的问题 --整理 BSP 目录结构,统一划分为 application 和 drivers 目录 --支持 scons + IAR 编译 --增加 IAR 工程模版

  • stm32f0x --libcpu 移植代码中增加 r8 - r11 出栈,入栈操作

  • mini2440 --使用新的 RTGUI

以下是此次版本发布时的测试环境: windows 7 ubuntu 10.04 LTS 64-bit python 2.7.3 scons 2.1.0 IAR 6.30 MDK 4.53 arm-2011.09-69-arm-none-eabi.exe mips-2011.09-86-mips-sde-elf.exe

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.1.0 Beta1 发布时间: 2012/6/30 按照 2012 年 RT-Thread roadmap经过各位同学的努力RT-Thread 1.1.0 Beta1 版本按时发布了,此版本依然是技术预览版,展示 RT-Thread 未来的发展方向,但不适合用于产品开发。 该版本主要是全面更新了 RTGUI 组件加入了新的驱动框架usb host, i2cserial, rtc组件中新增官方的 CMSIS 库;新增 Blackfin BF533 的移植,成为 RT-Thread 支持的第一个 DSP 分支。

同时恭喜 prife 同学成为 RT-Thread DFS 虚拟文件系统组建维护人

以下是详细的更新内容: 内核:

  • 新增3个APIrt_timer_next_timeout_tick(), rt_timer_check(), rt_system_module_init()
  • 修正 module 卸载的问题
  • 删除函数 rt_soft_timer_tick_increase()
  • rt_object_is_systemobject() 返回类型变更为 rt_bool_t

文件系统:

  • 修正 fd 引用越界判断错误的问题
  • posix API 中,错误返回时设置正确的 errno

组件:

  • 新增标准的 CMSIS 库,可供 ARM CORTEX 各分支使用,实现统一
  • 新增设备驱动框架USB hostI2CRTCserial
  • 新增设备驱动的 IPC
  • finsh 中新增 list_memheap 命令
  • finsh 中增加自动补全的功能
  • finsh 中增加行注释功能
  • finsh 中修正了由 Grissiom 发现的 finsh_var_delete() 中的问题
  • 组件初始化中增加 RTGUI 系统服务初始化函数 rtgui_system_server_init()
  • minilibc 中解决了未定义 RT_USING_DEVICE 时GCC 编译出错的问题
  • newlib 中解决了未定义 RT_USING_DEVICE 时GCC 编译出错的问题
  • RTGUI 组件全面更新,与 RT-Thread 1.0.x 中的 RTGUI 不兼容

分支:

  • 支持 Blackfin DSP 的移植,新增加 BF533 分支

  • 新增加 stm32f0x 分支

  • at91sam9260 分支 --新增 i2c 驱动

  • efm32 分支 --新增 emu 驱动 --更新 CMSIS 版本到 3.01

  • lpc176x 分支 --rtconfig.h 中增加 CMSIS 选择项,选择使用 BSP 内的 CMSIS 或者是 RTT 组件中的 CMSIS --更新 IAR 工程模版 --修正 IAR 工程使用的 link 文件内容

  • lpc178x 分支 --修正 GCC 编译错误的问题 --配合 RTGUI 的更新,在 application.c 中作相应的调整

  • ls1bdev --规范移植分支目录结构,分为 applications 和 drivers 两个目录 --调整 rtconfig.h支持 eclipse 的可视化配置

  • m16c62p 分支 --规范移植分支目录结构,分为 applications 和 drivers 两个目录 --增加 IAR 工程模版

  • mb9bf500r 分支 --配合 RTGUI 的更新,在 application.c 中作相应的调整

  • mb9bf506r 分支 --rtconfig.h 中增加 CMSIS 选择项,选择使用 BSP 内的 CMSIS 或者是 RTT 组件中的 CMSIS --规范移植分支目录结构,分为 applications 和 drivers 两个目录

  • mini2440 分支 --更新 keil project --修正 mini2440 移植中,上下文切换时的 bug由 yuxun2k 提交补丁 --配合 RTGUI 的更新,在 application.c 中作相应的调整 --配合 RTGUI 的更新,在 calibration.c 中作相应的调整

  • mini4020 分支 --规范移植分支目录结构,分为 applications 和 drivers 两个目录

  • sam7x 分支 --规范移植分支目录结构,分为 applications 和 drivers 两个目录

  • stm32f10x 分支 --rtconfig.h 中增加 CMSIS 选择项,选择使用 BSP 内的 CMSIS 或者是 RTT 组件中的 CMSIS --配合 RTGUI 的更新,在 application.c 中作相应的调整 --增加 IAR 工程模板

  • stm32f20x 分支 --规范移植分支目录结构,分为 applications 和 drivers 两个目录

  • stm32f107 分支 --rtconfig.h 中增加 CMSIS 选择项,选择使用 BSP 内的 CMSIS 或者是 RTT 组件中的 CMSIS

以下是此次版本发布时的测试环境: windows 7 python 2.7.3 scons 2.1.0 IAR 6.30 MDK 4.53 arm-2011.09-69-arm-none-eabi.exe mips-2011.09-86-mips-sde-elf.exe //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.1.0 Alpha 发布时间: 2012/4/16

按照 2012 年 RT-Thread roadmapRT-Thread 1.1.0 Alpha 版本发布,此版本为技术预览版,展示 RT-Thread 未来的发展方向但不适合用于产品开发此版本主要是新增了组件初始化模块加入了新的驱动框架SPISDIO新增 jffs2yaffs2 文件系统的移植eclipse 可视化配置 rtconfig.h 选项,具体的更新内容如下: 内核:

  • 完成components init模块通过 API rt_componets_init(void),统一组建初始化流程,参考 lpc176x

  • src/kservice.h 移动并重命名为 include/rtservice.h

  • 新增rt_malloc_align/rt_free_align接口用于分配、释放对齐的内存

  • 打开kservice.c中的RT_PRINTF_PRECISION宏以支持rt_kprintf中的带精度格式输出

  • 新增 memheap用于在额外连续内存块上构建一个内存堆提供新API rt_memheap_init()rt_memheap_detach()rt_memheap_alloc()rt_memheap_free()

  • 修正函数 rt_mp_init() 和 rt_mp_create() 中内存对齐的问题

  • finsh/cmd.c 中删除函数 rt_list_isempty(),统一使用 rtservice.h

  • 修正动态加载模块 module.c 中 module unload 问题

  • 新增宏 RTTHREAD_VERSION版本1.1.0的格式是10100

  • minilibc/stdint.h 中,新增 int64_t 和 uint64_t

  • 1.1.0 版本后弃用函数 rt_system_tick_init()

  • 新增 buildbot 模块,实现批量编译 scons 工程

  • 新的 DeviceDriver 框架:

  • SPI BUS及SPI Device
  • SD卡及面向非存储类型的SDIO卡
  • MTD Nand设备及MTD NorFlash设备

文件系统:

  • 新增 jffs2 文件系统移植
  • 新增 yaffs2 文件系统移植
  • 更新 uffs 到最新版本并使用MTD Nand设备接口
  • 修正 tid->error 被无故修改的问题

网络组件:

  • lwip 默认使用 v1.4.0 替换原来的 v1.3.2

分支:

  • 支持 FPGA 软核的移植,新增加 microblaze 分支nois-ii 分支

  • 新增加 pic32ethernet 分支

  • at91sam9260 分支 --更新网络驱动,新增 sido 驱动

  • efm32 分支 --新增 key 和 joystick 驱动,更新 usart 驱动

  • lm3s8962 分支 --更新 ethernet 驱动Enable reception of multicast packets

  • m16c62p 分支 --支持 SCONS/GCC 编译

  • fujistu fm3 分支 --拆分 fm3 分支为 mb9bf506r 和 mb9bf500r 两个独立的分支

  • stm32f40 分支 --更新 usart 驱动,更新 STM32F4xx_StdPeriph_Driver 到版本 V1.1.0

  • mini2440 分支 --新增 keil project

  • x86 分支 --支持 SCONS/GCC 编译

  • lpc178x 分支 --新增 LCD 驱动,增加 SDRAM 初始化

  • lpc176x 分支 --树立 RT-Thread 1.1.0 BSP 示范分支 --提供全套编译方案(KEIL 工程IAR 工程SCONS/GCCSCONS/KEILSCONS/IAR) --提供 IAR 工程模板和 KEIL 工程模板,可以通过 scons --target=iar -s 自动生成 IAR 工程 --重新定义 rtconfig.h 文件结构,实现 eclipse 中可视化配置 rtconfig.h 选项 --调整 BPS 目录结构,应用相关归入 applications 目录,驱动相关归入 drivers 目录,库相关归入 CMSIS 目录

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 1.0.4 发布时间: 2012/12/30

RT-Thread 1.0.4 是 1.0.0 版本的 bug 修正版,也是 1.0.0 系列的最终版本。 RT-Thread 1.0.x 自正式版本发布到现在已经维护了一年整时间,期间发布了 4 个修订版本,目前已经趋于成熟、稳定,完全满足商用需求。 后续的重点我们会转移到 RT-Thread 1.1.0 版本的维护以及 RT-Thread 1.2.0 版本的开发。

1.0.4 版本仅在原来的基础上对已有的功能进行修正(新功能基本上没有),相对于 1.0.3 版本的更改如下:

1修正 DFS 中 O_APPEND 和 lseek 问题点 2在设备注册时增加设备检查步骤 3finsh shell 中支持行注释 4修正函数 clock_time_system_init() 中对变量 _timevalue.tv_usec 初始化错误的问题点 5在函数 fd_get() 中增加对 dfs_fd 的合法性检查 6删除 rtthread.h 中 rt_sprintf() 函数的重复声明

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.0.3 发布时间: 2012/10/12

RT-Thread 1.0.3 是 1.0.0 版本的 bug 修正版,仅在原来的基础上对已有的功能进行修正(新功能基本上没有)。 1.0.3 版本相对于 1.0.2 版本的更改:

1lm4f232 分支更新 rtconfig.ph 2修正 timer control 中 timer 标志设置错误的问题点 3修正模块组件卸载问题点 4修正当 multi-drivers 使能后 dfs_elm_open()调用失败后存在的一处内存泄露问题点 5在 ELM FatFs 文件系统中增加 mount 检查 6修正 f_seekdir 中存在的问题点 7修正 finsh_var_delete 中的问题点 8修正 LPC178x 分支中 scons 配合 armcc 编译时发生错误的问题点 9修正 LPC176x 分支中 scons 配合 gcc 编译时发生错误的问题点 10LWIP 中函数 eth_device_init() 中当定义 LWIP_IGMP 时,设置 NETIF_FLAG_IGMP 标志

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.0.2 发布时间: 2012/6/30 RT-Thread 1.0.2 是 1.0.0 版本的 bug 修正版,仅在原来的基础上对已有的功能进行修正(新功能基本上没有)。 1.0.2 版本相对于 1.0.1 版本的更改:

1DFS 组件中,修正 fd 引用越界判断错误的问题 2DFS posix API 中,错误返回时设置正确的 errno 3LWIP 组件中,发送 mail 到 TCP 线程,用 rt_mb_send_wait() 代替 rt_mb_send() 4在 rtthread.h 中新增两个 APIrt_timer_check(), rt_timer_next_timeout_tick()

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.0.1 发布时间: 2012/4/16

RT-Thread 1.0.1是1.0.0版本的bug修正版仅在原来的基础上对已有的功能进行修正新功能基本上没有。1.0.1版本相对于1.0.0版本的更改: 内核

  • 修正rt_sem_control/rt_event_control/rt_mb_control/rt_mq_control中可能引起的任务未及时调度的问题
  • 修正rt_memmove函数的问题
  • 增加rt_malloc_align/rt_free_align的接口用于地址对齐方式的分配和释放使用rt_malloc_align分配的内存块必须使用rt_free_align接口释放
  • 修正memory pool中内存块地址对齐的问题
  • 修正应用模块卸载的问题;

文件系统

  • 修正umount时内存泄漏的问题
  • 修正文件系统中errno赋值的问题

shell

  • 修正finsh_sysvar_append添加变量的问题

libc

  • minilibc
  • 增加int64_t/uint64_t类型定义
  • newlib
  • 分离newlib与DFS的关联
  • 修正使能lwip时timeval结构体定义将使用newlib提供的类型

分支

  • Cortex-M4
  • 修正使能FPU时任务切换的问题
  • MB9BF506
  • 修正SysTick时钟中断函数名错误的问题

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 1.0.0正式版 发布时间: 2011/12/31

RT-Thread从2006年诞生到现在已经5年了历经多次版本更迭0.2.x0.3.00.3.30.4.0 beta10.4.0 beta20.4.0 RC1 内核更稳定: 增强上下文检查的功能,更多的错误检查

组件更丰富: 有文件系统有RTGUI支持TCP/IP协议栈支持动态模块加载支持posix在使用GCC时可以打开newlib选项支持全套C标准运行库

分支移植更完善: 支持ARM7ARM9ARM Cortex-M3ARM Cortex-M4MIPSAVR32V850E等32位MCU同时也支持瑞萨的16位MCU M16C系列

所以我们很高兴可以发布RT-Thread 1.0.0版本了,此次正式版的发布离不开各位同学的支持, 感谢李恒发起的线下网友聚会 感谢上海浦东软件平台公司提供主题沙龙场地 感谢grissiom翻译的coding style文档,及提交的RTGUI相关补丁 感谢onelife维护EFM32分支 感谢。。。

与RT-Thread 0.4.0 RC1比起来RT-Thread 1.0.0主要有以下的更新内容:

内核:

  • 强制newlib组件配合GCC使用否则将在编译时提示错误
  • 修正object名字复制问题
  • 新增RT-Thread I/O error code(RT_EIO)
  • 新增三个设备类型RT_Device_Class_SPIBUS, RT_Device_Class_SPIDevice, RT_Device_Class_SDIO
  • building.py ---- 新增SrcRemove函数 ---- 新增MergeGroup函数 ---- 修正源文件含有中文名的问题点
  • 增加coding style说明文档

组件:

  • DFS ---- 修正elmfs移植中statfs问题 ---- 修正dfs_elm.c中rename问题 ---- 修正dfs_file.c中rename问题 ---- 修正lseek下溢问题 -LWIP ---- 更新finsh命令list_if,set_if支持multple interface -RTGUI ---- 定义宏RTGUI_NOTEBOOK_TAB_WIDTH代替原先使用的魔数 ---- 修正ack_mb在错误发生时没有detach的问题 ---- 修正RTGUI_USING_MOUSE_CURSOR选项打开时编译出错问题 ---- 优化notebook代码结构提高_rt_notebook_ondraw()执行效率 ---- 优化notebook.c中mouse事件处理
  • 修正zmordem一处语法错误

例程:

---- RTGUI例程中增加notebook的demo ---- 新增mem_test例程 ---- 更新kernel测试例程

分支:

ARM Cortex-M3系列芯片的移植统一使用/libcpu/cortex-m3 ARM Cortex-M4系列芯片的移植统一使用/libcpu/cortex-m4

  • 新增stm32f40x分支
  • 新增lm4f232分支
  • 完善m16c ---- 在汇编中正确使用BYTE操作指令操作rt_thread_switch_interrupt_flag变量 ---- 修正scons配合IAR编译出错的问题
  • 完善lm3s9b9x分支 ---- 更新eth驱动 ---- 新增sdram驱动
  • 完善stm32分支 ---- 更新enc28j60驱动修正无响应问题点
  • 完善stm32f10x分支 ---- 更新touch驱动 ---- 更新eth驱动 ---- 更新rtc驱动 ---- 修正DMA_clear_Flag设置错误的问题
  • 完善stm32f20x分支 ---- 更新eeprom驱动 ---- 更新RTC驱动 ---- 新增SPI FRAM驱动
  • 完善efm32分支 ---- 更新CMSIS和efm32lib到2.3.2
  • 完善lpc24xx分支 ---- 增加异常处理函数
  • 完善lpc2148分支 ---- 修正scons+keil编译出错问题 ---- 新增thumb模式的移植代码

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 0.4.0 RC1 发布时间: 2011/10/1

RT-Thread经过三个月时间的开发测试SVN有100多次更新RT-Thread 0.4.0 beta2顺利演变为RT-Thread 0.4.0 RC1。

RC版本的发布意味着离RT-Thread 0.4.0 正式版的发布已经不远了在RC版本之后将不再有新功能加入。欢迎大家测试让我们一起迎接RT-Thread 0.4.0 正式版的到来。

更新履历 内核:

  • ARM cortex M3支持应用模块
  • RT-Thread中实现errno
  • 任务开始时调用任务调度函数
  • 重写应用模块的memory allocator
  • 修正当前任务被抢占时调用rt_thread_exit()出错的问题
  • 修正函数rt_mb_send_wait()禁止修改当前任务的error
  • 修正一处拼写错误 -- rt_thread_switch_interrput_flag -> rt_thread_switch_interrupt_flag
  • 内核代码统一代码风格
  • 内核代码统一使用unix换行符'\n'

组件:

  • Lwip -- 重新设计Lwip 1.4.0 ethernetif接口函数及初始化流程 -- 新增eth_device_linkchange()函数 -- 修正在中断处理中调用rt_mb_send()时当前任务的error会被修改的问题 -- 重写sys_arch_protect()函数,在该函数内关中断并且关调度 -- 修正Issue 11(http://code.google.com/p/rt-thread/issues/detail?id=11) -- 优化netio代码 -- 新增finsh shell命令list_tcps() -- 更新Lwip 1.4.0,兼容旧的驱动程序

  • RT GUI -- 修正画点时坐标超出DC缓存的问题 -- 修正函数dc_buffer_fill_rect()中,前后背景颜色显示错误的问题 -- 修正hz字体解除问题 -- 修正中文字体显示错误问题 -- 修正list控件的键盘事件处理问题

  • dfs -- 修正dfs_romfs_lookup(), dfs_romfs_open()及dfs_romfs_lseek()实现中的问题

  • finsh -- 修正node分配失败的问题

分支:

  • 新增龙芯LS1B分支 -- 支持finsh -- 支持RT-Gui
  • 更新AT91SAM9260分支 -- 支持Keil MDK编译 -- 针对Lwip API的变更相应的更新了EMAC驱动
  • 更新stm32f107分支 -- 更新eth驱动 -- 更新uart驱动
  • 修正renesas M16C移植 -- 完善移植代码 -- 用C实现上下文切换修正汇编代码中的参数传递寄存器不确定的情况
  • 修正NEC V850E移植 -- 完善移植代码 -- 用C实现上下文切换函数用C语言实现代替之前的汇编实现
  • 更新EFM32分支 -- 新增Accelerometer驱动 -- 新增ethernet驱动
  • 更新mini2440 -- 新增x35 LCD驱动 -- 完善touch驱动
  • 更新avr32uc3b0分支 -- 支持scons
  • 更新lpc24xx分支 -- 支持thumb模式
  • 更新FM3分支 -- 增加scons+iar的编译支持
  • 更新pic32ethernet分支 -- 完善移植代码 -- 增加uart驱动
  • 更新lpc1114分支 -- 修正systick设置问题
  • 更新stm32f20x分支 -- 增加I2C驱动 -- 增加SD卡驱动 -- 增加RTC支持

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 0.3.4 发布时间: 2011/12/31

0.3.x系列的又一修订版本

  • 更新STM32分支enc28j60驱动修正无响应问题
  • 修复mini2440编译出错问题
  • 修复lpc2478分支scons编译出错的问题
  • 修复RT_LWIP_DNS重复定义问题
  • 统一kernel部分的代码风格
  • 更新版本号为0.3.4

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 0.3.3 发布时间: 2011/9/30

与上一版本比较RT-Thread 0.3.3版本内核只有一处修改,该版本的发布只有一个目的:稳定! 建议所有使用RT-Thread 0.3版本的用户升级到RT-Thread 0.3.3。

内核:

  • 修正接收侧线程 error 号被中断服务例程错误更改,从而出现从邮箱中接收消息会发生重复接收的问题

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread 0.3.2正式版 发布时间: 2011/7/4

帖子由 lgnq ? 2011年 7月 4日 15:46 发布说明

RT-Thread 0.3.2是RT-Thread 0.3.0发布以来的第二次修订版本,虽无新特性增加,但稳定性有所提高,建议用户及时更新。

这个版本支持的硬件平台数量与0.3.0正式版本的一致:

  • ARM Cortex-M3系列STM32LM3S以及LPC1766。
  • ARM7TDMI系列LPC2148LPC2478AT91SAM7X256AT91SAM7S
  • ARM920T系列S3C2440mini2440
  • IA32QEMU及真实的x86机器

修正的问题包括:

  • 内核中使用0.4.x系列的定时器实现
  • 内核中当不使用RT_USING_DEVICE即设备模型时编译错误的修正
  • 内核中添加邮箱满时发送线程挂起等待的接口rt_mb_send_wait。
  • 内核中修正在为空的memory块上进行rt_realloc时的问题
  • 内核中rt_mp_create函数添加对申请失败的处理
  • 内核中rt_thread_detach函数主动对线程状态更改为CLOSE状态
  • ELM文件系统中支持多个驱动器
  • ELM文件系统中支持超过512字节大小的扇区
  • LwIP协议栈移植中使用rt_mb_send_wait来做为邮箱发送接口
  • 修正lm3s网卡驱动的问题
  • 修正STM32F107网卡驱动的问题
  • 修正lpc176x网卡驱动的问题
  • 修正libcpu/arm/AT91SAM7X/interrupt.c中一处语法错误
  • 完善RT-Thread代码注释

RT-Thread在Google SVN服务器上的开发分支亦做了相应调整 原来的branches/rtt_0_3_2分支更改为branches/rtt_0_3_3。

代码:http://code.google.com/p/rt-thread/downloads/detail?name=RT-Thread-0.3.2.zip

文档: RT-Thread实时操作系统编程指南与0.3.0正式版的相同以后会逐渐由API说明文档替代朝着正规化的方向发展。

(*) 希望使用新特性的开发人员请关注后续0.4.0版本的发布情况0.4.0版本添加了很多的新特性例如16位的瑞萨M16分支大端模式的AVR32分支以及MIPS分支等。

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 0.4.0 beta2 发布时间: 2011/7/4

这是RT-Thread 0.4.x系列的第二个测试版本。这个测试版本依然更多的面向测试目的不建议直接应用到实际的产品中。RT-Thread 0.4.0的非正式版本依然沿用GPL v2许可证进行发布欢迎测试。

RT-Thread 0.4.0版本初始提出的几个功能亦基本达到提供了相对完善的POSIX thread接口动态库载入接口libdl以及应用模块支持。这些新功能的加入使得RT-Thread能够初步的兼容于POSIX标准。

自RT-Thread 0.4.0 beta1版本以来的更改 内核:

  • 增加邮箱满时发送线程挂起等待的接口rt_mb_send_wait
  • 增加RT_USING_CONSOLE选项
  • 新增4个设备类型(RT_Device_Class_Graphic, RT_Device_Class_I2C, RT_Device_Class_USBDevice, RT_Device_Class_USBHost)
  • 修正未定义RT_USING_DEVICE即设备模型时编译错误的问题

组件:

  • net ** 新增LWIP 1.4.0的移植 ** LwIP协议栈移植中使用rt_mb_send_wait来做为邮箱发送接口
  • minilibc ** 增加 malloc, realloc, free, calloc接口
  • newlib ** 增加跟多的数学函数(coef, horner, sqrt, ln, exp, pow)
  • pthreads ** pthreads脱离对newlib的依赖
  • 文件系统完善 ** fatfs版本由原来的R0.07e升级到R0.08b ** 修正fatfs目录搜索不正确的问题
  • finsh ** 修正finsh GCC编译时variable section end错误的问题 ** 修改list_module_obj命令为list_mod_detail
  • RT-Thread/GUI ** 重新设计RTGUI图形驱动接口 ** 修正多边形填充问题

分支: 在原有的基础上ARM7ARM9ARM Cortex-M3, IA32,新增了MIPSAVR32大端模式瑞萨M16C/62P16位瑞萨原NECV850E

  • 新增at91sam9260分支
  • 新增avr32uc3b0分支
  • 新增efm32分支
  • 新增fm3分支 ** mb9bf500r分支 *** 支持RTGUI ** mb9bf506r分支 *** 支持NAND FATFS
  • 分离lm3s分支 ** lm3s8962分支 ** lm3s9b9x分支
  • 新增lpc122x分支
  • 新增m16c62p(Renesas M16C/62P)分支 ** 支持IAR for M16C编译 ** 支持scons+IAR编译
  • 新增mini4020分支
  • 新增nios_ii分支
  • 新增pic32ethernet分支
  • 分离stm3210分支 ** stm32f107分支 ** stm32F20x分支 ** stm32f10x分支 *** 更新 STM32F10x_StdPeriph_Lib_V3.5.0
  • 新增upd70f3454(Renesas V850E)分支

tools:

  • 精简tools目录只留下building.py其他工具转移到www.rt-thread.org
  • 进一步完善building.py ** 修正编译mini2440工程时提示the command line too long的问题 ** 自动创建IAR工程 ** 自动创建MDK4工程

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 0.4.0 beta1 发布时间: 2010/11/30 自RT-Thread 0.3.0正式版发布以来经过开发人员密集的整8个月开发大众用户的积极反馈、测试终于完成了RT-Thread 0.4.x系列的第一个测试版本。这个测试版本依然更多的面向测试目的不建议直接应用到实际的产品中。RT-Thread 0.4.0的非正式版本依然沿用GPL v2许可证进行发布欢迎测试。 RT-Thread 0.4.0版本初始提出的几个功能亦基本达到提供了相对完善的POSIX thread接口动态库载入接口libdl以及应用模块支持。这些新功能的加入使得RT-Thread能够初步的兼容于POSIX标准。 自RT-Thread 0.3.0版本以来的更改: 内核:

  • 添加应用模块支持;支持两者应用方式:.mo 符号预解析应用;.so 符号未解析应用。.so应用需要在加载时动态解析符号。能够执行本地文件系统的应用模块也能够执行网络文件系统上的应用模块。
  • 修正在rt_realloc参数中传入一个NULL指针时分配失败的问题。修正slab管理器中对0xffffffff尺寸内存分配的问题
  • 修正OS节拍数溢出的问题。(charlie weng提供相应的patch)
  • 块设备中读写偏移、大小等都更改成按块为单位;
  • 更改rt_device中成员private名为user_data
  • 线程TCB中添加cleanup域它将在线程运行结束时回调。

组件:

  • 添加newlib移植当前仅能够支持GNU GCC编译环境
  • 添加POSIX thread兼容接口支持barriercondmutexrwlockspintls等采用IEEE Std 1003.1, 2004 Edition为参考进行实现
  • 添加libdl兼容接口能够使用dlopendlsymdlclose等接口动态加载库
  • 文件系统完善
  • 对设备虚拟文件系统代码部分进行调整,精简;
  • 修正device file system中struct stat的问题能够兼容于newlib、minilibc、Keil MDK
  • 修正dfs_filesystem_lookup函数中空项操作的问题
  • 增加fstat接口文件系统实现中增加mkfsstatfs接口以获得文件系统相关的信息。
  • 添加romfs文件系统可以采用mkromfs.py脚本生成相应的ROM文件系统
  • 添加devfs文件系统增加/dev/console设备它是一个虚拟设备用于标准输入、输出、错误等
  • 添加NFS v3客户端文件系统可以配合FreeNFS/Linux NFS使用以访问主机上的目录和文件
  • elm fat文件系统
  • 添加非512扇区的宏定义
  • 添加卸载的功能。
  • 修正重命名的问题;
  • RT-Thread/GUI
  • 增加bmp图像格式支持
  • 原来的hardware dc更改为client dc重写新的hardware dc新的hardware dc绘图速度会更快。
  • 加入了非等宽字体支持。
  • 加入TTF字体支持但内存空间占用估计比较大对于unicode的问题还存在些问题。
  • 修正filelist_view控件析构的问题。
  • 对DC操作进行调整完善 (由richard lion完成)

分支: STM3210

  • 完善SDIO驱动并提供超过4G卡的支持 mini2440
  • 能够使用0.4.0分支上所有的特性能够开启newlib支持能够开启POSIX thread支持能够开启libdl支持。 增加LPC的ARM Cortex-M0/3系列移植分支 增加新唐的ARM Cortex-M0 NU1xx分支 增加龙芯I SoC3210分支(MIPS 32位体系结构)

<其他分支例如avr32瑞萨m16SEP4020等分支由于分支维护人来不及准备此次发布未包括在内可以自行从RT-Thread的google svn中获取>

移植的组件:

  • wyoujtg完成国内知名的开源项目FTK移植。FTK是一套极为绚丽完整的GUI系统。

文档: RT-Thread 0.4.0在线API文档 下载: RT-Thread 0.4.0 beta1下载

【RT-Thread 0.4.x分支的额外说明】似乎很多人误以为0.4.x分支是面向资源丰富的平台不太适合类似STM32这样的CM3平台。这里要说的是0.4.x分支绝大部分是兼容0.3.x分支并且也非常适合于STM32等面向微控制器的硬件平台。例如POSIX thread部分它能够运行于STM32平台如果使用Code Sourcery GCC工具链同样能够支持其中的newlib C库。这部分同样对内存的需求非常少并且后续会移植到其他编译环境下。0.4.x分支一些特性不适合于微控制器的包括

  • 应用模块加载。
  • FTK GUI。

对于Cortex-M3等平台我们目前也在对 应用模块特性 进行评估,看看从技术上是否能够从另外的途径解决动态运行速度慢的问题。 //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 0.3.1正式版 发布时间: 2010/9/29 是发布0.3.1正式版的时候了在0.3.1的维护过程中得到了大家很多的反馈其中一些bug及修正也是由大家指出这里感谢大家一直以来的支持RT-Thread的发展进步离不开大家的帮助谢谢 相较RT-Thread 0.3.0版本0.3.1版本是一个bug修正版并无添加新的特性(*)使用上与0.3.0版本完全兼容。建议使用RT-Thread 0.3.0版本的用户如果需要长时间不间断运行大于1年请切换到0.3.1正式版本来。

这个版本支持的硬件平台数量与0.3.0正式版本的一致:

  • ARM Cortex-M3系列STM32LM3S以及LPC1766STM32中新添加STM32F100系列芯片支持。
  • ARM7TDMI系列LPC2148LPC2478AT91SAM7X256AT91SAM7S
  • ARM920T系列S3C2440mini2440
  • IA32QEMU及真实的x86机器

修正的问题包括:

  • 修正OS Tick溢出的问题。

  • 修正定时器有时会被延期操作的问题。

  • 修正heap分配器尾部数据浪费的问题。

  • 修正rt_realloc时内存可能被浪费使用的问题。

  • 调整各内核对象结构使得内存布局更合理。

  • 修正ELM FatFs接口中rename的问题。

  • 修正LwIP中IGMP的问题。

  • 完善当发送mail失败时LwIP的处理。

  • 增强、完善RT-Thread/GUI的功能。

RT-Thread在Google SVN服务器上的开发分支亦做了相应调整 原来的branches/rtt_0_3_1分支更改为branches/rtt_0_3_2。

代码:见附件。

文档: RT-Thread实时操作系统编程指南与0.3.0正式版的相同以后会逐渐由API说明文档替代朝着正规化的方向发展。

STM32分支

请注意STM32分支的工程文件组织方式和0.3.0版本中的不一样原来的几个目录是不相独立的工程而0.3.1中为了避免混淆,把它们变成了独立的工程(注因为0.3.1与0.3.0是完全兼容的所以不一定要更新BSP目录)。

project_107是针对STM32F107芯片的工程project_valueline是针对STM32F100芯片 STM32 Discovery开发版的工程其余的芯片默认是STM32F103ZE。如果要修改成自己所需要的芯片请遵循一下步骤

  • 在board.h文件中修改STM32_SRAM_SIZE宏定义它的单位是KB所以针对于STM32F103VB类型的芯片只需要把它定义成20即可。
  • 在使用Keil MDK打开board.h文件时也能够使用Keil MDK带的界面配置方式进行配置。
  • 在工程选项的C编译器预定义上修改成和芯片匹配的类型例如STM32F10X_HD、STM32F10X_MD等。

另外STM32分支支持IAR编译器在使用IAR ARM时如果你使用了finsh请注意最好在链接配置文件中加入 keep { section FSymTab }; keep { section VSymTab }; 它的作用是为了保留finsh中使用到的符号表因为这些符号表仅在命令行被调用所以他们可能在最后生成目标文件时被优化掉。

具体请看stm32f10x_flash.icf文件。

LM3S分支

LM3S分支默认采用LM3S8962芯片针对的是TI这次发的48¥ 8962开发板。

LPC176x分支

工程默认包括finsh shell文件系统网络协议栈的支持。

(*) 希望使用新特性的开发人员请关注后续0.4.0版本的发布情况0.4.0版本添加了很多的新特性例如16位的瑞萨M16分支大端模式的AVR32分支以及MIPS分支等。

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread 0.3.0正式版 发布时间: 2010/3/30

相较以前的RT-Thread 0.3.0 RC版本无大的修改console调整为支持设备的模式但依然建议所有使用0.2.x、0.3.0 beta/rc版的用户都开始使用0.3.0正式版。当前版本支持如下移植分支:

  • ARM Cortex-M3系列STM32包含STM32F107LM3SLPC1766
  • ARM7TDMI系列LPC2148LPC2478AT91SAM7X256AT91SAM7S
  • ARM920T系列S3C2440mini2440
  • IA32QEMU及真实的x86机器

RT-Thread在Google SVN服务器上的开发分支亦做了相应调整 原来的开发主干trunk更改为branches/rtt_0_3_1 当前的开发主干trunk作为当前的RT-Thread 0.4.x开发分支继续前进。

RT-Thread 0.3.1版本将在目前的0.3.0正式版上进行补丁修正并且当0.4.x分支一些有用的、稳定功能也会迁移会0.3.x 分支。

后续会陆续加入一些AppNotes。

补充说明: STM3210分支 Keil MDK工程文件位于bsp\stm3210目录下仅是基本的led工程 系统默认采用STM32F103ZE芯片其他芯片需要修改的位置

  • 根据芯片片内SRAM大小修改board.h文件
  • 如果是STM32F107请直接使用project_107目录下的工程(见下面详细的使用说明)

同时在bsp\stm3210目录下还存在多个以project_开头的目录这些相应的针对不同类型的工程例如project_finsh针对在RT-Thread中使用finsh shell的情况。当需要使用这些工程时需要把相应project_xxx目录中的文件都复制到 stm3210目录中(直接同名覆盖的方式)然后再行打开stm3210目录下的工程文件。

LM3S分支 LM3S的Keil MDK工程文件放在bsp\lm3s目录下针对LM3S8962芯片(因为这个TI送的是带这个芯片的开发板),需要在 board.h中 // For lm3s8962, it should be SYSCTL_XTAL_8MHZ #define LM3S_XTAL_TYPE SYSCTL_XTAL_6MHZ

把如上这个定义更改为SYSCTL_XTAL_8MHZ否则得话会锁死JTAG。

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread/LM3S 0.3.0 RC1版发布 发布时间: 2010/1/4

实时线程操作系统是一款面向实时领域的操作系统,这个和通常的通用操作系统有着很大的不同。通用操作系统通常面对的是日常应用,例如打开浏览器上网,播放音乐,采用字处理软件编辑文档。 在古老的时代通用操作系统一般只能处理一件事而随着计算机技术日新月异的发展硬件更新换代上GHz主频、上GB内存、多核技术走进普通人的生活中通用操作系统也就朝着并行化计算的方向发展。通用操作系统更多讲究的是对这并行事务处理的公平性上例如一个个民工在不同的窗口进行排队购买火车票好的调度系统能够保证每个民工的公平性。 实时系统和这种通用系统有很大的差别。实时系统指的是当外界有系统关注的相应事件发生时系统能够在指定的时间内deadline进行正确的响应。用于实时系统的操作系统就叫做实时操作系统。从系统的定义也可以看得出实时操作系统和通用操作系统在事务的处理上有明显的区别实时操作系统有非常强的针对性对相应的事件力求做到这固定的时间内进行响应而通用操作系统则需要努力地做到各个事务的公平性某些系统也会非常注意数据的吞吐量例如网络服务器。 实时线程操作系统英文名RT-Thread面向的正是这么一类的实时系统因为其小型的特点也可以看成是一个嵌入式操作系统嵌入式系统一般是针对一些专有目的而存在比较吝啬于成本。而基于专有目的的特点也注定了嵌入式系统或多或少的具有一些实时性的特点。这种系统可以用于自动售票机税控机移动通信设备mp3/mp4等便携式音乐设备飞行器控制车体导航控制打印机复印机各类监控设备路由器ADSL机顶盒等网络设备医疗设备等等。 TI流明LM3S系列芯片是基于ARM Cortex M3 v7构架的32位芯片其中LM3S S6000S8000S9000系列芯片携带网络功能。RT-Thread的标准内核可以运行在除LM3S S100系列外的所有系列芯片上。这次RT-Thread针对于LM3S进行移植验证并经过压力测试的是LM3S6918芯片芯片携带64K片内静态内存256K闪存频率是50MHz。在这个平台上RT-Thread支持的特性包括 ? 完善的实时核心

  • 面向对象方式的实时核心但依然保留了C语言的优雅、小巧风格
  • 默认32线程优先级的全抢占式实时内核亦可配置成256线程优先级相同优先级线程时间片轮转调度
  • 相同优先级线程实施时间片可配置的分时时间片轮转调度;
  • 线程间同步机制:信号量和防止优先级翻转的互斥锁;
  • 完善高效的线程间通信机制,包括邮箱,消息队列和事件;
  • 支持线程挂起和唤醒的固定内存块管理及线程安全的动态内存堆管理;
  • 向上层提供基于名字的统一接口设备驱动模型;

? FinSH shell命令行

  • 命令即C代码的命令行方式
  • 直接在命令行中调用系统内核函数;
  • 直接在命令行中访问系统全局变量;
  • 历史记录及命令自动补全;

? 面向小型设备的虚拟文件系统

  • 向上层应用提供POSIX风格的API接口
  • 支持多种具体文件系统实现;
  • LM3S分支内置SD卡驱动程序

? LwIP轻型TCP/IP协议栈

  • 标准的BSD Socket接口
  • IP、ICMP、UDP、TCP标准协议支持
  • DNSDHCPPPP协议支持
  • TFTP、HTTP、FTP应用协议支持见netutil组件
  • LM3S分支内置以太网驱动

? 开发环境支持:

  • GNU GCC (scons做为构建工具)
  • Keil MDK

以上是RT-Thread/LM3S 0.3.0的特性这些特性在RT-Thread 0.3.x分支中不会有大的改变。

技术指标及优势 看完RT-Thread的特性后看看一些其他有吸引力的地方。

首先是体积。看网上有网友说RT-Thread是否是基于Linux或者直接使用Linux这里不得不说Linux并不是任何事情都做得到它做不到在数KByte的内存占用上依然能够非常好的运行而这类设备非常多。例如LM3S这类芯片本身只有大约64K或更少的片内静态内存另外就是闪存通常在128K - 512K之间。外扩内存基本上不太可能这类芯片是完全的成本敏感型芯片硬件决定了它已经不能外扩内存LM3S最新款的已经支持能够外扩内存了不过手上还没拿到

看几个体积指标: RT-Thread标准Kernel标准Kernel指得是没经过剪裁的内核 9.5K只读数据和执行代码占用1.5K内存占用(通常只读数据和执行代码放置在闪存中)

包括上面说的完整组件即标准Kernelfinsh shell文件系统网络协议栈 80K只读数据和执行代码占用13.5K内存占用当运行时会有5K左右的动态内存占用。即当系统运行时大约剩余45K内存给用户使用。

和LM3S提供的无操作系统LwIPFatFS文件系统比较 120K只读数据和执行代码占用35K内存占用。即当系统运行时大约剩余20K内存给用户使用。

再看看针对网络的一些性能指标 对比情况采用了相同的netio测试得到的数据统计 RT-Thread/LM3S NETIO - Network Throughput Benchmark, Version 1.26 (C) 1997-2005 Kai Uwe Rommel TCP connection established. Packet size 1k bytes: 704 KByte/s Tx, 5131 Byte/s Rx. Packet size 2k bytes: 704 KByte/s Tx, 1950 KByte/s Rx. Packet size 4k bytes: 704 KByte/s Tx, 2197 KByte/s Rx. Packet size 8k bytes: 704 KByte/s Tx, 2200 KByte/s Rx. Packet size 16k bytes: 706 KByte/s Tx, 2196 KByte/s Rx. Packet size 32k bytes: 709 KByte/s Tx, 2136 KByte/s Rx. Done.

TI/无操作系统情况下的LwIP NETIO - Network Throughput Benchmark, Version 1.26 (C) 1997-2005 Kai Uwe Rommel TCP connection established. Packet size 1k bytes: 870 KByte/s Tx, 5187 Byte/s Rx. Packet size 2k bytes: 870 KByte/s Tx, 2463 KByte/s Rx. Packet size 4k bytes: 870 KByte/s Tx, 3322 KByte/s Rx. Packet size 8k bytes: 870 KByte/s Tx, 3239 KByte/s Rx.

上面的是PC端NETIO输出的结果Tx对应LM3S开发板上的接收Rx对应LM3S开发板上的发送 从上面可以看出在大数据块发送时RT-Thread/LM3S的移植会有一些损耗但总的来说损耗不算太大特别是报文在1k - 2k范围时数据相差不大。如何看待这个差异通常没有操作系统时系统能够更专注的做一件事。而有操作系统的情况下它能够额外的做一些事务这些事务在进行切换时会产生一定的系统资源开销。总的来说体积上的改善一定程度上弥补了性能的差距例如RT-Thread/LM3S能够支持16k、32k bytes大小的网络包发送接收而无操作系统的LwIP则不能

最后看看一些实时性能指标 这组数据是与著名的开源实时操作系统ecos的比较。测试代码完全相同硬件平台相同采用的是PXA310编译器相同GNU GCC编译参数相同 基本任务测试 RTT/ecos 1.40倍 协作调度测试 RTT/ecos 1.20倍 抢占调度测试 RTT/ecos 1.33倍 同步处理测试 RTT/ecos 1.86倍 内存分配测试 RTT/ecos 2.50倍

当一个实时操作系统能够做到稳定运行、性能比拟普遍运行的系统有一定优势、后续能够稳定发展时那么她将是一款能够得到普遍使用的系统而事实也正是如此在中国已经有十来家公司采用RT-Thread运用于他们的产品中而后续打算在产品中采用RT-Thread的公司还有更多。

许可证 作为一套基础组件就例如电脑中的中文输入法一样它不应该收费因此它能够免费的使用于商业产品中0.3.x系统仅需要在我们这边进行产品信息备案更换GPLv2许可证为商业许可证0.4.x将更换产品许可证为BSD或Apache开源许可证

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------

版本: RT-Thread RTOS v0.2.3版本 发布时间: 2008/10/6

更新记录

  • 添加slab内存管理器
  • 添加用于小型内存系统的动态内存管理器 使用动态内存时小型内存管理器与slab内存管理器中使用其中之一
  • 添加lwip做为RT-Thread的TCP/IP协议栈 0.2.3包含AT91RM9200网卡驱动及QEMU/s3c2410虚拟的rtl8019网卡驱动
  • 添加C++特性支持;
  • finsh中添加动态添加系统调用及系统变量的API
  • 修正rt_int*_t定义为显式的signed定义
  • 修正线程超时函数的问题;
  • 修正链表中初始化问题;
  • 修正Object中调用钩子函数的问题

//---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------- 版本: RT-Thread v0.2.2 发布时间: 2008/6/12 RT-Thread v0.2.2单内核正式版发布这个版本主要是增加更多的BSP移植

  • s3c44b0的移植 [Xu Xinming]
  • AT91SAM7S64的移植 [Bernard Xiong感谢icdev.com.cn提供开发板]

以下的移植仍然是试验性质的

  • NDS掌上游戏机的移植[vai]
  • ia32的移植[Qiu Yi]在QEMU虚拟机中测试完成

以下是各个移植的一些说明: AT91SAM7S64: (系统资源16k RAM64k ROM Flash) 为配合小内存情况RT-Thread 0.2.2支持任务最大优先级为32的情况以保证内存占用更小所有二进制代码小于10k 在AT91SAM7S64移植中串口并没打开finsh也没启用。 在bsp/icdevs64/build目录下附带uVision的工程文件需要机器上安装有keil的gcc编译器

ia32: 支持i386-elf-gcc for windows的编译linux下的还没试应该也可以顺利编译。 编译完成后在bsp/qemu目录下生成rtthread-qemu.elf 把这个elf文件配置到grub的配置文件中具体的grub配置请参看grub文档