APM与ChibiOS系统

ChibiOS 是一款专为嵌入式系统设计的开源实时操作系统(RTOS),以下是对它的详细介绍:

基本信息

  • 作者 :由 Giovanni Di Sirio 于 2007 年 9 月在 SourceForge 公开发布。
  • 命名由来 :chibi 在日语中有 "小孩" 之意,故 ChibiOS 也可理解为小型操作系统。
  • 许可证 :采用 GPL3 或 Apache 2.0 等开源协议,也有商业许可选项。特点- 高性能 :内核在 STM32(Cortex-M3,72MHz)上,典型实例仅占用 1.2KB 到 5.5KB 空间,每秒可创建和终止 22 万多个线程,1.2 微秒内完成线程切换。在 STM32H7 平台,中断延迟可低至 50 纳秒,上下文切换时间低于 1 微秒。- 轻量化 :内核代码仅需 5-20KB ROM 和 1-2KB RAM,适合资源受限的微控制器。- 实时性 :支持硬实时,优先级抢占调度和确定性的任务响应,提供可预测的实时性能,满足高实时性应用场景需求。- 可移植性 :支持 ARM Cortex-M、AVR、RISC-V 等多种架构的处理器,可轻松移植到不同硬件平台。- 模块化 :高度模块化设计,内核组件可裁剪,如文件系统、网络协议栈等可根据需要保留或去除,减少资源占用。- 丰富 API :提供简单易用且丰富的 API,方便开发者快速开发复杂应用,无需深入RTOS内部实现细节。- 确定性 :注重内存的静态使用,避免动态内存分配带来的不确定性,增强系统可靠性。- 强大的抽象功能 :对硬件和系统功能进行良好抽象,方便开发者在不同硬件平台上复用代码,提高开发效率。架构与组件- 实时内核(RT) :提供实时调度、任务管理、内存管理、中断处理等功能,支持多种调度算法,如抢占式多任务、128 个优先级、同优先级线程时间片轮转调度等,适用于对实时性要求较高的嵌入式应用。- 无内核系统(NIL) :非抢占式系统,体积小,最小配置可在低于 1KB 的 RAM 上运行,适用于对实时性要求不高但需要多任务管理的场合。- 操作系统库(OSLIB) :提供通用系统服务,如内存池、消息队列、信号量等,为系统内核和应用层之间提供接口和数据结构,方便内核功能调用和管理。- 硬件抽象层(HAL) :为不同硬件平台提供统一接口,屏蔽硬件差异,包含各种外设驱动程序,如串口、定时器、ADC、SPI 等,开发者只需调用 HAL 层 API 即可操作硬件。- 扩展组件(EX) :包含文件系统、网络协议栈等常用扩展功能,可根据需要选择性集成到应用中。

应用场景

  • 工业控制 :可用于控制机器人、PLC、传感器等工业设备,其可靠的实时控制能力和高效的性能满足工业生产中的精确控制和实时监测需求。- 消费电子 :适用于智能手表、智能家居设备等消费电子产品,小巧的代码规模和易于使用的 API 使其能在资源受限的设备上良好运行。- 医疗设备 :如心电监护仪、呼吸机等医疗设备,对安全性和可靠性要求极高,ChibiOS 可提供所需的实时控制能力。- 汽车电子 :可应用于车载娱乐系统、车身控制系统等,其高效性能和可定制性满足汽车电子领域对实时性和可靠性的严格要求。- 无人机 :在无人机飞控中表现出色,如 ArduPilot 的某些硬件平台,可实现高频控制循环、传感器同步、故障快速响应等功能。

开发工具

  • ChibiStudio :官方基于 Eclipse 的 IDE,集成调试插件,支持实时任务跟踪和内存分析,方便开发者进行代码编写、调试和项目管理。- SEGGER SystemView :可视化工具,可监控任务调度、中断触发和 CPU 负载,需嵌入 SystemView 库。- 其他工具 :如 IAR、Keil 等商用开发工具,以及 GNU GCC 等开源编译器也支持 ChibiOS 开发。

无人机lib库代码(HAL_ChibiOS类)

是为 ChibiOS 操作系统实现的一个硬件抽象层(HAL)类,主要用于嵌入式系统中管理硬件资源和设备。这个类的成员函数及其作用如下:

  • HAL_ChibiOS(): 这是 HAL_ChibiOS 类的构造函数。它通过传递一系列硬件驱动实例(如串口驱动、I2C 设备管理器、SPI 设备管理器等)来初始化一个 AP_HAL::HAL 对象,从而完成硬件抽象层的构建。

  • run(int argc, char * const argv[], Callbacks* callbacks): 这个函数用于运行 HAL 系统。它首先进行系统初始化,包括 ChibiOS HAL 初始化和内核初始化。然后,它调用 main_loop 函数来启动主线程循环。

  • static void main_loop(): 这是 HAL 系统的主线程循环函数。它执行一系列初始化操作,如设置主线程优先级、清除 I2C 总线、初始化外设电源、开始串口通信等。然后,它调用回调函数 setup 进行系统设置,并进入一个无限循环,在循环中调用回调函数 loop 来持续运行系统逻辑。

  • static void hal_chibios_set_priority(uint8_t priority): 这个函数用于设置主线程的优先级。它通过 ChibiOS 的系统锁机制来安全地更改当前线程的优先级。

  • static thread_t* get_main_thread(): 返回主线程的句柄,方便其他部分代码获取主线程的信息或对其进行操作。

  • static void peripheral_power_enable(): 启用外设电源,为系统的外设提供电力支持。

  • static void mem_protect_enable(): 在支持的处理器上(如 STM32H7)启用内存保护功能,以防止对特定内存区域的非法写入。

这些成员函数协同工作,使得 HAL_ChibiOS 类能够有效地管理和操作嵌入式系统中的硬件资源,为上层软件提供一个稳定、可靠的硬件抽象层。

相关推荐
小宋同学在不断学习14 分钟前
stm32--SPI原理应用W25Q64(二)
stm32·单片机·spi
jz_ddk25 分钟前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
lingzhilab39 分钟前
零知开源——STM32F4结合BMP581气压传感器实现ST7789中文显示教程
stm32·单片机·嵌入式硬件
夜月yeyue1 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
qqxhb1 小时前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择
无小道1 小时前
c++-引用(包括完美转发,移动构造,万能引用)
c语言·开发语言·汇编·c++
猫猫的小茶馆2 小时前
【STM32】外部中断
stm32·单片机·嵌入式硬件·mcu·51单片机
群联云防护小杜3 小时前
构建分布式高防架构实现业务零中断
前端·网络·分布式·tcp/ip·安全·游戏·架构
FirstFrost --sy3 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森3 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机