- 博客(14)
- 收藏
- 关注
原创 一文讲透 Keil 分散加载文件(.sct):STM32 Flash/RAM 内存分配
Keil编译链接过程的内存分配机制是通过链接脚本(分散加载文件)主导地址映射,结合编译器与链接器协同工作实现。首先编译器将代码/数据按功能属性分类为不同段(如.text、.rodata、.data等),并支持通过__attribute__自定义段。随后链接器根据分散加载文件(.sct)的规则,将各段精确分配到MCU的Flash和RAM指定地址空间,确保不越界。关键点包括:中断向量表必须位于Flash起始地址,函数代码连续分配,只读常量与代码段混合存放,以及通过自定义段实现特定地址分配(如Flash末尾存储校
2026-01-06 21:48:31
526
原创 浅谈密码学中公钥与私钥的关系
公钥和私钥是一对数学互逆的密钥,公钥用于加密和验证签名,私钥用于解密和生成签名。加密过程(公钥加密→私钥解密)确保信息保密性,只有私钥持有者能解密;签名过程(私钥签名→公钥验证)则保证消息来源可信,只有私钥持有者能生成有效签名。本质上,公钥实现"公开参与",私钥确保"专属控制"。二者配合既解决了信息保密问题,又实现了身份认证功能。
2026-01-02 12:43:42
412
原创 JLink 下载原理全解析:从硬件到软件,一文讲透!(建议收藏)
摘要:本文深入解析JLink调试器下载固件的底层原理和工作流程。作为嵌入式开发必备工具,JLink通过SWD/JTAG接口控制MCU,核心原理是将Flash编程算法下载到MCU的RAM中,由MCU自行完成Flash擦写操作。文章详细介绍了从连接握手到校验运行的完整下载链路,分析了下载速度慢的五大原因(如接口速度、Flash特性等),并针对常见下载失败问题提供了解决方案。关键结论是:JLink并非直接操作Flash,而是通过传输固件、下载算法、指令控制和校验四个核心步骤,让MCU自主完成Flash编程。
2025-12-09 21:48:46
515
原创 浅谈CRC循环冗余校验
(Cyclic Redundancy Check,循环冗余校验)是一种数据传输或存储中常用的差错检测技术,通过对数据进行多项式运算生成校验值,用于验证数据在传输或存储过程中是否发生错误。
2025-10-18 09:54:13
921
1
原创 嵌入式八股文之返回局部变量指针
可以返回局部变量的值(值会被复制,安全);不能返回局部变量的地址(或指针)(变量生命周期结束后,地址失效,导致未定义行为)。
2025-10-15 11:17:25
297
原创 为什么不能在中断中使用任务态API??
在FreeRTOS中,中断服务程序(ISR)内使用任务态API(非FromISR版本)会导致严重问题,包括:1)中断阻塞破坏实时性,因任务态API含阻塞机制;2)损坏内核数据结构,因错误修改任务上下文;3)引发未定义行为,如数据竞争。典型错误如xQueueSend在队列满时会使ISR卡死。正确做法是使用FromISR后缀的API并通过portYIELD_FROM_ISR手动切换任务。该规则是确保系统稳定性的关键。
2025-10-11 18:29:17
353
原创 嵌入式八股文之如何不用sizeof求int的字节数
但是不必灰心我们以及找到技巧了,既然指针的算术差是相隔的元素,那么又已知char型内存大小是1byte,那么我们就可以用char指针算术差来表示相差char类型的元素个数 = 相差的byte数。驻波遇到这个问题的时候立马想到能不能声明一个连续的内存空间,然后求两个连续int变量地址的差,如下图。,但是c语言中int型显然是四个字节。这是因为在C语言中,但是很快驻波发现这样无论怎样输出都是。得到的不是两个地址的简单算术差,而是。
2025-09-21 15:35:13
238
原创 入门Git指令,从流程入手
指令操作区域比喻作用git add工作区 → 暂存区把货放上打包台预约下一次提交的内容git commit暂存区 → 本地仓库把打包台上的货打包贴标,放上本地货架在本地创建一个永久的检查点git push本地仓库 → 远程仓库把本地货架上的新包裹发货到总仓库将本地提交同步到远程服务器重要提示git add和git commit的操作完全在本地完成,不需要网络。你可以频繁地提交,记录你的工作进度。只有git push需要网络连接,它负责将本地的一系列提交一次性上传到远程。在执行。
2025-09-18 08:52:27
974
原创 单片机裸机和RTOS中断任务切换那些事~
本文系统介绍了单片机及RTOS的中断上下文切换机制。核心要点包括:1)R4-R11作为被调用者保存寄存器,在函数调用和中断处理中需要严格保护;2)单片机中断处理流程包括硬件自动压栈、软件手动保存/恢复寄存器等步骤;3)RTOS通过PendSV机制实现任务切换,包含完整的上下文保存和恢复过程;4)详细分析了三种常见错误切换情况:寄存器污染、栈指针错配和错误的阻塞操作,这些错误会导致系统崩溃。文中特别强调R4-R11保护的重要性,并指出在ISR中必须使用FromISR版本API以避免破坏任务上下文。
2025-08-29 13:04:36
1266
原创 浅谈常见的设计模式
本文介绍了嵌入式系统中常用的五种设计模式及其C语言实现方法:1. 工厂模式:通过封装对象创建过程,实现传感器等模块的统一管理,用户只需指定类型即可获取对应功能。2. 单例模式:确保全局唯一实例,适用于串口、日志等需要统一管理的资源。3. 策略模式:将可替换算法封装成独立模块,实现运行时灵活切换不同行为。4. 状态机模式:用结构体+函数指针替代条件判断,提高状态管理的清晰度和可扩展性。5. 观察者模式:通过回调机制实现事件通知,增强模块间解耦。每种模式都通过具体嵌入式场景实例说明,并给出C语言实现方案,强调利
2025-08-04 14:40:01
812
原创 嵌入式软件运行流程
嵌入式系统启动流程解析:从硬件复位到多任务运行 本文系统阐述了嵌入式软件从硬件上电到多任务调度的完整启动过程。核心环节包括: 上电复位阶段:CPU通过向量表获取初始栈指针和复位处理函数,startup.s完成.data/.bss段初始化; 板级初始化:重点配置时钟树(HSI→HSE→PLL)、GPIO和中断控制器; Bootloader机制:实现向量表重定向和双Bank升级的安全跳转; RTOS初始化:通过PendSV中断实现任务上下文切换,建立首个任务栈结构; 多任务调度:结合SysTick中断实现周期性
2025-07-18 13:59:46
1082
原创 STM32外设驱动速览
摘要:本文详细介绍了STM32单片机GPIO、定时器、中断等模块的编程方法。主要内容包括:1) 通过寄存器与库函数两种方式实现LED控制;2) GPIO输入模式实现按键检测及消抖处理;3) 中断系统原理与外部中断EXTI配置;4) 定时器TIM的基础应用,包括定时中断、外部时钟输入;5) 定时器高级功能:PWM输出比较、输入捕获测量频率/占空比;6) 编码器接口测速原理与实现。文中提供了完整的代码示例,涵盖时钟配置、引脚初始化、中断处理等关键步骤,是STM32外设开发的实用指南。
2025-07-05 15:34:40
1155
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