maup
码龄3年
关注
提问 私信
  • 博客:14,146
    14,146
    总访问量
  • 15
    原创
  • 2,113,885
    排名
  • 8
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2021-12-24
博客简介:

wefaj的博客

查看详细资料
个人成就
  • 获得24次点赞
  • 内容获得13次评论
  • 获得107次收藏
创作历程
  • 15篇
    2023年
成就勋章
TA的专栏
  • Keil error
    2篇
  • FreeRTOS
    8篇
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

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

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

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

分析:一般出现这种 error,源程序中又没有标记红叉,是因为没有用下面的工具把相应的 c 文件添加到 project 里面,所以编译时系统只能找到头文件里面声明的函数,却无法找到函数的定义,这时就会出现:build 后报错,但程序中却没有出现红叉的情况。
原创
发布博客 2023.10.19 ·
1863 阅读 ·
1 点赞 ·
2 评论 ·
14 收藏

解决 error:identifier “xxx” is undefined

分析:出现这种情况一般就是没有加入相应头文件,导致系统找不到xxx。
原创
发布博客 2023.10.19 ·
2439 阅读 ·
1 点赞 ·
1 评论 ·
4 收藏

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

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

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

最近在网上学习FreeRTOS 列表后做的一些笔记,仅供学习交流!!FreeRTOS 中任务有多种状态:就绪态、运行态、阻塞态、挂起态。当存在多个任务都处于某个状态时,为了方便处理这些任务,会把这些任务组成一个列表。
原创
发布博客 2023.10.15 ·
257 阅读 ·
0 点赞 ·
1 评论 ·
4 收藏

5、FreeRTOS - 中断

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

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

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

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

声明:学习笔记是看正点原子视频教学+个人理解总结的,仅供学习交流!!
原创
发布博客 2023.10.10 ·
170 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

对 lvgl 的通俗介绍

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

FreeRTOS 中 API 函数命名的含义

说明该函数是 static,属于私有函数,无法被外界调用。函数返回值是 结构体、队列、任务等的变量名类型。函数返回值是 unsigned 类型。函数返回值是 short 类型。函数返回值是 void 类型。函数返回值是 char 类型。函数返回值是指针类型。
原创
发布博客 2023.10.08 ·
213 阅读 ·
1 点赞 ·
1 评论 ·
3 收藏

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

任务的运行状态的切换FreeRTOS 系统中的任务有多个状态,不同的状态之间的转换关系如下:
原创
发布博客 2023.10.06 ·
216 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

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

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

一文认识 SPI - 学习笔记

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

一文认识 I2C - 学习笔记

I2C(Inter IC BUS)总线是一种通用数据总线,有两根通信线(串行总线):SCL(serial clock)时钟线、 SDA(serial data)数据线。使用 I2C 进行通信的设备,一般都会在引脚上标有 SCL、SDA,例如采用 i2c 协议的 oled 屏模块,如下(1)同步通信为什么 I2C 不使用异步通信,而是用同步?
原创
发布博客 2023.10.03 ·
764 阅读 ·
2 点赞 ·
0 评论 ·
10 收藏

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

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