ThreadX学习(1)——概述

ThreadX学习(1)——概述

  • 学习参考:
  • ThreadX
    • 实时性
    • 完善的中间件
      • 高等级安全认证
    • 源码组成
      • port
      • common
    • 多核
      • AMP
      • SMP

学习参考:

  • 《Real-Time Embedded Multithreading: Using ThreadX and ARM》
    (链接:https://pan.baidu.com/s/1GMScXSlHq13yS4AVxP_zPw 提取码:ysuw )
  • 安富莱_STM32-V7开发板ThreadX内核教程(V0.7)——硬汉嵌入式论坛
  • ThreadX SMP user guide 官方

ThreadX

ThreadX已被微软收购,改名为azure-rtos,但这里仍用原名。

源代码下载地址:https://github.com/azure-rtos

实时性

ThreadX 在大多数流行的处理器上实现了亚微秒的上下文切换时间。除了速度快之外,ThreadX 还具有高度确定性。无论准备好 200 个线程还是仅准备一个线程,它都能实现相同的快速性能。

以下是 ThreadX 的一些典型性能特征:

  • 快速启动:ThreadX 的启动时间少于 120 个周期。

  • 可选的错误检查机制:当验证了应用程序代码并且不再需要对每个参数进行错误检查时,可以在编译时跳过 ThreadX 错误检查,优化性能。

  • Picokernel™ Design(微内核设计):服务不会彼此套用,从而消除了不必要的函数调用开销。

  • 优化的中断处理:除非需要抢占,否则仅在 ISR 进入/退出时才保存/恢复暂存寄存器。

  • 优化的 API 处理

服务 执行时间,单位微妙
Thread Suspend 0.6
Thread Resume 0.6
Queue Send 0.3
Queue Receive 0.3
Get Semaphore 0.2
Put Semaphore 0.2
Context Switch 0.4
Interrupt Response 0.0-0.6

测试平台:200MHz 处理器。

完善的中间件

ThreadX 有自己完善的中间件,称为 ThreadX 全家桶:

  • 文件系统 FileX
  • GUI 图形设计 GUIX
  • 网络协议栈 NetX
  • USB 协议栈 USBX
  • GUIX 上位机调试软件 GUIX Studio
  • 跟踪调试软件 TraceX

中间件下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=103554&extra=page%3D1%26filter%3Dtypeid%26typeid%3D304

高等级安全认证

ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。

这么多安全认证,公司要入大量财力,人力和物力才可以完成。早前 Micrium 的一篇文章还谈过这个问题,投入了太多资金和人力了,还与风河的 VxWorks 做了简单对比。

  • 医疗 - FDA510(k),IEC-62304 Class C,IEC-60601,ISO-14971
  • 工业 - UL-1998,IEC-61508 SIL 4
  • 运输/铁路 - EN50128 SIL 4,BS50128, 49CFR236,IEC-61508
  • 航空航天设备 - DO-178B,ED-12B,DO-278
  • 汽车 - IEC-61508 ASIL D
  • 核应用 - IEC-61508
  • 家电 - UL/IEC 60730/60335

ThreadX 的安全认证基本都达到了最高等级,像工业级认证 IEC-61508 达到了最高等级的 SIL4,而uCOS,RTX5,embOS 都是 SIL3。

除了 ThreadX 内核有安全认证,中间件 GUIX,FileX,NetX,甚至是加密库都有安全认证。在安全领域,ThreadX 基本已经做到了登峰造极。

源码组成

ThreadX的源码两个最主要的部分:commonport两个文件夹。

虽然微软提供了ARM诸多芯片的接口,但目前被大部分人成功使用的只有M系列的部分芯片。

除此之外,ThreadX还能在WIN和Linux下运行。

port

port是对于不同芯片的接口,对ARM的基本都是汇编写的,包括线程调度、上下文保存和恢复、中断控制和定时器等。

这些接口都是直接对芯片进行操作,对于关注操作系统本身的开发者其实不需要太多关注。

common

common包含了系统初始化函数和所有的API函数,用C语言编写。

系统初始化函数最终还是会进入port提供的接口中。

而API函数包含以下九大类:
ThreadX学习(1)——概述_第1张图片
对于API的名字上,用户见到是的没有前缀的正常名字,如 tx_[module]_[func], 而其实它是经过宏定义的,可能是原型是 _tx_[module]_[func]或者_txe_[module]_[func]

若是_txe_[module]_[func],那么它会先进行一些异常状态的判定,若有异常直接返回,若无异常则调用 _tx_[module]_[func]

多核

AMP

ThreadX 通常以非对称多处理(Asymmetric Multiprocessing, AMP)方式使用,其中 ThreadX 和应用程序(或其它系统)单独在每个内核上执行,并通过共享内存或处理器间通信机制来相互通信。

SMP

对于处理器高度动态加载的环境,ThreadX 对称多处理(Symetric Multiprocessing,SMP)可用于以下内核:

  • ARM Cortex-Ax
  • ARM Cortex-Rx
  • ARM Cortex-A5x 64 位
  • MIPS 34K,1004K 和 interAptiv
  • PowerPC
  • Synopsys ARC HS
  • x86

ThreadX SMP 在 n 个处理器之间执行动态负载平衡,并允许任何 Core 上的任何线程访问所有ThreadX 资源(队列,信号量,事件标志,内存池等)。ThreadX SMP 在所有内核上启用完整的 API,并引入了适用于 SMP 操作的 API。

对于SMP,ThreadX提供了common_smpport_smp

你可能感兴趣的:(ThreadX,操作系统)