FreeRTOS实时内核指南——队列管理
FreeRTOS实时内核指南——队列管理概览基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的小程序。这些独立的任务之间很可能会通过相互通信以提供有用的系统功能。FreeRTOS 中所有的通信与同步机制都是基于队列实现的。
队列特性数据存储队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下,队列被作为 FIFO(先进先出)使用,即数据由队列尾写入,从队列首读出。当然,由队列首写入也是可能的。往队列写入数据是通过字节拷贝把数据复制存储到队列中;从队列读出数据使得把队列中的数据拷贝删除。
可被多任务存取队列是具有自己独立权限的内核对象,并不属于或赋予任何任务。所有任务都可以向同一队列写入和读出。一个队列由多方写入是经常的事,但由多方读出倒是很少遇到。
读队列时阻塞当某个任务试图读一个队列时,其可以指定一个阻塞超时时间。在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。当其它任务或中断服务例程往其等待的队列中写入了数据,该任务将自动由阻 ...
ESPIDF-系统启动流程
ESPIDF-系统启动流程应用程序的启动流程本文将会介绍 ESP32 从上电到运行app_main函数中间所经历的步骤(即启动流程)。宏观上,该启动流程可以分为如下 3 个步骤:
一级引导程序 被固化在了 ESP32 内部的 ROM 中,它会从 flash 的 0x1000 偏移地址处加载二级引导程序至 RAM (IRAM & DRAM) 中。
二级引导程序 从 flash 中加载分区表和主程序镜像至内存中,主程序中包含了 RAM 段和通过 flash 高速缓存映射的只读段。
应用程序启动阶段 运行,这时第二个 CPU 和 RTOS 的调度器启动。
app_main() 调用流程调用 app_main在port_idf.c中找到如下代码
1234567void app_main(void);static void main_task(void* args){ app_main(); vTaskDelete(NULL);}
可以看到app_main函数返回后删除了该task,如果将变量定义在app_main函数中,任务被删除后栈上的数据会被自动 ...
FreeRTOS实时内核指南——任务管理
FreeRTOS实时内核指南——任务管理概览单任务与多任务
单任务系统
单任务系统的编程方式,即裸机的编程方式,这种编程方式的框架一般都是在 main() 函数中使用一个大循环,在循环中顺序的执行相应的函数以处理相应的事务,这个大循环的部分可以视为应用程序的后台,而应用程序的前台,则是各种中断的中断服务函数。因此单任务系统也叫做前后台系统。
前后台系统的实时性很差,因为大循环中函数处理的事务没有优先级之分,必须是顺序地执行处理,不论待处理事务的紧急程度有多高,没轮到就只能等着,虽然中断可以处理一些紧急的事务,但是在大型嵌入式系统中,这样的单任务系统就会显得力不从心。
多任务系统
多任务系统的多个任务可以“同时”运行,是从宏观的角度而言的,对于单核CPU而言,CPU在同一时刻只能处理一个任务,但是多任务系统的任务调度器可以根据相关的任务调度算法,将CPU的使用权分给任务,在任务获得CPU使用权之后的极短时间(宏观角度)后,任务调度器又会将CPU的使用权分配给其他任务,如此往复,在宏观的角度看来,就像是多个任务同时运行一样。
多任务系统的任务具有优先级,高优先级的任务可以像中断一样抢占 ...
ESP-IDF + VScode 开发环境搭建BUG
ESP-IDF + VScode 开发环境搭建BUG前言在 VScode 上使用 Espressif 重新搭建 ESP32 开发环境时,虽然能正常编译和烧录,但出现问题如下:
终端提示 “无法使用 compilepath 解析配置”,打开 C/C++ 扩展发现找不到编译器路径。
VScode 找不到头文件,波浪线警告。
解决方法编译器路径报错打开 C/C++ 扩展显示找不到路径${env:IDF_TOOLS_PATH}/tools/xtensa-esp32-elf/esp-12.2.0_20230208/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe其中 ${env:IDF_TOOLS_PATH} 是 idf tools 在环境变量中的路径,去环境变量里面没有找到,所以直接新建环境变量如下,与实际安装的idf tools位置对应好。
头文件报错打开工程目录下 .vscode目录中的 c_cpp_properties.json,里面描述的是对应的头文件路径,内容如下所示 ...
hexo博客迁移新设备
hexo博客迁移新设备前言最近装了一个台式来当主力机,把之前笔记本的博客迁移过来方便记录。配置如下。
配件
型号
CPU
i5 12490f
主板
微星 B660m MAX WIFI DDR4
显卡
铭瑄 4060Ti 16G
内存
金百达 银爵 8G×2
硬盘
凯侠 RC20 500G + 致钛TiPlus5000 1T
电源
长城 550W X5金牌
散热
利民 AX120 R SE
机箱
先马朱雀air + 冰洞2s风扇×3
迁移博客备份旧设备中的博客文件。新设备环境配置
安装Node.js:官网下载,然后一直ok下去
安装git:官网下载
打开gitbash设置用户,这个只是上传时告诉远程仓库是谁上传的而已。 12git config --global user.name "你的名字"git config --global user.email "你的邮箱"
配置 SSH,输入后一直回车就行 1ssh-keygen -t rsa
添加 SSH Key到 GitHub 在 GitHub ...
Windows系统安装
Windows系统安装前言之前在学校硬件部时,装系统是使用PE操作系统进行辅助安装,现在尝试使用官方ISO镜像文件直接写入安装。目前U盘格式化有三种方式,其特点如下。
FAT32:单个分区不能超过32G,单个文件不能超过4G
exFAT:老旧设备无法识别
NTFS:老旧设备无法识别
安装系统时需要的设备:
容量至少为8G的U盘
能够正常操作的Windows系统电脑
磁盘存储数据的格式有两种:
MBR:Legacy引导
GPT:UEFI引导
官网下载安装工具首先到微软官网下载安装工具,因为我是在新电脑上安装,所以选择“创建 Windows 11 安装”,如下图所示。
制作Win11启动盘上一步下载完后会有一个 mediacreationtool.exe 文件,点击运行。
选择接受
选择语言和版本
选择U盘进行安装
确认盘符是否为选中的U盘。注意,此步骤会删除U盘内的所有文件,务必提前备份好重要文件
等待下载,下载完成后会把安装包写入U盘,等待写入完成,然后一直点击“下一步”:直至“完成”即可。
删除U盘EFI分区
删除U盘EFI分区使用U盘作为启动盘重装系统后,U盘会多出来一个EFI分区,记录一下如何删除EFI分区,恢复为正常U盘。
在开始菜单中找到 Windows系统文件夹的命令提示符,右键以管理员身份运行
输入“diskpart”并回车1diskpart
输入“list disk”并回车1list disk
通过容量来查看U盘位置,选中对应的磁盘并回车1select disk 2
输入clean并回车,如果显示失败就再输入一次clean并回车1clean
然后就可以发现U盘处于不可用状态
在桌面右键点击“此电脑”,选中“管理”,选中“存储”下的“磁盘管理”,点击选中“磁盘2”,右键“新建简单卷”,按默认选项一直点击“下一步”直至“完成”,然后U盘就恢复正常了。
摄影入门
摄影入门(1)单反与微单单反单反(Single Lens Reflex)全称为“单镜头反光式取景相机”。单镜头顾名思义就是这个相机只安装了一个镜头;反光式取景要求机身里有一个反光板和五棱镜,取景时光线穿过镜头,再通过反光板和五棱镜的反射到达取景器,摄影者便可以在取景器中看见镜头拍摄的图像。因为它是纯粹的光学取景方式,因此关机也能从取景器看见图像,其光路如下图所示。
微单微单(Mirrorless Interchangeable-lens Camera)又被称为无反相机,是无反光镜的可换镜头相机。其内部没有反射镜,采用电子取景,光线穿过镜头不经任何反射直接投影在传感器上,摄影者依靠显示屏或电子取景器来观察画面。
区别单反与微单的本质区别是取景结构的不同。单反是采用光学取景结构的可换镜头相机,机身内部有反光镜和五棱镜;微单则是采用电子取景结构的相机,机身内部既没有反光镜,也没有五棱镜。它们的对比图如下所示:
曝光三要素曝光是指用来计算从景物到达相机的光通量大小的物理量,图像传感器只有获得正确的曝光,才能得到高质量的照片。在传统的胶片相机中,通过快门的开启,不同的明暗光线使人,景 ...
电流检测电路(未完待续)
8b964abdcbe4167494dfe5c8bfb76b0869e90686022ef342a659427b57a83d1842e33df6bcfa4d9982dec9c958b4211fb46ce7ec77d540bfd956cd651bf52a636bebd07aea1cfa1376e5d4117b906221701474919baa650458a28578e0c793722f61f6173ab49413b40066ab8b1e50f21032468d163cd9429328df8afdf32f5db0a451399d4f7bb2a17348af8f5b7cc8a73971558a31e00705d15d05c14f66678c7a2c268c1ada0ed1f6fa6217630db1b4895d4c986fcb539ae73c82cea79e3f3f0b8bb39bf92f6d58c5a1fe4fb42bd2fded1410043ba2e4782b282eebf44114f214e5dcd846181ed35c75f1cbbe789a95a8923e3357681cc ...
ESPIDF-WIFI系列(1)
ESPIDF-WIFI系列(1)WIFI概述Wi-Fi 库支持配置及监控 ESP32 Wi-Fi 连网功能。支持配置:
station 模式(即 STA 模式或 Wi-Fi 客户端模式),此时 ESP32 连接到接入点 (AP)
AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32
station/AP 共存模式(ESP32 既是接入点,同时又作为基站连接到另外一个接入点)
上述模式的各种安全模式(WPA、WPA2 及 WEP 等)
扫描接入点(包括主动扫描及被动扫描)
使用混杂模式监控 IEEE802.11 Wi-Fi 数据包
基站模式(又称 STA 模式或 Client 模式):将 ESP 连接到附近的 AP,此时相当于 ESP 在蹭网。
AP 模式(又称 Soft-AP 模式或 Server 模式):将 ESP 设置为 AP,可供周围设备连接,此时相当于ESP 开热点。
AP-STA 共存模式:ESP32 既是接入点,同时又作为基站连接到另外一个接入点,此时相当于 ESP 连着隔壁 wifi 开热点给自家用。
AP模式在 AP ...