FreeRTOS task 源码解析 [toc] FreeRTOS 本质上就是有很多的 List 组成,所以学习之前最好要对 FreeRTOS 中的链表要有所了解,可以参考:FreeRTOS 列表 List 源码解析 源码都在 task.c 中 一、基本结构和变量1、TCB_t首先来看一下一个任务的结构: 123456789101112131415161718192021222324252627282930313233343 2024-11-11 嵌入式 > FreeRTOS #FreeRTOS
BLE 协议之 GATT [toc] 在上一节讲了什么是 ATT,ATT 之所以称作 protocol,是因为它还比较抽象,仅仅定义了一套机制,允许 Client 和 Server 通过 Attribute 的形式共享信息。而具体共享哪些信息,ATT 并不关心,因为这是由 GATT(Generic Attribute Profile)来控制。 GATT 相对 ATT 只多了一个 G,但含义却大不同,因为 GATT 是一个 2024-11-07 通信协议 > BLE #通信协议 #BLE
BLE 协议之 ATT [toc] 在前面的章节中,我们自低向上,分析了 BLE 协议栈中的 Physical Layer、Link Layer、L2CAP: Physical Layer 负责提供一系列的 Physical Channel ; 基于这些 Physical Channel,Link Layer 可在两个设备之间建立用于点对点通信的 Logical Channel ; L2CAP 则将这个 Logic 2024-11-05 通信协议 > BLE #通信协议 #BLE
Git 查错记录 [toc] 本文记录本人了最近在 Git 开发遇到的一些问题 一、ssh: connect to host github.com port 22: Connection refused123456$ git pull originssh: connect to host github.com port 22: Connection refusedfatal: Could not read f 2024-11-03 工具 > Git #工具 #Git
【STM32】通过 DWT 实现毫秒级延时 [toc] 零、前言在 FreeRTOS 中,SysTick 被用于作为调度器的一部分进行任务调度,那么如果我需要使用软件模拟通信,例如软件 I2C,需要使用 delay,就无法使用 SysTick 实现的 delay。 因此,这里提供一种基于 DWT 实现的 delay。 一、DWT在实现我们的代码之前,如果你没有了解过 DWT,那就先来看一下: 这里只介绍待会儿会用到的延时相关的内容 2024-11-02 嵌入式 > STM32 #嵌入式 #STM32
BLE 协议之 L2CAP [toc] 一、简介经过 Link Layer 的抽象之后,两个 BLE 设备之间可存在两条逻辑上的数据通道: 一条是无连接的广播通道,天高任鸟飞 另一条是基于连接的数据通道,是一个点对点(Master to Slave)的逻辑通道。 广播通道暂且不提,这个数据通道(后面简称逻辑通道,Logical Channel),要怎么使用,还需要一番思索,例如: Logical Channel 只 2024-11-01 通信协议 > BLE #通信协议 #BLE
BLE 协议之传输层 [toc] 在 BLE 协议中,传输层位于 Host 和 Controller 之间,提供一种无需知道数据内容便可以传输数据的能力。其主要是通过硬件传输介质(如:UART、SDIO、USB 等),传输上层数据。 上图即是 UART 传输层的功能框图。 一、HCI 简介 Core5.4 P1728 该图展示了两个设备之间的数据传输路径。Host 通过 HCI Driver 和 Control 2024-10-25 通信协议 > BLE #通信协议 #BLE
STM32 调试之栈回溯和 CmBacktrace 的使用 [toc] 一、栈回溯1、寄存器知识在 Cortex-M 上弄清楚栈的布局,就必须理解 Cortex-M 上的压栈入栈的机制和原理。下面从该体系架构上说说 Cortex-M 上比较重要的细节。 按照 ARM Cortex-M 的设计,一共有 32 个寄存器。 13 个通用寄存器,r0-r12 2 个不同模式下使用的 SP PSP(SP_process) MSP(SP_main) 1 个链 2024-10-24 嵌入式 > STM32 #嵌入式 #STM32 #调试
动态链接过程分析 [toc] 上文 静态链接过程分析 讲解了静态链接的过程,尤其强调了重定位的过程。本文将继续介绍动态链接的过程。 一、前言静态链接得到的可执行程序,被操作系统加载之后就可以直接执行。 因为在链接的时候,链接器已经把所有目标文件中的代码、数据等 Section,都组装到可执行文件中了。并且把代码中所有使用的外部符号(变量、函数),都进行了重定位(即:把变量、函数的地址,都填写到代码段中需要重定位的 2024-10-23 Linux #Linux #动态链接
静态链接过程分析 @toc 本文测试环境为 ubuntu20.04 + gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) 一、开始首先,编写两个简单的文件用于待会儿的分析: 123456789101112131415161718192021// swap.cint shared = 1;void swap(int *a, int *b){ in 2024-10-22 Linux #Linux #静态链接