Projectsauron
码龄2年
关注
提问 私信
  • 博客:2,869,685
    社区:2
    2,869,687
    总访问量
  • 100
    原创
  • 5,074
    排名
  • 2,106
    粉丝
  • 121
    铁粉
  • 学习成就

个人简介:昨夜西风凋碧树,独上高楼,望尽天涯路。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:辽宁省
  • 加入CSDN时间: 2022-09-21
博客简介:

Projectsauron 的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    5
    当前总分
    1,832
    当月
    138
个人成就
  • 获得3,709次点赞
  • 内容获得1,138次评论
  • 获得3,372次收藏
  • 代码片获得1,314次分享
创作历程
  • 100篇
    2024年
成就勋章
TA的专栏
  • Linux 内核
  • Linux
    6篇
  • Linux 命令
    8篇
  • Linux 性能优化/调试
    8篇
  • Linux 内核之内存管理
    8篇
  • Linux 内核之进程调度
    3篇
  • Linux 内核之中断机制
    2篇
  • 嵌入式
    8篇
  • STM32
    16篇
  • ESP32
    6篇
  • FreeRTOS
    13篇
  • LVGl
    16篇
  • 通信协议
    5篇
  • 蓝牙协议栈
    7篇
  • 工具
  • CMake
    3篇
  • Git
    2篇
兴趣领域 设置
  • 编程语言
    c++c语言
  • 开发工具
    githubdockervisualstudio
  • 嵌入式
    单片机stm32mcu物联网嵌入式实时数据库
  • 操作系统
    linuxubuntugnurisc-v
  • 服务器
    ubuntuunix
  • IT工具
    vim
  • 开源
    github
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

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

FreeRTOS task 源码解析

FreeRTOS 本质上就是有很多的 List 组成,所以学习之前最好要对 FreeRTOS 中的链表要有所了解,可以参考:FreeRTOS 列表 List 源码解析源码都在 task.c 中一、基本结构和变量1、TCB_t首先来看一下一个任务的结构:typedef struct tskTaskControlBlock {
原创
发布博客 前天 15:52 ·
738 阅读 ·
15 点赞 ·
0 评论 ·
17 收藏

BLE 协议之 GATT

GATT):通用属性, 低功耗蓝牙的设备之间的通信协议。GATT 使用 ATT 协议, 定义了一套服务框架,用于发现、读写、通知、广播信息的配置。角色的定义Client:主要向服务器发送命令和请求,接收服务器的响应Server:接收命令和请求,发送响应Service服务是完成特定功能或特性的数据和相关行为的集合。在 BLE 从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个特征值。每个具体的特征值才是 BLE 通信的主题。
原创
发布博客 2024.11.07 ·
631 阅读 ·
12 点赞 ·
0 评论 ·
22 收藏

BLE 协议之 ATT

ATT) ,BLE 属性协议,它是处于L2CAP协议层与GATT之间的一层属性操作协议,用于在一对蓝牙设备之间发现、读取、写入属性。这一层的关键词是Attribute属性一个属性就是一条数据,属性是 BLE 数据提供单元,也是蓝牙空中传播数据的最上层,BLE 开发过程中接触最多的就是这一层。属性协议允许称为服务器的设备向称为客户端的对等设备公开一组属性及其相关值。服务器公开的这些属性可以被客户端发现、读取和写入,并且 可以由服务器指示和通知。属性类型,通过UUID表示属性类型指定属性表示什么含义。
原创
发布博客 2024.11.05 ·
1019 阅读 ·
25 点赞 ·
0 评论 ·
12 收藏

Git 查错记录

本文记录本人了最近在 Git 开发遇到的一些问题。
原创
发布博客 2024.11.03 ·
986 阅读 ·
31 点赞 ·
0 评论 ·
27 收藏

【STM32】通过 DWT 实现毫秒级延时

在 FreeRTOS 中,SysTick被用于作为调度器的一部分进行任务调度,那么如果我需要使用软件模拟通信,例如软件 I2C,需要使用 delay,就无法使用 SysTick 实现的 delay。因此,这里提供一种基于 DWT 实现的 delay。
原创
发布博客 2024.11.02 ·
885 阅读 ·
30 点赞 ·
0 评论 ·
23 收藏

BLE 协议之 L2CAP

