boringhex.top博客

非典型程序员的小破站

引言

FreeRTOS是一个流行的小型开源实时操作系统,广泛应用于嵌入式系统领域。本文旨在详细介绍FreeRTOS的任务调度机制,我们将探讨其调度算法的原理,分析调度器的源码,并通过图表帮助理解调度过程。

FreeRTOS基础

实时操作系统简介

实时操作系统(RTOS)是为了能在规定的时间内完成特定任务的操作系统。与通用操作系统不同,实时性是其最重要的特征。

FreeRTOS的特点

  • 轻量级:占用资源少,适合资源受限的嵌入式系统。
  • 可裁剪:根据需要启用或禁用功能。
  • 多任务支持:支持抢占式和协作式多任务处理。
  • 优先级调度:任务根据优先级进行调度。
阅读全文 »

任务概述

任务是FreeRTOS中最基本的调度单元,它是一段可执行的代码,可以独立运行。FreeRTOS中的任务是基于优先级的抢占式调度,优先级高的任务可以抢占优先级低的任务的CPU资源。任务的创建、删除、挂起、恢复、设置优先级等操作都是通过调用API函数来实现的。

任务的创建

任务的创建是通过调用 xTaskCreate 函数来实现的,函数原型如下:

1
2
3
4
5
6
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
const char * const pcName,
const configSTACK_DEPTH_TYPE usStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t * const pxCreatedTask );

参数说明:

  • pxTaskCode:任务函数的入口地址。
  • pcName:任务的名字,用于调试。
  • usStackDepth:任务栈的大小,单位为字。
  • pvParameters:传递给任务函数的参数。
  • uxPriority:任务的优先级。
  • pxCreatedTask:任务创建成功后,返回任务句柄。
阅读全文 »

什么是实时操作系统(RTOS)

实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统。实时应用程序需要在特定时间内做出预测的响应,因此RTOS专注于提供对时间约束的强调,以确保系统能够满足实时性能要求。

1. 实时性能:

  • 硬实时和软实时: RTOS可以根据实时性能的要求分为硬实时和软实时。硬实时系统对任务的响应时间有极严格的要求,任何未能在规定时间内完成的任务都会被认为是失败。软实时系统也有时间要求,但相对灵活,任务未能在规定时间内完成并不会导致系统失败。

2. 任务调度:

  • 实时调度算法: RTOS使用实时调度算法来确定哪个任务将在处理器上运行。这些算法考虑任务的优先级、截止期限和其他实时要求。
  • 时间片轮转: 在一些情况下,RTOS可能使用时间片轮转调度,确保每个任务都有机会运行,以防止某个任务长时间独占处理器。

3. 任务管理:

  • 任务创建与删除: RTOS允许创建和删除任务。任务可以是独立运行的单元,执行特定的功能。
  • 任务同步和通信: 提供机制使任务能够同步和通信,如信号量、互斥锁、消息队列等。

4. 内存管理:

  • 动态内存分配: 一些RTOS支持动态内存分配,允许在运行时分配和释放内存。
  • 静态内存分配: 为了提高可预测性,一些RTOS可能支持静态内存分配,即在编译时为任务分配内存。

5. 中断处理:

  • 中断服务例程(ISR): RTOS允许开发人员编写中断服务例程,以处理硬件中断事件。
  • 中断优先级: 中断服务例程可以具有不同的优先级,RTOS确保高优先级的中断可以中断低优先级的中断或任务。

6. 实时时钟和定时器:

  • 实时时钟: 提供对实时时钟的支持,以便任务能够基于实际时间进行调度和同步。
  • 定时器: 允许设置和管理定时器,以在指定时间触发任务或事件。

7. 错误处理:

  • 错误检测与处理: RTOS通常提供错误检测和处理机制,以确保系统在出现错误时能够采取适当的措施。

8. RTOS应用领域:

  • 嵌入式系统: RTOS广泛应用于嵌入式系统,如汽车控制单元、医疗设备、工业自动化等。
  • 通信系统: 在通信系统中,RTOS用于管理网络设备、路由器和交换机等。

9. 示例RTOS:

  • FreeRTOS: 一个开源的实时操作系统,广泛用于嵌入式系统。
  • VxWorks: 用于嵌入式实时系统的商业RTOS。
  • RTOS-32: 针对Windows平台的实时操作系统。

