自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 FreeRTOS 内存管理

函数描述申请内存释放内存获取当前空闲内存的大小。

2024-03-26 12:07:23 864 1

原创 FreeRTOS Tickless 低功耗模式

很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等。那么大家想一下,我们要如何去降低功耗呢?一般MCU都有相应的低功耗模式,裸机开发时可以使用 MCU 的低功耗模式。FreeRTOS 也提供了一个叫 Tickless 的低功耗模式,方便带 FreeRTOS 操作系统的应用开发。这里我们主要使用的是这个睡眠模式1. 如何降低功耗?Tickless 低功耗模式的本质是通过调用指令 WFI 实现睡眠模式!2. Tickless 模式的设计思想?那我们可以结合这个现象来设计 Tickless

2024-03-25 20:16:34 548

原创 FreeRTOS 软件定时器

定时器:从指定的时刻开始,经过一个指定时间(超时时间),然后触发一个超时事件,用户可自定义定时器的周期。类似于生活中的闹钟。硬件定时器:芯片本身自带的定时器模块(外设),硬件定时器的精度一般很高(相对于软件定时器),每次在定时时间到达之后就会自动触发一个中断(溢出中断),用户在中断服务函数中处理信息。

2024-03-25 15:32:13 893

原创 FreeRTOS 任务通知

任务通知API函数主要有两类:① 发送通知 ,② 接收通知。注意:发送通知API函数可以用于任务和中断服务函数中;接收通知API函数只能用在任务中。因为中断它是没有任务控制块这个结构体的,所以接收通知API函数是不能用于中断中的。函数描述发送通知,带有通知值(三种方式均可使用)发送通知,带有通知值并且保留接收任务的原通知值(三种方式均可使用)发送通知,不带通知值(通知值++,应用于信号量)在中断中发送任务通知在中断中发送任务通知在中断中发送任务通知。

2024-03-25 10:03:29 776

原创 FreeRTOS 事件标志组

函数描述使用动态方式创建事件标志组使用静态方式创建事件标志组清零事件标志位在中断中清零事件标志位设置事件标志位在中断中设置事件标志位等待事件标志位设置事件标志位,并等待事件标志位更多事件标志组相关的API函数介绍请查阅《FreeRTOS开发指南》-- 第十六章“FreeRTOS事件标志组”

2024-03-24 16:38:29 552

原创 FreeRTOS 队列集

函数描述创建队列集队列添加到队列集中从队列集中移除队列获取队列集中有有效消息的队列在中断中获取队列集中有有效消息的队列。

2024-03-24 15:48:31 676

原创 FreeRTOS 信号量

优先级翻转这个现象主要就是由二值信号量导致的,并且在后面要介绍互斥信号量的时候,都是由优先级翻转牵扯出来的,所以说这个可以说是一个承上启下的作用了,所以这里有必要来好好介绍一下。优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。在使用二值信号量的时候,经常会遇到优先级翻转的问题。

2024-03-24 11:31:52 890

原创 FreeRTOS 消息队列

队列实际它的内存是分为两部分,第一个就是存放结构体的内存,接着是队列里面的队列项,它用来存放数据的,我们写入数据给队列就写入到队列项里面了。int8_t * pcHead /* 存储区域的起始地址(队列项的起始地址) *//* 下一个写入的位置 */union /* 当把这个结构体用作不同的功能的时候,联合体的作用是不一样的 *//* 当用作队列的时候,就使用的上面这个 *//* 当用作互斥信号量的时候,就使用的下面这个 */} u;/* 等待发送列表 */

2024-03-21 21:52:29 588

原创 FreeRTOS 时间管理

相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束。绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务。绝对延时示意图:(1) 为任务主体,本身任务要运行的时间,也就是任务真正要做的工作。(2) 是任务函数中调用 vTaskDelayUntil() 对任务进行延时(3) 为其他任务在运行。(高优先级)所以它这里包含了三部分,这三部分加起来就是它的绝对延时时间。实验目的:学习 FreeRTOS 相对延时和绝对延时API 函数的使用,并了

2024-03-21 19:48:48 404

原创 FreeRTOS任务相关API函数

此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1形参描述xTask要查找的任务句柄,NULL代表任务自身返回值描述整数任务优先级数值此函数用于改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet 为 1形参描述xTask任务句柄,NULL代表任务自身需要设置的任务优先级此函数用于获取系统中任务的任务数量返回值描述整型系统中任务的数量。

