logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

环形缓冲区(Ring Buffer)

是一个具体大小为 8 的环形缓冲区实现。环形缓冲区是一种利用固定大小的数组和两个循环移动的指针(头指针用于写,尾指针用于读)来实现高效 FIFO 队列的数据结构。它的核心优势在于 O(1) 时间复杂度的插入和删除操作、内存复用以及避免数据搬移。关键点在于理解指针的循环移动(通过取模运算)以及如何正确判断缓冲区的空和满状态(常用策略是牺牲一个槽位或使用计数器)。它在嵌入式系统、驱动开发、流处理、生产

#java#算法#前端
STM32F103C8Tx 链接脚本(Linker Script)详细分析

本文介绍了STM32微控制器的链接脚本(Linker Script)配置要点。链接脚本的核心作用包括:定义FLASH(64K)和RAM(20K)的物理地址范围,分配程序段到存储区域(如代码放FLASH,变量放RAM),并确保硬件兼容性。关键配置包括:设置入口点为Reset_Handler,栈顶地址为RAM末端,定义最小堆栈空间(堆512B,栈1024B)。脚本详细说明了各段的分配策略,特别是中断向

#stm32#单片机
STM32F103C8T6 的内存映射

STM32 微控制器采用的方式。这意味着 CPU 访问的所有资源(程序存储器 Flash、数据存储器 RAM、外设寄存器等)都被分配到一个巨大的、连续的(0x0000 0000 到 0xFFFF FFFF) 中。CPU 只需要通过地址(和访问方式)来区分它是在读 Flash 的数据、RAM 的变量,还是在配置一个外设寄存器。这个地址空间的布局规划就是 **内存映射**。

#stm32#嵌入式硬件#单片机
RO Data RW Data ZI Data这些都是啥

链接器脚本和启动文件利用这些概念和生成的符号,在芯片启动时自动完成数据的正确初始化,为 C 程序的执行准备好正确的内存环境。| rwdata | .data| 初始化变量| RAM(运行时) Flash(初始值) |是嵌入式开发(特别是 ARM 生态)中广泛使用的术语,用于描述链接器如何处理不同类型的数据段。:有初始值(在 Flash),运行时在 RAM 可修改,启动时需要。:无初始值(或初始值就

#stm32#单片机
stm32的启动过程模式

系统储存器指的是STM32的内置ROM,选择该启动模式后,内置ROM的起始地址0x1FFF0000,将被重映射到0x00000000地址,代码在此处开始运行。3.从嵌入式SRAM中启动,选择该启动模式后,内置SRAM的起始地址0x20000000将被重映射到0x00000000地址,代码在此处开始运行。复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。当系统复位后,处理器从向量表中

#stm32#嵌入式硬件#单片机
环形缓冲区(Ring Buffer)

是一个具体大小为 8 的环形缓冲区实现。环形缓冲区是一种利用固定大小的数组和两个循环移动的指针(头指针用于写,尾指针用于读)来实现高效 FIFO 队列的数据结构。它的核心优势在于 O(1) 时间复杂度的插入和删除操作、内存复用以及避免数据搬移。关键点在于理解指针的循环移动(通过取模运算)以及如何正确判断缓冲区的空和满状态(常用策略是牺牲一个槽位或使用计数器)。它在嵌入式系统、驱动开发、流处理、生产

#java#算法#前端
RO Data RW Data ZI Data这些都是啥

链接器脚本和启动文件利用这些概念和生成的符号,在芯片启动时自动完成数据的正确初始化,为 C 程序的执行准备好正确的内存环境。| rwdata | .data| 初始化变量| RAM(运行时) Flash(初始值) |是嵌入式开发(特别是 ARM 生态)中广泛使用的术语,用于描述链接器如何处理不同类型的数据段。:有初始值(在 Flash),运行时在 RAM 可修改,启动时需要。:无初始值(或初始值就

#stm32#单片机
STM32F103C8Tx 链接脚本(Linker Script)详细分析

程序从启动文件中的函数开始执行(初始化硬件和跳转到main栈顶位于 RAM 的末尾(// 512 字节堆// 1024 字节栈若堆栈空间不足,链接器将报错。FLASH起始位置(0x8000000:存储中断服务函数的入口地址。确保向量表不被优化删除。.text:代码(.text)、内联函数(.text*)、ARM/Thumb 切换(.glue_7.glue_7t_etext标记代码段结束地址(用于初

#stm32#单片机
到底了