10. RTOS与通用操作系统的区别:

  • 实时性能: RTOS关注实时性能,而通用操作系统通常更注重吞吐量和响应时间。
  • 内核大小: RTOS通常具有更小、更精简的内核,以确保快速启动和响应。
  • 任务调度: RTOS使用实时调度算法,以确保任务在规定时间内完成。

实时操作系统在对实时性能有严格要求的应用中发挥着关键作用。通过提供对任务调度、同步、通信和实时时钟的支持,RTOS使得开发者能够设计和实现对时间要求极高的系统。在嵌入式系统和实时控制领域,RTOS成为了不可或缺的工具。

阅读全文 »

导言

在嵌入式系统的领域中,实时操作系统(RTOS)是非常重要甚至不可或缺的组成部分。FreeRTOS(Real-Time Operating System)是一款广泛使用的开源RTOS,为嵌入式开发提供了可靠、高效的实时调度和任务管理。本文将简要介绍FreeRTOS的发展历史、技术演进、技术特点,并介绍ESP-IDF对FreeRTOS的绑定,以及FreeRTOS在ESP32等芯片上的应用。

FreeRTOS的发展历史

FreeRTOS的历史可以追溯到2003年,由英国工程师Richard Barry创建。作为一位在嵌入式领域有着丰富经验的工程师,Barry的目标是开发一个轻量级、可裁剪、易于移植的RTOS,以满足各种嵌入式系统的需求。

随着时间的推移,FreeRTOS不断演进和壮大。其源代码的开放性质促使全球的开发者和企业积极参与,形成了一个庞大的社区。这个社区的不断贡献推动了FreeRTOS的功能增强、性能优化以及对更多硬件平台的支持。

阅读全文 »

鸽了数月,终于把固定翼小飞机的机身和硬件部分走通了,今天整理好开源,希望跟大家一起交流讨论。

项目开源地址:

  1. TinyPlane GitHub

简介

Tiny Plane是一个固定翼小飞机飞控项目,旨在DIY一款操控良好、飞行时间长、可玩性高的固定翼小飞机。目前基于48cm翼展手抛机进行改装,飞控采用ESP32-C3。

特性

飞控主要特性:

  • 单串锂电池供电,最大工作电压5.5V
  • 电源电压、电流感测
  • 锂电池温度感测
  • DCDC降压电源,效率90%以上
  • 3轴加速度计,3轴陀螺仪
  • 气压计,高度精度10cm
  • 2路动力电机通道,支持电流感测
  • 2路数字IO通道
  • USB TypeC接口,调试和烧写程序
  • 1路串口,可用于连接GPS

机身主要特性:

手抛机机身

  • 49cm翼展,47cm长,22cm平尾
  • 重量 ~40g
阅读全文 »

ESP32C3小飞控板赶在国庆节前发出打样,假期后上班就收到了样板,但是迟迟没有动手调试,这两天终于抽出时间调试了,调试过程还算顺利,基本没有遇到什么大问题,下面记录一下调试过程。

原理图

ESP-FC原理图

比计划中多加了一个大气压力传感器,用作测高。主要特性:

  • 单串锂电池供电,最大工作电压5.5V
  • 电源电压、电流感测
  • 锂电池温度感测
  • DCDC降压电源,效率90%以上
  • 3轴加速度计,3轴陀螺仪
  • 气压计,高度精度10cm
  • 2路动力电机通道,支持电流感测
  • 2路数字IO通道
  • USB TypeC接口,调试和烧写程序
  • 1路串口,可用于连接GPS
阅读全文 »

大多数公司都是每个月定期提交报销,一般报销用的发票都是电子发票发到邮箱,每次要报销时都需要登录邮箱,点开邮件,一个个下载整理,工作量不大,但是发票多了也着实很烦。这个月终于下决心把这个过程自动化一下。

思路

查看了一下邮箱里的发票邮件,虽然主题内容格式不固定,但是基本都包含“发票”,所以可以用“发票”关键词将发票邮件筛选出来。然后解析发票邮件内容,将发票pdf文件提取下载,并整理到指定文件夹。

嗯,就这么简单。

实现

这种事还是用python比较快吧,搞起。

阅读全文 »

