一、常见的操作系统介绍

  • 嵌入式开发中常用的操作系统(OS)主要分为实时操作系统(RTOS)和嵌入式操作系统(Embedded OS)两大类。以下是常见的嵌入式操作系统及其特点:
分类 操作系统 特点 适用场景 许可证
RTOS FreeRTOS 开源、轻量级(最小6KB RAM),支持优先级抢占 低资源MCU(如STM32) MIT License
μC/OS-II/III 硬实时、抢占式多任务,内存分区管理 工业控制、汽车电子 商业授权(部分开源)
RT-Thread 国产开源,集成GUI/网络协议栈,支持POSIX 物联网设备、智能硬件 Apache-2.0
VxWorks 高可靠性、多核支持,确定性调度 航空航天、军工 商业授权
QNX 微内核架构,高安全性,动态升级 车载系统、医疗设备 商业授权
嵌入式OS 嵌入式Linux 支持丰富驱动和协议栈,生态完善 高性能SoC(如树莓派) GPL/开源
Android (AOSP) 基于Linux,触控和生态支持 智能家居、车载终端 Apache-2.0
Windows IoT 兼容Windows工具链,支持.NET开发 工业HMI、零售终端 商业授权
Zephyr OS 轻量级,模块化设计,支持多架构(ARM/RISC-V) IoT传感器、低功耗设备 Apache-2.0
Tock OS 基于Rust,内存安全隔离 安全关键设备(医疗/金融) MIT License
国产RTOS Huawei LiteOS 轻量级,华为IoT生态支持 华为物联网设备 开源(华为协议)
AliOS Things 阿里云IoT支持,边缘计算能力 智能城市、工业IoT Apache-2.0
SylixOS 高实时性,支持SMP多核 军工、电力控制 商业授权

二、UCOS操作系统

1. μC/OS简介

  • 类型:实时操作系统(RTOS),抢占式多任务内核。
  • 版本:
    • μC/OS-II:经典版本,广泛应用于工业控制。
    • μC/OS-III:增强版,支持时间片轮转调度、任务数无限制。
  • 特点
    • 开源:提供源代码,可免费用于教学和研究
    • 可移植:支持多种处理器架构
    • 可裁剪:可根据需求配置功能
    • 实时性:确定性的任务调度机制
    • 抢占式:高优先级任务可抢占低优先级任务

2.μC/OS 核心特性

特性 详细说明
任务管理 支持多任务(μC/OS-II最多64个任务,优先级唯一),优先级抢占式调度
实时性 硬实时,中断响应时间短(通常<1μs)
同步机制 信号量(Semaphore)、互斥锁(Mutex)、事件标志组(Event Flag)
通信机制 消息队列(Message Queue)、邮箱(Mailbox)
内存管理 固定大小内存块分配(Memory Partition),避免碎片化
时间管理 系统时钟节拍(Tick),支持任务延时和定时器
中断处理 中断服务程序(ISR)可触发任务切换,支持嵌套中断

3. 任务(Task)

  • 定义:独立执行的线程,每个任务有自己的栈和优先级。

  • 关键API:

    OSTaskCreate()  // 创建任务
    OSTaskDel();// 任务删除
    OSTaskSuspend() // 挂起任务
    OSTaskResume()  // 恢复任务
    
  • 优先级:数值越低优先级越高(如优先级0为最高),不允许重复。

4.时间管理

  • 关键API:
    OSTimeDly()       // 任务延时
    OSTimeDlyHMSM()   // 按时分秒延时
    OSTimeGet()       // 获取系统时间
    OSTimeSet()       // 设置系统时间
    

5. 调度机制

  • 抢占式调度:高优先级任务就绪时,立即抢占低优先级任务。
  • 时间片轮转(仅μC/OS-III):同优先级任务可分配时间片轮流执行。
  • 调度器:
    • 任务级调度:通过API(如OSStart())触发。
    • 中断级调度:在ISR结束时触发(如调用OSIntExit())。

6. 同步与通信

机制 用途 示例API
信号量 资源计数/任务同步 OSSemCreate(), OSSemPend()
互斥锁 解决优先级反转问题 OSMutexCreate(), OSMutexPend()
消息队列 任务间传递数据 OSQCreate(), OSQPend()
事件标志组 多事件同步 (如等待多个信号) OSFlagCreate(), OSFlagPend()
  • 信号量(Semaphore):
    OSSemCreate()   // 创建信号量
    OSSemPend()     // 等待信号量
    OSSemPost()     // 释放信号量
    
  • 互斥信号量(Mutex):
    OSMutexCreate() // 创建互斥量
    OSMutexPend()   // 获取互斥量
    OSMutexPost()   // 释放互斥量
    
  • 消息队列(Message Queue):
    OSQCreate()     // 创建消息队列
    OSQPend()       // 等待消息
    OSQPost()       // 发送消息
    
  • 事件标志组(Event Flag):
    OSFlagCreate()  // 创建事件标志组
    OSFlagPend()    // 等待事件标志
    OSFlagPost()    // 设置事件标志
    

7. 内存管理

  • 静态分配:编译时确定内存布局(适合确定性系统)。

  • 动态分配:

    • 内存分区(Partition):固定大小块分配,避免碎片。
    • 堆管理(Heap):μC/OS-III支持可配置的堆分配算法(如首次适应算法)。
  • 关键API:

    OSMemCreate()     // 创建内存分区
    OSMemGet()        // 分配内存块
    OSMemPut()        // 释放内存块
    

8. 中断处理

  • 原则:

    • ISR应尽量短,耗时操作交给任务处理。

    • 中断可嵌套,需管理中断开关(OS_ENTER_CRITICAL()/OS_EXIT_CRITICAL())。

  • 关键步骤:

    • 保存CPU上下文
    • 调用用户ISR
    • 调用OSIntEnter()
    • 执行中断服务
    • 调用OSIntExit()
    • 恢复上下文

9. 移植μC/OS

  • 移植步骤:
    • 编写CPU相关代码(如os_cpu.h、os_cpu_a.asm)。
    • 配置时钟节拍(SysTick或硬件定时器)。
    • 堆栈增长方向配置
    • 临界区保护方法
  • 支持架构:ARM Cortex-M、MIPS、x86等(需提供端口代码)。

10. uC/OS应用开发流程

  1. 初始化硬件
  2. 初始化uC/OS (OSInit())
  3. 创建任务和内核对象
  4. 启动多任务环境 (OSStart())
  5. 编写各任务函数
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