自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 8、FreeRTOS - 队列简单的使用介绍

队列是任务跟任务之间、任务跟中断之间进行数据交流的一种机制。队列图示如下:任务往队列写入数据,称为入队。从队列中读取数据,称为出队。入队和出队函数的内部都调用了临界段保护函数,禁止了任务的调度,保护了任务在读写时的数据,防止多个任务同时访问队列数据造成冲突。队列的存放数据的空间是有限的,空间大小可以在创建队列时指定。队列空间可以看成由多个存放数据的小盒子组成,这些小盒子称为“队列项目”,队列项目的大小单位为字节,小盒子的总数就是队列长度(如下图)。在创建队列时,就要指定队列项目的大小和队列长度。

2023-10-20 15:24:59 137 1

原创 解决 error:undefined symbol “x”(referred from “y.o”)

分析:一般出现这种 error,源程序中又没有标记红叉,是因为没有用下面的工具把相应的 c 文件添加到 project 里面,所以编译时系统只能找到头文件里面声明的函数,却无法找到函数的定义,这时就会出现:build 后报错,但程序中却没有出现红叉的情况。

2023-10-19 11:57:33 1320 2

原创 解决 error:identifier “xxx” is undefined

分析:出现这种情况一般就是没有加入相应头文件,导致系统找不到xxx。

2023-10-19 10:50:16 980 1

原创 7、FreeRTOS - 不同任务之间的沟通:互斥、同步、通信

同步:同步,是协调的意思,协调工作的进行,用于在多个任务的执行中控制轮到哪个任务执行和什么时候执行。例如,把任务比成班级里的同学,同学 A 和同学 B 一起完成一道数学大题,题被分成两小题,同学 A 做第一小题,同学 B 做第二小题,不过第二小题需要第一小题的计算结果才能继续往下算,所以同学 B 需要一直等待同学 A,只有等同学 A 做完后告诉同学 B 结果,同学 B 才能开始做题。(B 需要 A 的答案才能做题,所以等待的过程中什么都做不了,这个等待过程就被称为阻塞)互斥:用于保护共享资源,避免数据错误。

2023-10-16 18:48:49 338 1

原创 6、FreeRTOS - 列表、列表项、任务控制块TCB

最近在网上学习FreeRTOS 列表后做的一些笔记,仅供学习交流!!FreeRTOS 中任务有多种状态:就绪态、运行态、阻塞态、挂起态。当存在多个任务都处于某个状态时,为了方便处理这些任务,会把这些任务组成一个列表。

2023-10-15 10:20:51 159 1

原创 5、FreeRTOS - 中断

在 STM32 中,用 NVIC 来专门管理所有中断(所有中断分配的任务就交给了NVIC,给不同的中断分配中断优先级的),是内核的一个外设,用来减轻 CPU 的负担。NVIC 总共有 16 个中断优先等级(0~15,由用户自己分配决定),为了处理不同形式的优先级, STM32 的 NVIC 对中断优先级进行了分组,分为了五组。:子优先级高的是不能打断正在执行的其他任务的,只能等待任务执行完才能轮到他,类似排队做核酸,子优先级高的是直接插入准备做核酸的下一位,而抢占优先级高的是直接把核酸做一半的人赶走。

2023-10-12 11:36:51 105 1

原创 4、FreeRTOS - 任务的调度、临界区

前面说过,想要实现多任务的调度,要满足 ①就绪列表中有任务,②开启了任务调度器。我们创建了新任务,任务就位于就绪列表中,之后开启任务调度器,就能开始任务的切换。函数功能启动任务调度器,启动后 FreeRTOS 开始对就绪列表中的任务进行调度挂起、恢复任务调度器的函数针对一些对时序有严格时间要求的外设,例如 I2C、SPI、DHT11,这类代码运行过程是不能被打断的(这类代码也成为临界区代码),否则模块极有可能无法正常工作,为防止可以先挂起任务调度器,等代码完整执行完后再恢复任务调度器。

2023-10-11 10:48:39 100

原创 3、FreeRTOS - 任务的创建、删除