这个机器人程序可以将发票邮件中的发票pdf文件自动下载整理,但是发票邮件格式并不标准,有下载失败的可能。

程序用python编写,以源码提供,可以自行修改。总的来说配置比较简单,但还是需要一点点基础。

虽然用自己常用的邮箱也可以,但还是强烈建议为接收发票邮件单独申请一个邮箱。下面就从邮箱申请开始,对发票机器人的配置过程进行说明。

申请邮箱

任何支持IMAP协议的邮箱都可以,国内常用的免费邮箱都支持的,这里以网易163邮箱为例。

  1. 打开网易邮箱主页 https://mail.163.com/,点击注册新账号。
  2. 按照注册向导完成邮箱注册。
阅读全文 »

之前的文章 信号去噪 中列出了7种常用的信号去噪算法,对于后两种算法——深度学习和奇异值分解(SVD),我现在也不太理解,就先不写了。

很多朋友留言又提了一些算法,今天一起来聊聊椭圆滤波器。

椭圆滤波器(Elliptic Filter),也称为Cauer滤波器,是一种数字滤波器,用于信号处理和滤波应用。椭圆滤波器之所以得名,是因为其在频率响应图上的特征呈现出椭圆形的形状。

椭圆滤波器有以下特点和优点:

  1. 极窄的过渡带宽:椭圆滤波器的过渡带宽(即通频带到阻频带的过渡区域)非常窄,这意味着它可以在频域内实现非常陡峭的滤波特性。

  2. 通带和阻带均衡:椭圆滤波器通常可以在通带和阻带内实现更好的幅度响应均衡。这意味着它可以在通带内最小化幅度失真,并在阻带内最大化信号抑制。

  3. 允许通带和阻带的波动:与其他滤波器设计相比,椭圆滤波器允许通带和阻带内的振荡,但在给定的通带和阻带容限下,可以实现更小的阶数(更低的复杂度)。

  4. 高阶滤波特性:椭圆滤波器通常以较高的阶数实现,这使其适用于需要极高滤波性能的应用,如无线通信和雷达系统。

椭圆滤波器的设计需要确定以下参数:

  • 通带边界频率(通带上下限的频率)。
  • 阻带边界频率(阻带上下限的频率)。
  • 通带最大允许波纹(通带内振荡的幅度波纹)。
  • 阻带最小抑制(阻带内信号抑制的最小要求)。

椭圆滤波器设计通常涉及到数学优化问题,以找到最佳参数配置来满足上述要求。

阅读全文 »

独立成分分析(Independent Component Analysis,ICA)是一种用于从混合信号中分离出原始独立成分的统计方法。它通常用于处理多个传感器捕获的混合信号,旨在找到线性变换,将混合信号转换为独立的源信号,这些源信号在统计上是相互独立的。

以下是关于独立成分分析的一些要点:

  1. 背景和动机: ICA 的应用背景包括语音信号处理、脑电图(EEG)和磁共振成像(fMRI)信号分析、金融数据分析等。在这些情况下,多个信号源混合在一起,我们希望从混合信号中还原原始的信号源,以便进一步分析。

  2. 统计独立性: ICA 的核心概念是统计独立性。在混合信号中,不同的信号源应该在统计上是独立的,这意味着它们的联合概率分布可以分解为各个源信号的概率分布的乘积。

  3. 盲源分离: ICA 被称为“盲源分离”方法,因为它不需要关于信号源的先验信息。它只依赖于混合信号的统计性质来分离信号源。

  4. 混合模型: ICA 假设混合信号可以表示为线性组合的形式,其中每个信号源通过一定的权重系数相加。这可以用矩阵形式表示为 X = AS,其中 X 是混合信号矩阵,A 是混合矩阵,S 是源信号矩阵。

  5. 优化算法: ICA 的目标是找到一个逆变换矩阵 W,使得 Y = WX,其中 Y 是分离后的信号矩阵。这可以通过最大化信号的独立性来实现,通常使用的优化算法包括最大似然估计(MLE)和信息最大化(Infomax)等。

  6. 应用领域: ICA 在许多领域有广泛的应用,包括语音信号分离、脑信号分析、图像分析、信号压缩等。在脑信号分析中,ICA 可用于从脑电图(EEG)或磁共振成像(fMRI)数据中提取潜在的脑区活动。

阅读全文 »
0%