更多组件

C Plus Plus

        这是RT-Thread的C++组件。为了支持C++语言,这个组件实现了一个基本的环境,比如new/delete操作符。因为RT-Thread主要应用在嵌入式系统中,所以在使用C++时,需要遵守如下一些规则:

  • 不使用exception。
  • 不使用运行时类型信息(RTTI)。
  • 不鼓励使用模板,它容易导致代码文本大。
  • 不鼓励使用静态类变量,因为调用构造函数函数的时间和方式不能被精确地控制,使多线程编程成为一个噩梦。
  • 强烈不鼓励使用多重继承,因为它可以导致无法忍受的混乱。

GDB Stub

        GDB Stub 是 GDB 在进行远程调试的时候,在目标机上运行的一套代码,RT-Thread 上的 GDB Stub,使RT-Thread支持GDB的Remote Debugging,用来在没有仿真器(JTAG)的情况下调 试RT-Thread 内核和应用程序。
        如果有在MAC,LINUX下开发过MCU的经历的话,多半会对OpenOCD有印象,OpenOCD是一个开源的JTAG上位机程序,OpenOCD提供了GDB接口,一边响应GDB protocol,一边直接通过JTAG对MCU直接操作。而GDB Stub大部分代码其实都和OpenOCD相同,只不过GDB Stub操作MCU不需要通过JTAG访问,而是直接执行在MCU内部的代码。GDB Stub的PC端调试方法就是GDB的调试方法,使用细节可以参考大部分GDB教程。在MCU端需要为GDB Stub指定Serial设备。
        在嵌入式平台下,所以实现的细节都非常依赖底层的硬件,不同于GDB Server,不依赖系统提供的API接口,在项目中,大致使用了两套实现方式。

  • 使用软件模拟的办法,实现设置断点,单步的功能。
  • 依赖体系提供的寄存器,实现断点,单步。
代码也主要分两个部分。
  • GDB协议的处理。
  • 功能实现细节。

uIP

        uIP 由瑞典计算机科学学院(网络嵌入式系统小组)的Adam Dunkels 开发。其源代码由C 语言编写,并完全公开。uIP 协议栈去掉了完整的 TCP/IP 中不常用的功能,简化了通讯流程,但保留了网络通信必须使用的协议,设计重点放在了 IP/TCP/ICMP/UDP/ARP 这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。由于uIP 协议栈专门为嵌入式系统而设计,因此还具有如下优越功能:

  • 代码非常少,其协议栈代码不到 6K,很方便阅读和移植。
  • 占用的内存数非常少,RAM 占用仅几百字节。
  • 其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。
  • 支持多个主动连接和被动连接并发。

Logtrace

        RT-Thread下的log日志信息组件,开发调试时必备利器。

Ymodem

        Ymodem是一种错误纠正协议。使用较大数据块的调制解调采用这种协议,以获得更高的工作效率。采用Ymodem协议的调制解调器以1024字节数的块发送数据。成功接收的不会被确认。有错误的块被确认(NAK),并重发。Ymodem类似于Xmodem-1K,不同之处是提供批处理模式(batch mode)。在批处理模式下,可以使用一个命令发送一些文件。Ymodem使用循环冗余码校验作为错误校验方式。

Zmodem

        Zmodem是针对modem的一种错误校验协议。利用Zmodem协议,可以在modem上发送512字节的数据块。如果某个数据块发生错误,接受端会发送“否认”应答,因此,数据块就会被重传。
        它是Xmodem 文件传输协议的一种增强形式,不仅能传输更大的数据,而且错误率更小。包含一种名为检查点重启的特性,如果通信链接在数据传输过程中中断,能从断点处而不是从开始处恢复传输。

Lua解释器

        Lua是一个小巧的解释器,它可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。一个完整的Lua解释器体积小,速度快,是嵌入式脚本的不错选择。