PX5实时操作系统

PX5 是一款工业级超小型第5代RTOS,适用于存储受限的设备。PX5是业界最小的RTOS之一,在典型的32位微控制器上只需要不到1KB Flash和1KB RAM。

PX5有着极高的性能和确定性,在大多数32位处理器上上下文切换和API调用的速度都是亚微秒级,能够满足任何实时环境的要求。

PX5 RTOS有着业界顶尖的安全性,其C代码经过严格的100%语句和分支覆盖测试。PX5还包含独有的指针/数据验证(PDV)技术,提供前所未有的运行时验证。

PX5 RTOS非常精简,其API提供对POSIX pthreads标准的原生支持。PX5应用可以移植到任何兼容POSIX pthreads的系统上,例如Linux和其他RTOS。PX5还提供针对深度嵌入式实时系统的pthreads可选扩展。PX5的数据封装技术帮助编译器产生最优的代码,并同时降低命名冲突。

PX5 RTOS几乎全部用ANSI C编写(99%),这让处理器移植变得非常简单。PX5支持常见的嵌入式MCU和MPU架构,包括Arm Cortex-M、Cortex-R、Cortex-A和RISC-V。PX5支持常用的嵌入式开发工具,例如IAR、Arm和GCC。

PX5 RTOS产品包括全部源代码,包括结合层(Binding Layer)。源代码的架构易于理解,严格的测试保证其质量。

 

PX5架构

 

 

 

PX5 RTOS的优势:

 

PX5 RTOS能够从多方面助力嵌入式开发:

1. 加快产品上市的速度

2. 增强产品质量

3. 提高产品安全性

4. 业界标准的pthreads API能够提高应用程序的可移植性和代码的可重用性

5. 对pthreads API的支持帮助降低工程师的培训时间

 

为什么要在嵌入式系统中使用pthreads?

调研表明,嵌入式Linux占嵌入式开发的70%。嵌入式Linux是基于POSIX pthreads API的,这意味着pthreads是嵌入式系统业界最著名和最常用的API。业界有许多著名的RTOS使用私有API,培养开发者需要较长的培训时间,这让这些RTOS难以普及。私有的API也意味着应用代码难以移植。另外,许多设备厂商同时销售基于Linux和RTOS的设备,目标场景和定价各不相同。使用pthreads API的一款RTOS能够解决上面这些问题,降低培训时间,并让应用程序代码能在不同平台上运行。

 

PX5指针/数据验证(PDV)技术

PX5的PDV软件技术帮助检测重要数据是否损坏,例如函数指针、系统内部对象和分配的内存区域等。PDV在每个重要的数据元素进行初始化时,会将指针/数据值、存储验证码的位置和一个独特的识别码提供给px5_pthread_start函数,进而生成一个验证码(指纹)。使用数据时系统会运用这一验证码进行验证,如果检测到数据损坏,PX5会通过它的中心错误处理机制告知应用程序。PDV帮助及早检测到数据损坏,大幅降低不相关的代码执行的可能性(由损坏的函数指针值导致。

 

PDV可以保护:

1. RTOS中所有函数指针

2. RTOS的全局数据

3. RTOS的内部系统数据:线程、队列等

4. RTOS内部函数的返回地址

5. 内存管理使用的元数据指针

6. 应用程序通过API指定PDV保护的数据

PDV的开销取决于所用的编译器,一般开销都比较小。默认的验证码生成过程在典型的Arm Cortex-M架构上只需要6个指令左右。验证数据时需要先计算数据的验证码,然后和之前存储的验证码进行比较。

 

运行时栈检查

PX5 RTOS的另一项软件安全功能是运行时栈检查。只要在编译时使用PX5_STACK_CHECKING_ENABLE选项,PX5在执行时就会检查每个线程的栈。应用程序也可以通过调用px5_pthread_stack_check API进行栈检查。

如果发现栈损坏或是溢出,检查会触发一个严重错误,并调用PX5的中心错误处理机制进行处理。如果检测到栈有溢出的风险,检查会触发一个提示。