从0开始的嵌入式实时操作系统学习——学习笔记(1)

一. 什么是嵌入式实时操作系统(RTOS)

1. 什么是RTOS:

解释:R(real)T(time)OS(Operating System)实时多任务操作系统,与传统的桌面操作系统不同,RTOS设计之初就为满足实时性的需求而生,它们能够保证系统响应外部事件的速度和时间的确定性。这些特性使得RTOS在航空航天、医疗设备、工业控制等领域得到了广泛应用。

IEEE的实时UNIX分委会认为RTOS 应具备

        1) 异步的事件响应。

        2) 确定的切换时间和中断延迟。

        3) 基于优先级的抢占式调度。

        4) 内存锁定。

        5) 同步机制。

2. RTOS的特点: 

3.RTOS与RTOS Kernel(内核)

  •  操作系统是一系列软件的集合,提供管理资源管理和应用代码服务的能力 
  • RTOS 除内核外包含了一系列的软件库(中间件)

        1) 操作系统与内核之间的界限 并不明显,有时候还可以互换。

        2) 一般讲:内核是操作系统的子集,它可以被视为将其他组件固定在一起的胶水。

        3) FreeRTOS 和 µC/OS-III 是 一个实时内核。

        4) Vxwork 是一个嵌入式实时 操作系统(RTOS)。

4.开源的RTOS

  • RTEMS:实时多处理器系统,最早运用在美国国防系统。 
  • TOPPERS :日本开源的RTOS,创始人京都大学高田教授, 现在专注在汽车电子。
  • FreeRTOS :其专注在支持MCU ,开源模式和生态好, Amazon托管成为IOT OS,授权从GPL改成MIT。
  • eCOS:基于GNU 的RTOS,含TCP/IP和文件系统,在消 费电子产品有许多应用。
  • Contiki:起源于无线传感网络的的RTOS ,有超低功耗管 理和IPV6支持。 • µC/OS : 2020年知名的RTOS µC/OS 变成开源软件。
  • Zephyr:Linux基金会维护一个RTOS项目,Intel /NXP主导。
  • Nuttx:POSIX API,无人机应用,小米Vela 的内核。

二.深入理解嵌入式操作系统的工作原理

1.RTOS的关键概念

实时操作系统的核心在于“实时性”——即系统能够在规定的时间内准确、可靠地完成指定的任务。这里有几个关键概念需要理解:

  • 任务:也称为线程,是RTOS中的基本执行单位,每个任务都有自己的上下文和状态。
  • 调度器:决定哪个任务应该在何时运行的组件。调度器通常基于任务的优先级来做出决策。
  • 中断:一种机制,允许外设或事件立即获得CPU的注意,常用于处理紧急任务。
  • 同步:确保多个任务可以协同工作,不会因为资源竞争而导致数据不一致的机制。
  • 互斥量和信号量:用于实现任务同步的工具。

2.RTOS的任务管理

在RTOS中,任务管理是核心功能之一。每个任务都有一个明确的优先级,调度器根据这些优先级来分配CPU时间。任务的状态可以是就绪(Ready)、运行(Running)、阻塞(Blocked)或挂起(Suspended)。

void task_function(void) {
    while (1) {
        // Task code
        if (some_condition) {
            // Block on a semaphore if a condition is met
            semaphore_wait(&some_semaphore);
        }
        // More task code
    }
}

在这个任务函数的例子中,任务将循环执行代码,并在某个条件满足时等待一个信号量。如果信号量不可用,任务会进入阻塞状态,让出CPU资源,直到信号量被释放。

3.RTOS的调度策略

调度策略决定了任务执行的顺序和时机。常见的有:

  • 抢占式调度:优先级高的任务抢占优先级低的任务所正在使用的CPU。
  • 时间片段轮转调度:每个任务被分配一个时间片,用完后轮到下一个任务。
  • 固定优先级调度:每个任务有一个固定的优先级,系统总是运行最高优先级的就绪任务。

4.RTOS的中断处理

中断处理在RTOS中极为重要,因为它允许系统快速响应外部事件。当中断发生时,当前执行的任务会被暂停,系统会立即执行与中断关联的中断服务例程(ISR)。

void ISR_Handler(void) {
    // Handle interrupt
    clear_interrupt();
    semaphore_give(&some_semaphore); // Release a semaphore to unblock a task
}

在这个中断服务例程的例子中,ISR会清除中断标志,并释放一个信号量,这可能会导致等待该信号量的任务被解除阻塞。

5.RTOS的同步机制

为了防止多个任务同时访问共享资源而引起的冲突,RTOS提供了互斥量和信号量等同步机制。互斥量用于确保同一时间只有一个任务访问共享资源,而信号量则可以用于控制资源的访问数量或用作任务间的信号。

void task1_function(void) {
    mutex_lock(&shared_resource_mutex);
    // Access shared resource
    mutex_unlock(&shared_resource_mutex);
}

void task2_function(void) {
    mutex_lock(&shared_resource_mutex);
    // Access shared resource
    mutex_unlock(&shared_resource_mutex);
}

在这个例子中,两个任务都试图访问同一个共享资源。互斥量确保了在任何给定时间内,只有一个任务可以访问该资源。

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值