关于FreeRTOS知识点总结

提示:关于FreeRTOS知识点总结,后续会继续补充


1.FreeRTOS框架常识

FreeRTOS与裸机任务管理概述

  1. 裸机系统中的栈和堆

    • 裸机系统通常只有一个主栈(用于非任务代码)。栈从高地址向低地址增长,堆从栈底向高地址增长。
  2. FreeRTOS中的栈

    • FreeRTOS中,每个任务都有独立的栈,用于存储任务的执行状态和局部变量。
  3. C语言函数切换

    • C语言函数的切换本质上是CPU内核中一系列寄存器值的改变,也叫做现场的恢复与保存。
  4. RTOS中的上下文切换

    • 在RTOS中,上下文切换(即任务切换)指的是现场的保存与恢复。
  5. 任务切换

    • FreeRTOS中的任务切换由调度器来完成,而在裸机系统中任务切换通常由硬件完成。
  6. 多任务并行执行

    • FreeRTOS中,多任务同时运行的模式称为并行执行。
  7. vTaskDelay函数逻辑

    • vTaskDelay函数的运行逻辑包括:
      1. 计时并暂停当前任务的运行。
      2. 计算延迟的时间。
      3. 延时时间到达后,恢复任务的运行。
  8. 调度器与Tick中断

    • 调度器的动力来源是Tick定时中断,一个定时周期称为一个Tick。
  9. 临界区的概念

    • 临界区用于保护共享资源,确保在临界区内的代码不会被中断,从而避免数据竞争问题。
  10. PENDSV中断

    • PENDSV是一个优先级最低的系统调用中断,负责缓期执行。它会等待所有其他中断处理完成后才执行。
  11. 高优先级任务的调度

    • FreeRTOS中,应该避免高优先级任务独占CPU。应尽量让高优先级任务发生阻塞或者调用vTaskDelay函数来让出CPU。
  12. CPU时间共享

    • CPU运行时间是多个任务共享的,因此任务不应长时间连续占用CPU。
  13. FreeRTOS中的任务状态

    • FreeRTOS中任务有四种状态:
      1. 阻塞状态:任务在等待某种资源时处于此状态。
      2. 运行状态:任务正在执行。
      3. 就绪状态:任务准备运行,等待调度。
      4. 挂起状态:任务被挂起,不参与调度。
    • 除运行状态外,其他状态的任务都是暂停运行的。
    • 一个处于阻塞状态的任务在等待条件满足时,会从阻塞状态转化为就绪状态。
  14. 任务运行的条件

    • 任务要运行的条件是:
      1. 任务必须处于就绪状态。
      2. 任务的优先级必须是所有就绪任务中最高的。
  15. 优先级反转问题

    • 优先级反转问题发生在低优先级任务阻塞了高优先级任务的执行,导致系统性能下降。
  16. FreeRTOS中的堆和栈

      • 用于动态管理内存,分配对象和资源(如任务控制块TCB)。堆空间不足可能导致无法创建新任务或对象。
      • 每个任务都有独立的栈,用于存储任务的执行状态、局部变量和函数调用信息。栈的大小在任务创建时指定。
  17. 静态任务与动态任务的区别

    • 静态任务
      • 创建时需要指定TCB(任务控制块)。
      • 删除时需要手动释放TCB。
    • 动态任务
      • 创建时无需指定TCB,FreeRTOS会自动分配。
      • 删除时也无需手动释放TCB。
  18. 任务函数设计

    • FreeRTOS中的任务函数在返回时可能跳转到野指针地址,因此任务函数通常包含一个while循环,以防止意外跳转。
  19. 节约任务创建空间

    • 可以在main函数中创建一个一次性任务,该任务负责创建其他长期任务,然后删除自己。一次性任务应设置为最高优先级,以防止被其他任务打断。
  20. 新任务的调度

    • 启动任务后,如果创建了新任务,调度器会根据优先级立即调度新任务。
  21. 空闲任务的作用

    • 空闲任务负责处理已删除任务的资源释放,确保有运行机会以回收资源。
  22. 钩子函数(Hook Functions)

    • 钩子函数实际上是回调函数,通过函数指针实现。在FreeRTOS中,这些指针被称为句柄(Handle)。
  23. _weak修饰符

    • **_weak**修饰符表示弱函数。加上_weak的函数允许用户在其他文件中重新定义同名函数,编译器将选择用户定义的强函数。
  24. 裸机与RTOS的任务执行

    • 在裸机中,任务大多是顺序执行的,偶尔被中断打断。而在RTOS中,任务之间的执行切换频繁,因此需要确保时间敏感的代码尽量不被中断。
  25. 任务间通信(IPC)

    • 任务间的通信和同步称为IPC(Inter-Process Communication)。
  26. 中断程序的调度

    • 中断程序无法由调度器调度,而是由硬件的NVIC控制和调度。
  27. 中断程序设计原则

    • 中断程序应尽量简短,以确保实时响应性能。避免在中断程序中执行长时间操作。

#2.
#3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值