轻量级内核:高效且灵活
HeliOS是一个开源的嵌入式操作系统,免费且易于使用。它并非一个完整的操作系统,而是一个多任务内核,专为嵌入式应用而设计。
其丰富的API文档完善,允许用户精确控制系统,访问内核服务(系统调用)进行任务管理、调度管理、进程间通信、内存管理、设备管理(即设备驱动程序)等,同时保持极小的内存占用,适用于各种低功耗嵌入式设备。通过/src/config.h
单个头文件,HeliOS可以轻松定制以满足用户的特定需求。
HeliOS内核占用极小的空间,运行效率极高,便于移植到各种微控制器。它的灵活配置能够适配不同的硬件平台和应用场景。
双重多任务模型:事件驱动与协作调度
HeliOS支持两种多任务模型,可在同一应用程序中同时使用。第一种是事件驱动模型:任务进入“等待”状态后,仅响应任务事件。HeliOS支持两种任务事件:直接到任务通知和基于定时器的事件。直接到任务通知允许一个任务向另一个任务发送通知,HeliOS调度器会唤醒接收方任务并将其安排执行。定时器则可以让任务以一定的频率周期性执行。
第二种是传统的协作式模型。协作式任务始终处于可调度状态,除非被挂起。HeliOS的协作式模型采用独特的“运行时平衡”算法,根据任务运行时间的长短动态调整优先级,防止长时间运行的任务独占系统资源。事件驱动任务总是优先于协作式任务执行。
两种模型无缝协作,实现高效的任务调度与管理。
无上下文切换:简化资源管理
HeliOS的多任务处理不依赖于上下文切换,这减少了用户管理共享资源时对互斥锁和信号量的需求,也省去了上下文切换所需的“端口”或可移植性代码。用户可以专注于应用程序开发,无需处理并发访问共享资源的问题。
当然,这种方法也有缺点:如果一个任务不释放控制权,它将独占所有运行时间,HeliOS调度器不强制实时性,只保证软实时性。
高效的进程间通信
HeliOS提供了三种进程间通信模型:直接到任务通知、消息队列和流缓冲区。直接到任务通知是一种高效的通信通道;消息队列是灵活的FIFO通信通道;流缓冲区与消息队列类似,但操作的是单字节流。此外,HeliOS还支持任务参数,可用于基本的进程间通信。
多种通信方式的选择,让用户可以根据应用场景选择合适的方案。
安全的内存管理
HeliOS内置内存管理功能,提高了动态分配内存的安全裕度。它使用编译时分配的静态内存实现私有堆,避免使用标准库malloc()
和free()
函数,并为内核对象保留单独的内存区域,降低用户应用程序内存访问错误损坏内核对象的风险。从0.4.0内核版本开始,HeliOS还支持精细的内存碎片整理和一致性检查,确保内存高效利用和高完整性。
私有堆和独立内核内存区域的采用,增强了系统的稳定性及安全性。
灵活的设备驱动模型
HeliOS支持内核模式设备驱动程序模型,可以使用提供的设备驱动程序模板轻松开发各种外设的驱动程序。当微控制器的MMU或MPU启用时,可能无法从用户代码访问内存映射寄存器和I/O,这时就需要设备驱动程序。ARM MMU和MPU的实现正在进行中。
健壮性和易用性
HeliOS(0.3.0及更高版本)经过静态分析测试,并进行了MISRA C:2012检查。虽然HeliOS未经认证,不应用于存在生命危险的安全关键型应用,但其健壮性可以为用户构建嵌入式应用程序提供可靠保障。
HeliOS易于集成到PlatformIO和Arduino项目中,最新的版本可通过PlatformIO注册表和Arduino库管理器获取。对于其他嵌入式平台和/或工具链,只需从GitHub下载最新版本并将其添加到项目中即可。
总结
HeliOS是一个轻量级、高效、灵活且易于使用的嵌入式操作系统内核。其独特的无上下文切换多任务模型、多种进程间通信方式以及安全的内存管理机制,使其成为构建各种嵌入式应用的理想选择。 同时,它对Arduino和PlatformIO的良好支持,进一步降低了开发门槛。HeliOS持续发展,不断完善,未来将有更多令人期待的功能。
项目地址:https://github.com/heliosproj/HeliOS