一条是无连接的广播通道,天高任鸟飞另一条是基于连接的数据通道,是一个点对点()的逻辑通道。广播通道暂且不提,这个数据通道(后面简称逻辑通道,只有一条,而要利用它传输数据的上层应用却不止一个(例如上图中的 ATT 和 SMP),怎么复用?所能传输的有效 payload 长度最大只有 251bytes,怎是否意味着上层应用每次只能传输少于这个长度的数据?(显然不能!仅提供了简单的应答和流控机制,如果传输的数据出错怎么办?协议信道复用(
原创
发布博客 2024.11.01 ·
766 阅读 ·
25 点赞 ·
0 评论 ·
22 收藏

BLE 协议之传输层

该图展示了两个设备之间的数据传输路径。Host 通过HCI Driver和Controller硬件上的交换数据和命令,这就是 HCI 的功能。HCI提供了一种统一接口用来访问,控制Controller,传输层是透明的,独立于底层传输技术,并且无需关系Host传输给Controller的数据是什么内容.在HOST与Controller之间,以Command与Event命令方式进行传输。Host发送Command信息到ControllerController将和Params以Event的形式返回给Host。
原创
发布博客 2024.10.25 ·
1194 阅读 ·
39 点赞 ·
11 评论 ·
22 收藏

STM32 调试之栈回溯和 CmBacktrace 的使用

上图将通用寄存器分为 low register 和 high registers 就是根据指令集来说的,对于 Thumb 指令,是 16 位的,只能访问到 low register,也就是 R0-R7,而对于 32 位的 Arm 指令,是所有的指令都可以访问到。在不同的模式下,R0-R12、SP、LR 是各有一份的,所以这样算下来,总共是 32 个寄存器,但是在不同的模式下,并不能完全看到这 32 个寄存器的状态,只能看到其中的一部分。栈中数据和前面提到的寄存器是对应的,现在 SP 指针指向了地址。
原创
发布博客 2024.10.24 ·
2266 阅读 ·
27 点赞 ·
4 评论 ·
42 收藏

动态链接过程分析

静态链接得到的可执行程序,被操作系统加载之后就可以直接执行。因为在链接的时候,链接器已经把所有目标文件中的代码、数据等 Section,都组装到可执行文件中了。并且把代码中所有使用的外部符号(变量、函数),都进行了重定位(即:把变量、函数的地址,都填写到代码段中需要重定位的地方),因此可执行程序在执行的时候,不依赖于其它的外部模块即可运行。这里的前提是可执行文件是可写的。而对于动态链接来说,在编译阶段,仅仅是在可执行文件或者动态库中记录了一些必要的信息。
原创
发布博客 2024.10.23 ·
2613 阅读 ·
26 点赞 ·
4 评论 ·
34 收藏

静态链接过程分析

这样,通过两个重定位操作,main.c的两个外部符号就解决了地址重定位问题。中间圈出的两个数据和前面计算的是一样的!以上就是静态链接过程中地址重定位的基本过程,与动态链接相比,静态链接还是相对简单很多。
原创
发布博客 2024.10.22 ·
2992 阅读 ·
37 点赞 ·
11 评论 ·
38 收藏

ESP32-IDF 非易失存储 NVS

NVS(,非易失存储),意思是掉电后能依然能持久化保存数据。在我们应用 NVS 时,一般用于存储一些配置数据、状态数据等,一般不会用来存储存放大量的数据量。在嵌入式系统中,NVS 主要是在 Flash 进行键值对的存储。举个例子,假设我们要把东西存到 Flash 中,按照底层的操作习惯,我们要先指定一个地址,然后对这个地址执行擦除操作,然后才能写入;读取的时候也需要根据这个地址,然后指定读取长度。如果我们要存的项比较多,又在代码中比较分散,我们对 Flash 的地址就很难管理。
原创
发布博客 2024.10.21 ·
3916 阅读 ·
29 点赞 ·
26 评论 ·
35 收藏

ESP32-IDF 分区表

使用时要添加头文件。每片 ESP32-C3 的 flash 可以包含多个应用程序,以及多种不同类型的数据(例如校准数据、文件系统数据、参数存储数据等)。因此,我们在 flash 的 默认偏移地址 0x8000 处烧写一张分区表。分区表的长度为 0xC00 字节,最多可以保存 95 条分区表条目。MD5 校验和附加在分区表之后,用于在运行时验证分区表的完整性。分区表占据了整个 flash 扇区,大小为 0x1000 (4 KB)。因此,它后面的任何分区至少需要位于 (默认偏移地址) + 0x1000 处。
原创
发布博客 2024.10.20 ·
4634 阅读 ·
37 点赞 ·
4 评论 ·
26 收藏

ESP32-IDF 通用定时器 GPTimer

*!/*!/*!/*!struct {/*!/*!} flags;/*!clk_src:时钟源direction:计数方向(如递增、递减):计数器分辨率(工作频率),以 Hz 为单位,因此,每个计数滴答的步长等于()秒:GPTimer 中断优先级,如果设置为 0,驱动程序将尝试分配优先级相对较低的中断 (1,2,3)flags:设置为 1,定时器中断号可以与其他外设共享:设置为 1,驱动程序会在进入睡眠模式前备份并在恢复时恢复 GPTimer 的寄存器。
原创
发布博客 2024.10.19 ·
4187 阅读 ·
23 点赞 ·
17 评论 ·
30 收藏

ESP32-IDF USART 专题

typedef struct { int baud_rate; /*!< UART baud rate*/ uart_word_length_t data_bits; /*!< UART byte size*/ uart_parity_t parity; /*!< UART parity mode*/ uart_stop_bits_t stop_bits; /*!< UART s
原创
发布博客 2024.10.18 ·
4123 阅读 ·
16 点赞 ·
9 评论 ·
16 收藏

ESP32-IDF GPIO 专题

API 参考路径。ESP-IDF由多个组件组成,组件中包含专门为 ESP 芯片编写的代码或第三方库(即第三方组件)。对于某些第三方库,ESP-IDF提供专用的包装器和接口,以简化对第三方库的使用,或提高其与ESP-IDF其他功能的兼容性。某些情况下,第三方组件将直接呈现底层库的原始 API。
原创
发布博客 2024.10.17 ·
4777 阅读 ·
62 点赞 ·
16 评论 ·
22 收藏

CMake 教程(三)添加库的使用要求

目标参数的使用要求可以更好地控制库或可执行文件的链接和包含行,同时还能在 CMake 内部更好地控制目标的传递属性。中的代码,以使用现代 CMake 方法。我们将让我们的库定义自己的使用要求,以便在必要时将它们传递给其他目标。,并输入目标库的名称。在大型项目中,手动指定库依赖关系的传统方法很快就会变得非常复杂。请注意,使用这种技术,我们的可执行目标要使用我们的库,唯一要做的就是调用。的任何人都需要包含当前源代码目录,而。再按照上一节的方法来编译运行,效果一致。的使用要求,我们可以安全地从顶级。
原创
发布博客 2024.10.16 ·
3855 阅读 ·
8 点赞 ·
7 评论 ·
16 收藏

CMake 教程(二)添加库

在第一节中,我们已经了解和实现了通过 CMake 来创建一个基本项目。本节我们将通过两个实例来学习如何在项目中创建和使用库。
原创
发布博客 2024.10.15 ·
5298 阅读 ·
33 点赞 ·
7 评论 ·
22 收藏

CMake 教程(一)初识 CMake

要启动项目,我们使用project()命令来设置项目名称。每个项目都需要此调用,并且应在之后立即调用。正如我们稍后将看到的,此命令还可用于指定其他项目级别信息,例如语言或版本号。[VERBATIM]
原创
发布博客 2024.10.14 ·
6004 阅读 ·
39 点赞 ·
18 评论 ·
31 收藏

Cortex-M 内核的 OS 特性

PendSV典型使用场合是在上下文切换时(在不同任务之间切换)。上下文切换的本质就是保存当前执行现场 A,切换到另一个任务 B 里面。切换回来时又要恢复执行现场 A(将一系列的寄存器入栈、出栈)。由于PendSV的特点就是支持缓期执行,所以 RTOS 可以利用它这个特点,进行任务调度过程的上下文切换。而为什么要使用缓期执行的特点来进行上下文切换呢?简单的说就是任何 RTOS,都需要尽量不打断外设中断。执行一个系统调用系统滴答定时器 SYSTICK 中断,触发了任务的调度。
原创
发布博客 2024.10.13 ·
7891 阅读 ·
88 点赞 ·
15 评论 ·
31 收藏

DMA 详解

DMA,直接存储器访问)顾名思义,就是绕开 CPU 直接访问 Memory。在计算机中,相比 CPU,Memory 和外设的速度是非常慢的,因而在 Memory 和 Memory (或者 Memory 和外设)之间搬运数据,非常浪费 CPU 的时间,造成 CPU 无法及时处理一些实时事件。因此,工程师们就设计出来一种专门用来搬运数据的器件——DMA 控制器(DMAC),协助 CPU 进行数据搬运。
原创
发布博客 2024.10.10 ·
7154 阅读 ·
33 点赞 ·
9 评论 ·
31 收藏
加载更多