声明:学习笔记是看正点原子视频教学+个人理解总结的,仅供学习交流!!

2023-10-10 10:44:30 114 1

原创 对 lvgl 的通俗介绍

lvgl 其实就是各种图形部件 Widget(如滑块、滚轮、按钮等)的集合库(GUI 库),部件都是通过 API 函数创建(函数格式一般都是 lv_xxx_create( ),xxx 是部件名),部件的类型都是 lv_obj_t,lv_obj_t 是结构体进行 typedef 后的重命名(可用来创建结构体或结构体指针,这个结构体内部具备所有部件的属性),因此,所有部件都具备一些共同属性,例如大小、颜色、位置、样式这些,只是不同部件其具体的参数可能不同。

2023-10-09 11:57:21 3728 1

原创 FreeRTOS 中 API 函数命名的含义

说明该函数是 static,属于私有函数,无法被外界调用。函数返回值是 结构体、队列、任务等的变量名类型。函数返回值是 unsigned 类型。函数返回值是 short 类型。函数返回值是 void 类型。函数返回值是 char 类型。函数返回值是指针类型。

2023-10-08 11:31:08 86 1

原创 2、FreeRTOS - 任务、任务管理、任务状态

任务的运行状态的切换FreeRTOS 系统中的任务有多个状态,不同的状态之间的转换关系如下:

2023-10-06 15:48:42 126 1

原创 1、FreeRTOS - 裸机和RTOS开发的区别

利用 RTOS 就可以创建两个不同的任务(RTOS 的任务就是程序员自定义的函数,如上面的 task1、task2,创建任务函数前需要先定义和声明一些参数,这里不做详细介绍),分别完成不同的事,通过开启任务调度器,任务间可以频繁的进行自动切换,就能实现吃一口饭,再吃一口菜,再吃一口饭...原本的裸机开发只能在 while 中按顺序执行,不同功能间的执行可能有较大的时间间隔,使用 RTOS 可以让多个不同功能的任务间通过调度的方式,快速的进行任务切换,切换速度非常快,肉眼看起来就像是同时执行一般,例如。

2023-10-05 12:06:34 462

原创 一文认识 SPI - 学习笔记

一、SPI 概述一、SPI 概述SPI(Serial Peripheral Interface),是一种通用数据总线,有四根通信线:SCK(时钟线)、MOSI(数据线)、MISO(数据线)、SS(从机选择线,主机选择哪个从机作为通信对象,根据需求可以同时具备多根)同步(说明有时钟线)、全双工(说明有2根数据线,一根用于发送一根用于接收)、支持总线挂载多设备(一主多从)所有的 SPI 设备的 SCK、MOSI(主发 从接)、MISO(主接 从发) 分别连接在一起。

2023-10-04 17:55:56 102

原创 一文认识 I2C - 学习笔记

I2C(Inter IC BUS)总线是一种通用数据总线,有两根通信线(串行总线):SCL(serial clock)时钟线、 SDA(serial data)数据线。使用 I2C 进行通信的设备,一般都会在引脚上标有 SCL、SDA,例如采用 i2c 协议的 oled 屏模块,如下(1)同步通信为什么 I2C 不使用异步通信,而是用同步?

2023-10-03 20:36:08 572

原创 Linux 进程——学习笔记 简单粗暴直击要害

进程的创建,其实就是以父进程为模板,复制出一个新进程作为子进程,数据段、堆、栈内容跟父进程一模一样,代码段也跟父进程一样,子进程相当于父进程的副本(原本父进程中变量所对应的虚拟地址是什么,也被子进程一并复制过去了)。程序要执行时,总得从某个地方开始执行,在进程的 main 函数(作为当前进程的入口,也是当前进程的出口)执行之前,内核会先启动一个特殊的例程,这个特殊的例程也是一个进程,称为启动例程。(进程块结束时会自动调用终止函数。新进程的创建,都是由一个存在的进程执行创建进程的 API 函数而被创建的。

2023-10-02 11:28:48 59 1

空空如也

空空如也

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

TA关注的人

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