2024-03-20 16:20:01 701

原创 FreeRTOS时间片调度

轮流地享有相同的 CPU 时间(可设置), 叫时间片。在FreeRTOS中,一个时间片就等于SysTick 中断周期。Task3 只执行不到一个时间片,那下一次再回到 Task3 的时候,怎么样?它剩下的时间片不会要了,同样的也只给它一个时间片的时间去执行。

2024-03-20 11:26:11 719

原创 FreeRTOS 任务调度

学习调度器之前的一些建议:本讲的内容和 Cortex-M 处理器的内核架构密切联系,所以学习之前建议大家:作用:用于启动任务调度器,任务调度器启动后, FreeRTOS 便会开始进行任务调度。作用:该函数用于完成启动任务调度器中与硬件架构相关的配置部分,以及启动第一个任务。注意:运行完 xPortStartScheduler() 之后是不会再返回了,直接跳到第一个任务去执行了。我们主要讲解两个函数:想象下 OS 应该如何启动第一个任务?比如 OS 创建了多个任务,那么多个任务 OS 怎么知道启动哪

2024-03-20 10:43:12 765

原创 FreeRTOS的列表和列表项

列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。那我们前面说过列表有就绪列表、挂起列表、阻塞列表等等这些,那这些表示什么?表示任务的一种状态。列表项就是存放在列表中的项目。意思它就是列表的子集。列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表。列表的特点:列表项间的地址非连续的,它并不是依靠地址连接在一起,而是人为的连接到一起的。

2024-03-18 15:14:18 978

原创 FreeRTOS 临界段代码保护及调度器挂起与恢复

什么是临界段:临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段。适用场合如:问题 1:什么可以打断当前程序的运行?问题 2:如何才能不被打断?注意:不在 FreeRTOS 管理范围内的中断,它们还是可以照样打断的。FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。任务级临界区调用格式示例:中断级临界区调用格式示例:特点:挂起它的意思就是暂停,挂起任务调度器, 代表任务就不能切换、不能调度了。但是中断它是依旧正常响应的,调用此函数不需要关闭中断。那这

2024-03-15 10:12:07 748

原创 FreeRTOS 中断管理

简介:让 CPU 打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断。中断执行机制,可简单概括为三步:说到中断,那必不可少就提到我们的中断优先级,因为中断它说到底其实就是一个比较紧急的事件,我们要优先去处理紧急事件,但是你在处理的过程中难免有可能会遇到更加紧急的事情,那这时候咋办?那这时候你就要去处理更加紧急的事情。那这个对应到中断,就是它中断优先级要更高。也就是说中断优先级高的可以抢占优先级低的中断去执行,也就是中断嵌套。ARM Cortex-M 使用了 8 位宽 的寄存器来配置中断的优先等级,这

2024-03-14 12:16:31 898

原创 FreeRTOS 的任务挂起和恢复

函数原型:形参描述xTaskToSuspend待挂起任务的任务句柄此函数用于挂起任务,使用时需将宏 INCLUDE_vTaskSuspend 配置为 1。无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复 。1.2 任务恢复1.2.1 任务中恢复(在任务函数中调用)函数原型:形参描述xTaskToResume待恢复任务的任务句柄使用该函数注意宏:INCLUDE_vTaskSuspend必须定义为 11.2.2 中断中

2024-03-13 15:54:17 829

原创 FreeRTOS 的任务创建和删除

在 FreeRTOSConfig.h 中。/* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/ # define START_TASK_PRIO 1 /* 任务优先级 */ # define START_TASK_STACK_SIZE 128 /* 堆栈大小,单位字,乘以 4 变成字节 */ TaskHandle_t start_task_handler;/* 任务句柄 */ void start_task(void * pvParameters);

2024-03-13 13:45:38 903

原创 Ubuntu 基本操作-嵌入式 Linux 入门

如果你对 Ubuntu 比较熟悉的话,安装完 VMware 运行 Ubuntu 之后就可以来学习下一章节了。

2024-03-10 11:15:11 1065

原创 资料下载-嵌入式 Linux 入门

学习的第一步是去下载资料。

2024-03-10 09:09:37 550

原创 嵌入式 Linux 学习

在学习嵌入式 Linux 之前,我们先来了解一下嵌入式 Linux 有哪些东西。

2024-03-10 08:37:44 966

原创 FreeRTOS 基础知识

调度器:就是使用相关的调度算法来决定当前需要执行的哪个任务。那我们说了,我们 RTOS 会创建很多个任务,那这个任务同一时刻只能执行一个,那要执行哪一个呢?就由这个调度算法来决定。抢占式调度。主要是针对优先级不同的任务,每个任务都有一个优先级(我们创建每一个任务都会分配一个优先级给它),优先级高的任务可以抢占优先级低的任务,然后去执行。那这里要注意:FreeRTOS 是优先级的数值越大,它的任务优先级就越大。时间片调度。

2024-01-13 12:40:57 781 1

原创 FreeRTOS 入门知识

我们把 FreeRTOS 分成两部分,这样一看是比较清晰的。Free 直译过来就是自由的免费的,RTOS 我们前面有介绍到就是实时操作系统,所以两个连一起就是一个免费的嵌入式实时操作系统了。它的特点就是免费的。那我相信大家呢,不管你是做什么产品,你第一个考虑的是什么,其实就是成本,这个 FreeRTOS 它是一个免费的,所以在成本上为 0,非常好这点。但是市面上免费的 os 很多啊,那我为什么要用你啊,要学你啊。因为你不单单只考虑成本,你要考虑什么?

2024-01-11 20:00:41 993

原创 FLASH 闪存-stm32入门

STM32F1 系列的 FLASH 包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程那首先,FLASH 包含程序存储器、系统存储器和选项字节三个部分,这个我们之前介绍过。我们回顾一下,在 DMA 这一节我们介绍过存储器映像,STM32 内部的存储空间主要有这些部分,其中 ROM 区,就是掉电不丢失的,存储介质是 FLASH 闪存;RAM 区,掉电丢失,存储介质是 SRAM。

2024-01-03 14:30:59 961 1

原创 WDG 看门狗-stm32入门

WDG(Watchdog)看门狗它的作用,顾名思义,其实就是“看大门”,不过这里的大门,表示的是程序。看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。那写过程序代码的都知道,程序的设计是非常讲究逻辑的。每一种状态,每一种可能,都要在写程序的时候预先注意到,否则,一旦出现了程序没有预料到的情况,程序经常就会出现卡死、跑飞、胡乱运行的状况。

2023-12-30 12:14:19 1115

原创 PWR 电源控制-stm32入门

PWR(Power Control,电源控制)PWR 就是 Power 的缩写。PWR 的作用:PWR 负责管理 STM32 内部的电源供电部分,可以实现 可编程电压监测器 和 低功耗模式 的功能。PWR 有一部分是硬件的介绍,就是告诉你,内部供电电路的结构是啥样的,这些是设计硬件电路时要考虑的,暂时不涉及程序。涉及程序的功能,主要就是两个,一个是可编程电压监测器,另一个是低功耗模式。

2023-12-27 12:34:11 1137

原创 BKP 备份寄存器 & RTC 实时时钟-stm32入门

Unix 时间戳最早是在 Unix 系统使用的,所以叫 Unix 时间戳。之后很多由 Unix 演变而来的系统,也都继承了 Unix 时间戳的规定。目前 Linux、Windows、安卓这些系统它们底层的计时系统,都是使用的 Unix 时间戳。所以在我们现在计算机世界的底层,Unix 时间戳还是在扮演着重要的角色的。Unix 时间戳(Unix Timestamp),它的定义是从 UTC/GMT 的 1970 年 1 月 1 日 0 时 0 分 0 秒开始所经过的秒数,不考虑闰秒。

2023-12-16 18:59:39 1444 3

原创 SPI 通信-stm32入门

SPI(Serial Peripheral Interface,串行外设接口)是由Motorola公司开发的一种通用数据总线和 I2C 一样,它们都是通用的数据总线。同时,它们也都是用于主控和外挂芯片之间的通信,应用领域非常相似。当然,I2C 和 SPI,两者是各有优势和劣势的。在某些芯片呢,我们用 I2C 更好,在另一些芯片呢,我们用 SPI 更好。上一节我们学习 I2C 的时候,可以发现 I2C,无论是硬件电路,还是软件时序,设计的都是相对比较复杂的。

2023-12-11 16:09:06 910

原创 软件使用-stm32入门

这节主要是介绍大家使用两个软件。这两个软件也是比较常用的,里面也有很多有意思的功能,可以给大家介绍一下。

2023-12-02 17:00:12 748 1

原创 I2C 通信-stm32入门

I2C(Inter IC Bus,缩写 IIC / I2C,一般习惯称为 I2C)是由 Philips 公司开发的一种通用数据总线目前应用还是非常广泛的,已经有很多模块都使用了 I2C 的协议标准了。比如我们套件里的 MPU6050 模块,可以进行姿态测量,使用了 I2C 通信协议;我们套件里的 OLED 模块,可以显示字符、图片等信息,也是 I2C 协议;AT24C02 存储器模块(51 单片机中学习 I2C 的模块);DS3231 实时时钟模块,也是使用 I2C 通信;等等。

2023-11-28 11:28:18 960

原创 串口数据包收发的思路和流程-stm32入门

固定包长,含包头包尾可变包长,含包头包尾首先数据包的作用是把一个个单独的数据给打包起来,方便我们进行多字节的数据通信。

2023-11-27 22:15:46 1455

原创 STL常用算法-C++

概述:学习目标:算法简介:功能描述:函数原型:示例:总结:for_each 在实际开发中是最常用的遍历算法,需要熟练掌握功能描述:函数原型:示例:总结:学习目标:算法简介:功能描述:函数原型:示例:总结:功能描述:函数原型:示例:2.3 adjacent_find功能描述:函数原型:示例:2.4 binary_search功能描述:函数原型:示例:总结:虽然二分查找法查找效率很高,但是值得注意的是查找的容器中元素必须是有序序列。功能描述:函数原型:示例:总结:统计自定义数据类型的时候,需要

2023-11-27 12:21:37 953

原创 STL函数对象-C++

本质:函数对象(仿函数)是一个类,不是一个函数。

2023-11-25 11:29:42 676

原创 USART 串口协议-stm32入门

就是软硬件的规则,与某个具体的硬件无关。

2023-11-23 11:35:41 1512

原创 DMA简介-stm32入门

DMA(Direct Memory Access)直接存储器存取/访问,DMA 这个外设是可以直接访问 STM32 内部的存储器的,包括运行内存 SRAM、程序存储器 Flash 和寄存器等等,DMA 都有权限访问它们,所以 DMA 才能完成数据转运的工作。DMA 是一个数据转运小助手,它主要是用来协助 CPU,完成数据转运的工作。DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。

2023-11-21 11:03:25 111

原创 STL常用容器-C++

总结:string 的多种构造方式没有可比性,灵活使用即可。总结:字符串拼接的重载版本很多,初学阶段记住几种即可。总结:string 的赋值方式很多,

2023-11-17 20:03:47 64

原创 ADC模数转换器-stm32入门

ADC(Analog-Digital Converter)意为模拟到数字转换器,简称模数转换器,或者叫 AD 转换器。:ADC 可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。(ADC 可以将模拟信号转换为数字信号,是模拟电路到数字电路的桥梁)扩展:数字到模拟的桥梁同时 PWM 只有完全导通和完全断开两种状态,在这两种状态上都没有功率损耗,所以在直流电机调速这种大功率的应用场景下,使用 PWM 来等效模拟量,是比 DAC 更好的选择。

2023-11-17 16:56:26 413

原创 TIM 编码器接口-stm32入门

1. TIM 编码器接口简介1.1 基本概念Encoder Interface 编码器接口,基本上相当于使用了一个带有方向选择的外部时钟。工作流程:编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度输出的两个方波信号相位相差 90°,超前 90° 或者滞后 90°,分别代表正转和反转,这就是正交编码器。使用定时器的编码器接口,再配合编码器,就可以测量旋转速度和旋转方向了,这里编码器测速一般应用在电机控

2023-11-17 11:38:08 286

原创 STL初识-C++

长久以来,软件界一直希望建立一种可重复利用的东西。

2023-11-15 21:46:12 21

原创 TIM 输入捕获-stm32入门

那当有一个频率,测频法和测周法计次的 N 相同时,就说明误差相同,这就是中界频率。把测频法和测周法的 N 提出来,令这两个方法 N 相等,把 f。

2023-11-15 15:00:54 558 1

原创 TIM 输出比较-stm32入门

PWM(Pulse Width Modulation)脉冲宽度调制,是一个数字输出信号,由高低电平组成。基本功能:在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。(使用 PWM 波形,是用来等效的实现一个模拟信号的输出)比如数字端口实现 LED 呼吸灯:GPIO 口是一个数字输出的端口,输出电平不是高电平就是低电平;按理来说 LED 只有完全亮和完全灭两种状态,怎么能实现 LED 连续的调控亮度呢?这就是 PWM 的功劳。

2023-11-14 11:25:29 183

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除