- 博客(480)
- 资源 (23)
- 问答 (1)
- 收藏
- 关注
原创 ARM 架构程序状态寄存器(PSR)详解:从基础概念到现代实现
PSR就像是处理器的“实时状态报告单”或“身份证”。刚完成的运算结果如何?(正/负/零/溢出?处理器正在做什么工作?(用户程序还是异常处理?什么能打断当前工作?(中断是否使能?处理器怎么理解指令?(ARM模式还是Thumb模式?
2025-12-10 21:47:50
1731
原创 ARM 架构中的浮点寄存器(Floating-Point Registers)
ARM架构中的浮点寄存器支持高效的浮点运算和SIMD并行计算。ARMv8架构提供32个128位V寄存器,可灵活访问不同数据宽度(16B/8H/4S/2D)。浮点运算采用IEEE 754标准,通过专用FPU单元执行。NEON技术实现SIMD并行处理,单个指令可操作多个数据元素。控制寄存器FPCR/FPSR管理运算模式和状态标志。编译器会自动优化浮点代码,将变量分配到浮点寄存器,并使用专用指令(如FMOV、FADD)进行计算。这种架构特别适合科学计算、图形处理等需要高性能浮点运算的场景。
2025-12-16 22:35:34
677
原创 FreeRTOS是什么?
FreeRTOS是一款开源轻量级实时操作系统内核,专为嵌入式系统设计,支持多任务调度、内存管理和通信机制。其核心特性包括实时性、高效性(内核仅几KB)、跨平台支持(40+处理器架构)和MIT开源许可。关键功能涵盖任务管理、同步通信(队列/信号量等)及中断处理,广泛应用于物联网、工业控制等领域。相比μC/OS等RTOS,FreeRTOS以社区活跃和商业友好著称,2017年被亚马逊收购后增强了IoT功能。建议通过STM32/ESP32开发板实践任务调度等基础功能入门。
2025-12-16 22:33:53
379
原创 ARM 汇编指令:LDR
LDR是ARM汇编中的加载指令,用于将内存数据读取到寄存器,类似C语言的指针解引用。其基本语法为LDR{条件}{大小} 目标寄存器, 源内存地址,支持固定地址、寄存器地址及带偏移量的寻址方式。常见变体包括LDRH(半字)、LDRB(字节)等不同数据大小的加载。伪指令LDR =用于加载地址或立即数,而[Rn]形式才是真正的内存读取。LDR与STR指令配对使用,分别实现内存读写,是访问变量、外设寄存器和数据结构的基础操作。核心功能可概括为"从内存搬数据到寄存器"。
2025-12-15 21:15:51
739
原创 ARM 架构中的 CONTROL 寄存器
本文详细介绍了ARM Cortex-M架构中的CONTROL寄存器功能与应用。该寄存器主要控制栈指针选择(MSP/PSP)、线程模式特权级别(特权/用户级)和FPU上下文管理。在RTOS任务切换、特权分离等场景中发挥关键作用,通过MSR/MRS指令或CMSIS函数进行访问。文章还强调了修改CONTROL后的ISB同步要求,并对比了其与APSR、PRIMASK等寄存器的区别。深入理解CONTROL寄存器对RTOS和安全固件开发至关重要,具体实现需参考芯片技术手册。
2025-12-15 18:54:34
921
原创 雪花ID(Snowflake ID)是什么?
雪花ID是Twitter开源的分布式唯一ID生成算法,采用64位结构(1位符号+41位时间戳+10位机器ID+12位序列号),兼具全局唯一性和时间有序性,适合高并发分布式场景。其核心优势包括本地高效生成(每秒百万级)、对数据库索引友好,但需注意时钟回拨风险及机器ID动态管理问题。相比UUID的无序性和数据库自增ID的中心化依赖,雪花ID在电商、支付等需有序唯一标识的业务中表现更优,但需处理前端长整型精度限制。
2025-12-14 22:37:22
297
原创 GUID为什么不会重复?
GUID几乎不会重复,主要由于128位的庞大组合空间(约3.4×10³⁸种可能)和精心设计的生成算法。不同版本融合了时间戳、MAC地址、命名空间散列或高质量随机数等唯一性因素。现代系统使用密码学安全随机数生成器,使重复概率低至可忽略不计(约2.71×10¹⁸次生成才有50%碰撞几率)。工程实践中从未发现非故意的重复案例,其唯一性已成为分布式系统的基石。虽然数学上可能重复,但实际风险远低于硬件故障等极端事件。
2025-12-14 22:22:23
667
原创 ARM 架构中的数据内存屏障指令 DMB
本文介绍了ARM架构中的数据内存屏障(DMB)指令。DMB是一种同步指令,用于确保其之前的内存访问操作完成后才执行后续操作,解决多核环境下因乱序执行和缓存导致的内存一致性问题。文章详细分析了DMB的必要性、语法参数(如SY、ISH等作用域选项),并对比了DMB与DSB、ISB等其他屏障指令的差异。DMB是构建可靠多线程程序的基础硬件原语,通过控制内存访问顺序实现正确的同步机制。在高级语言中通常通过编译器内置函数或操作系统API间接使用DMB指令。
2025-12-13 21:52:45
915
原创 如何用 VS Code + C# Dev Kit 创建类库项目并在主项目中引用它?
本文介绍了在VS Code中使用C# Dev Kit创建类库项目并引用的完整流程。主要内容包括:通过命令行或GUI创建解决方案和项目、配置项目引用关系、编写示例代码、构建运行和调试配置。还提供了常见问题解决方法,如命名空间找不到、引用未生效等。文章推荐从解决方案根目录打开项目,利用C# Dev Kit的测试资源管理器、依赖关系图等工具提高开发效率,实现类库代码的共享使用。
2025-12-13 20:14:23
737
原创 如何使用 VSCode 编写 C# 代码?
在 Visual Studio Code (VSCode) 和 Visual Studio(VS)中编写C#代码,核心区别在于一个是,另一个是如果说Visual Studio是专为大型项目打造的“豪华工作站”,那么VSCode则是为现代、灵活开发而生的“多功能军刀”。使用VSCode编写C#代码的主要优势体现在以下几个核心方面:✨.sln.csproj。
2025-12-12 23:21:10
779
原创 Windows磁盘清理技巧分享
Windows磁盘清理技巧总结:使用系统自带的磁盘清理工具(cleanmgr)可删除临时文件、回收站内容等;开启存储感知功能自动清理;手动清理%temp%文件夹和浏览器缓存。推荐使用CCleaner等专业工具辅助清理,通过SpaceSniffer查找大文件。定期维护包括每周清空回收站、每月深度扫描。注意事项包括备份重要数据、保留系统文件、确保15-20%剩余空间。简单组合使用Windows磁盘清理+CCleaner即可有效清理大部分垃圾文件。
2025-12-12 22:46:31
472
原创 ARM 架构中的数据同步屏障 DSB
例如,向一个设备寄存器写入控制命令,需要确保这个写入操作确实到达设备,才能进行下一步(如读取设备状态)。在改变 MMU 配置(如修改地址翻译表)后,需要执行 DSB 确保之前的内存访问已完成,然后再更新系统寄存器(如 TTBR),最后可能还需要 ISB。在写入新的指令到内存后,需要 DSB 确保写入完成,然后可能清除指令缓存,最后用 ISB 确保后续执行新指令。在切换地址空间或修改系统寄存器前,可能需要 DSB 来确保之前的内存访问在系统中可见。,直到 DSB 前面的内存访问在内存系统中彻底完成。
2025-12-11 22:23:02
1387
原创 ARM 架构中的 PRIMASK、FAULTMAST、BASEPRI 寄存器
ARM Cortex-M处理器中的PRIMASK、FAULTMASK和BASEPRI是三个关键的系统异常屏蔽寄存器。PRIMASK用于全局中断开关,FAULTMASK可屏蔽包括HardFault在内的所有异常(仅NMI除外),BASEPRI则能基于优先级阈值选择性屏蔽中断。它们分别适用于不同场景:PRIMASK保护临界代码,FAULTMASK用于故障处理,BASEPRI实现精细的中断控制。这三个寄存器共同构成了ARM架构灵活的中断管理系统,支持从全局开关到优先级控制的多种保护机制。
2025-12-11 22:10:13
669
原创 钉钉如何拉取某个员工(可能离职),某一天的打卡记录?
钉钉查询员工某天打卡记录需区分在职/离职状态。在职员工可通过管理后台【考勤打卡】模块筛选日期和员工后直接查看或导出;离职员工需管理员协助查询历史记录,或通过法律途径调取。如需批量处理或系统集成,可使用钉钉开放平台API(需开发权限),调用attendance/list接口获取精准数据。注意权限限制和数据留存周期,普通员工仅能查看本人记录。建议根据需求选择图形界面操作(单次查询)或API对接(自动化场景)。
2025-12-10 22:00:13
1036
原创 ARM 架构中的 R15 程序计数器(PC)
R15程序计数器(PC)是ARM架构中的核心寄存器,用于存储当前执行指令地址并控制程序流程。其特殊性在于经典ARM状态下PC值为当前指令地址+8(由于三级流水线机制),读取时存在固定偏移。PC不能随意写入,直接修改会引发程序跳转。现代ARM架构(如Cortex-M)中流水线更深,但对PC操作有更明确规范。PC作为程序"指挥棒",是实现函数调用、中断处理等流程控制的基础,所有程序分支最终都体现为PC值的改变。(149字)
2025-12-09 20:55:04
848
2
原创 【多核同步硬件机制】独占监视器(Exclusive Monitor)
独占监视器是多核处理器中支持原子操作的硬件机制,通过LL/SC指令对实现无锁同步。核心执行LL时标记监视的内存地址,SC仅在地址未被修改时成功写入。该机制避免了总线锁,高效支持CAS等原子操作,但需处理缓存行粒度、上下文切换等问题。不同架构(如ARM、MIPS、RISC-V)实现方式各异,x86则通过缓存一致性协议达到类似效果。独占监视器是构建上层同步原语的基础硬件支持。
2025-12-09 20:16:51
828
原创 ARM 架构中的R14链接寄存器(LR)
ARM架构中的R14(链接寄存器LR)是存储子程序返回地址的关键寄存器。当执行BL/BLX指令时,处理器自动将返回地址存入LR,通过BX LR实现返回。LR需在嵌套调用前压栈保存以防覆盖,不同处理器模式拥有独立的LR副本。在函数内保存返回地址后,LR可临时作为通用寄存器使用。64位ARMv8中X30承担相同功能。LR是硬件实现函数调用的核心机制,确保程序正确返回调用点。
2025-12-08 21:33:06
989
原创 ARM多核系统数据一致性深度解析:从硬件协议到软件实践
本文全面剖析ARM多核系统中的数据一致性机制,从硬件基础到软件实现。硬件层面详细解析MOESI缓存一致性协议、独占监视器机制和内存屏障指令;软件层面深入探讨自旋锁、读写锁等同步原语的优化实现。通过分析ARM弱内存模型特性,提供正确使用内存屏障的实践方案,并展示缓存维护操作的实际应用代码。文章为开发者构建高效可靠的ARM多核程序提供了系统性的技术参考。
2025-12-08 20:47:04
1288
原创 ARM 架构中的R13栈指针(SP)
R13(SP)是ARM架构中专用的栈指针寄存器,管理栈内存操作。核心功能包括:1)采用满递减栈机制,地址向减小方向增长;2)支持PUSH/POP指令实现数据存取;3)不同处理器模式(如用户/中断模式)拥有独立栈指针。使用需注意栈对齐要求(ARMv7需8字节对齐)和初始化规范。作为函数调用、局部变量存储的基础,SP在AAPCS标准中严格规定了调用约定,是ARM汇编编程和嵌入式开发的关键寄存器,直接影响程序的内存管理和异常处理机制。
2025-12-07 14:08:57
519
原创 ARM 架构中的指令同步屏障 ISB
特性ISB (指令同步屏障)核心作用清空处理器流水线,确保后续指令从新上下文中重新预取。同步对象指令流本身。确保指令执行与系统状态更改同步。主要场景1.修改系统寄存器后(最常用)2. 更改代码执行地址/状态后3. 自我修改代码后与DMB区别DMB控制数据访问的顺序(多核心/设备间);ISB控制指令获取的上下文(单核心内部)。简单来说,当你改变了处理器“看待世界的方式”(系统配置),你必须告诉它“忘记之前计划要做的事”(清空流水线),然后“用新的眼光重新看看接下来该做什么”
2025-12-07 13:36:44
634
原创 DBeaver + PostgreSQL 中的 Global Backup 和 Backup 的区别?
DBeaver中PostgreSQL的Backup与Global Backup核心区别在于备份范围:Backup针对单个数据库,使用pg_dump工具备份特定数据库对象;Global Backup则针对整个数据库集群,通过pg_dumpall备份所有数据库及集群级对象(用户、权限等)。前者适用于日常单库备份迁移,后者用于全实例灾难恢复。选择依据取决于需要备份的范围:单库操作选Backup,全实例迁移或用户权限备份选Global Backup。
2025-12-06 18:28:05
980
原创 Z.EntityFramework.Extensions.Core 如何批量删除数据?
Z.EntityFramework.Extensions.Core提供高效的批量删除方法,主要有两种方式: BulkDelete:对已加载的实体列表执行批量删除 Delete()扩展方法:直接生成SQL删除语句 关键优势: 显著提升大批量数据删除性能 支持同步/异步操作 可配置批量参数和事务管理 注意事项: 需商业许可 EF Core变更追踪器不会自动更新 现代EF Core版本(7.0+)已内置ExecuteDelete方法 替代方案: EF Core原生ExecuteDelete 开源库EFCore.B
2025-12-06 18:26:22
323
原创 VSCode 对各大编程语言的支持?
VSCode作为轻量级代码编辑器,通过扩展生态全面支持主流编程语言。原生支持JavaScript/TypeScript、HTML/CSS等Web技术,通过扩展可完美支持Python、Java、C++等系统语言,以及Swift、Kotlin等移动开发语言。其核心优势在于智能代码补全、调试集成、Git支持和跨平台特性,配合丰富的语言扩展(如Python的Pylance、Java的Red Hat扩展),为多语言开发提供高效环境。VSCode兼具性能与可定制性,成为开发者首选工具之一。
2025-12-05 08:30:00
321
原创 C# 中的编译指令:#nullable disable
摘要:#nullable disable是C# 8.0引入的可为空上下文指令,用于在当前作用域内禁用空引用检查。它使所有引用类型恢复为可能为空的旧行为,编译器不再发出空引用警告。该指令常用于遗留代码迁移、处理第三方库或特定文件中,可与#nullable enable、#nullable restore等指令配合使用,灵活控制可为空特性的检查范围。
2025-12-05 07:00:00
286
原创 如何永久忽略本地配置文件修改:Git 与 TortoiseGit 实战指南
本文针对团队开发中需保持远程配置文件不变但本地需频繁修改的场景,提供两种解决方案:1) Git命令行使用--assume-unchanged或--skip-worktree命令忽略文件修改;2) TortoiseGit图形界面通过右键菜单设置"Assume Unchanged"。两种方式均可实现本地修改与版本控制的隔离,但需注意远程更新不会自动同步到本地。建议配合模板文件和团队文档说明使用,并定期检查被忽略文件列表。最佳实践是采用模板文件方案并明确记录处理方式。
2025-12-04 22:31:53
1153
原创 C# 如何回收整个 EF(DbContext)对象及其相关实体的内存?
摘要: EF Core中DbContext及其实体对象的内存回收遵循.NET垃圾回收机制,但DbContext的变更跟踪器会强引用所有查询过的实体。要彻底回收内存,必须: 使用using语句或DI容器确保DbContext及时Dispose,这会释放数据库连接并清空变更跟踪器; 避免将实体赋值给长生命周期变量,如需持久化数据应使用DTO投影; 大数据量场景使用AsNoTracking()和流式查询(AsAsyncEnumerable); Web应用中依赖注入默认已管理DbContext生命周期。 关键点:及
2025-12-04 22:30:33
704
原创 FTP、FTPS、SFTP和共享文件夹的安全性对比
FTP、FTPS、SFTP和共享文件夹安全性对比摘要: FTP是最老的文件传输协议,完全不加密,安全性极差;FTPS是FTP的加密版本,通过SSL/TLS加密但保留FTP双端口缺陷;SFTP基于SSH协议,单端口高安全性,是互联网传输首选;共享文件夹(SMB)适合局域网协作,现代版本支持加密但不宜暴露到互联网。综合建议:互联网传输用SFTP,局域网共享用SMB文件夹,避免使用原始FTP协议。
2025-12-03 22:31:30
865
原创 .NET 如何引用两个不同版本的dll?
在.NET中引用不同版本DLL的解决方案:1) 使用外部别名,通过设置不同引用别名并在代码中区分调用;2) 配置程序集绑定重定向;3) 动态加载Assembly.LoadFrom;4) 创建包装器程序集隔离版本;5) 使用不同应用域隔离。最佳实践推荐优先使用外部别名,同时建议通过接口抽象、版本隔离和充分测试确保兼容性。具体方法选择取决于项目需求和架构设计。
2025-12-03 22:29:14
409
原创 如何配置 Typora + PicGo 实现图片自动上传 OSS?
Typora + PicGo 自动上传图片到阿里云OSS配置指南 本文详细介绍了如何配置Typora和PicGo实现Markdown图片自动上传到阿里云OSS: OSS准备:创建Bucket,设置公共读权限,获取AccessKey PicGo配置:安装阿里云OSS插件,填写密钥、Bucket名称、区域节点等必要信息 Typora设置:指定PicGo路径,验证上传服务 使用流程:插入图片时自动上传至OSS并替换为公网URL 配置完成后可实现Markdown文档的图片云端存储,确保跨设备访问时图片正常显示。文中
2025-12-02 22:17:01
1150
2
原创 海森堡Bug是什么?
摘要: “海森堡Bug”借用量子力学中的测不准原理,形容一类因调试行为而改变或消失的软件缺陷。常见于竞态条件、内存问题或性能敏感场景,调试工具的介入可能掩盖问题。应对策略包括非侵入式跟踪、离线记录和静态分析。这一术语反映了调试中的“观察者效应”,需采用低干扰方法定位问题。类似梗还有“薛定谔的Bug”,均凸显了软件调试的复杂性。(149字)
2025-12-02 22:12:22
638
1
原创 ARM 中的汇编指令:MRS 和 MSR
在ARM嵌入式开发中,MRS和MSR是核心汇编指令,用于系统寄存器与通用寄存器间的数据传输。MRS读取系统寄存器(如PSR、CONTROL)到通用寄存器,用于获取CPU状态;MSR将通用寄存器值写入系统寄存器,用于配置CPU行为。这对指令在中断管理、RTOS上下文切换和模式切换中至关重要,是底层硬件控制的基础。开发者可通过内联汇编或CMSIS函数调用这些指令,实现精确的处理器控制和状态管理。
2025-12-01 22:44:29
1844
原创 软件工程中的Dump是什么?
摘要: Dump(转储)是软件工程中记录程序崩溃时内存状态的文件,类似于飞机的"黑匣子"。主要分为完整Dump(全部内存信息)、核心Dump(关键错误数据)和堆Dump(内存分析专用)。Dump在开发中用于调试难以复现的Bug,分析崩溃原因和死锁问题;在运维中用于诊断线上故障、保留现场和排查内存泄漏。典型工作流程包括自动生成Dump、收集分析、定位问题和修复代码。常用工具有ProcDump、Visual Studio(Windows)、GDB(Linux)和Eclipse MAT(Jav
2025-11-30 14:00:11
1036
原创 ETB(Embedded Trace Buffer,即嵌入式跟踪缓冲区)是什么?
ETB(嵌入式跟踪缓冲区)是集成在芯片内部的RAM存储器,用于实时捕获处理器执行的指令流和数据流,而不影响系统运行。它通过跟踪宏单元(ETM)压缩记录程序执行轨迹,存储于专用SRAM中,供调试器离线重建完整执行历史。相比传统调试方法,ETB具有非侵入性、实时性强等优势,但受限于缓冲区容量和芯片成本。与ETM+TPIU、ITM等其他跟踪技术相比,ETB更适合片上深度调试和崩溃分析。这种"黑匣子"式的设计使其成为解决复杂实时系统故障的关键工具。
2025-11-30 13:42:48
771
原创 Spring 是什么?
Spring是一个开源的Java应用程序框架,专注于简化企业级Java开发。其核心特性包括依赖注入/控制反转降低代码耦合度,面向切面编程分离通用功能,强大的事务管理,以及出色的框架整合能力。Spring生态系统包含多个子项目:核心框架Spring Framework、简化开发的Spring Boot、微服务工具集Spring Cloud、数据访问层Spring Data和安全框架Spring Security等。通过模块化设计和"约定优于配置"理念,Spring显著提升了Java开发效率
2025-11-29 20:18:28
735
原创 Java 中的Lombok 是什么?
Lombok是一个Java库,通过注解在编译时自动生成getter、setter、构造函数等样板代码,显著减少重复代码量。常用注解如@Data可自动生成多个方法,使代码更简洁易读。其工作原理是利用Java注解处理工具修改抽象语法树,在编译阶段注入代码。虽然需要IDE插件支持且可能降低源码可读性,但Lombok极大提升了开发效率和代码可维护性,已成为Java开发尤其是Spring Boot项目中的常用工具。
2025-11-29 20:14:29
672
原创 阿里云OSS 如何统计 Bucket 文件占用大小?
阿里云OSS统计Bucket文件大小的几种方法 控制台查看:进入Bucket概览页直接查看总存储量,简单但无法细分统计。 存储空间清单:生成CSV报告,支持按前缀统计和定期输出,适合精细化管理,但有延迟。 ossutil命令:通过ossutil du命令快速统计指定目录大小,适合脚本集成,但海量文件时速度较慢。 SDK编程:用Python等SDK遍历文件计算大小,灵活性最高,但需编程能力。 建议:日常查看用控制台;目录统计用ossutil;定期报表用清单;自定义开发用SDK。
2025-11-28 07:30:00
554
原创 C# 中 Jobject 转 string 的方法?
在 C# 中,将 JObject 转换为字符串有多种方法:1) 直接使用 ToString() 方法;2) 使用 ToString(Formatting.None) 紧凑格式;3) 使用 ToString(Formatting.Indented) 美化格式;4) 使用 JsonConvert.SerializeObject()。性能方面,ToString() 方法最优,而 JsonConvert 功能更全面。对于简单转换推荐 ToString(),需要格式控制时可选择带 Formatting 参数的方法。示
2025-11-28 07:00:00
338
原创 程序流追踪宏单元 PTM (Program Trace Macrocell)是什么?
摘要: 程序流追踪宏单元(PTM)是嵌入处理器核心的硬件模块,用于实时、非侵入性地记录程序执行路径(如指令地址、分支信息等),并通过压缩技术输出数据。其设计目标是保持非侵入性和实时性,不影响处理器性能。PTM作为ARM CoreSight等调试系统的关键组件,配合汇聚器、追踪缓冲区等实现数据输出。主要应用于复杂Bug调试、性能优化、系统验证及多核调试等场景,为开发者提供高效的调试和分析能力,是现代处理器的重要调试技术。
2025-11-27 21:55:56
817
原创 嵌入式领域中的追踪漏斗(Trace Buffer)是什么 ?
追踪漏斗(Trace Buffer)是嵌入式系统中用于高效记录运行时关键事件的环形缓冲区机制。它通过固定大小的内存区域持续记录任务切换、中断、信号量操作等事件,新数据会循环覆盖旧数据。这种设计在不影响系统实时性能的前提下,为开发者提供"黑匣子"式的故障分析能力,特别适合调试偶发性问题。典型实现包括时间戳、事件类型和相关对象ID等信息,被广泛应用于FreeRTOS、Azure RTOS等实时操作系统,是解决嵌入式系统复杂并发问题的有效工具。
2025-11-27 20:28:57
1239
IIS负载均衡扩展插件ARR(Application Request Router)
2023-06-16
本Demo将演示一段随机挑选函数代码的性能升级之旅
2022-07-11
多媒体视频处理工具FFmpeg
2022-04-20
如何对一个系统中所有接口的Response进行响应压缩.net mvc
2022-04-13
ckfinder_java_2.4.zip
2015-03-02
eclipse主题皮肤(不仅仅是配色方案)黑色系
2015-03-20
tomorrow-theme-master
2015-01-30
graphviz4net
2015-01-23
hibernate说明文档
2014-12-02
国外可视化数据结构教学软件及其比较
2014-10-06
graphviz-2.38
2015-01-23
ckeditor_4.3_full.zip
2015-03-02
ckeditor-java-core-3.5.3.zip
2015-03-02
dom4j的jar包以及说明文档
2014-09-20
C++中文参考手册——标准库
2014-07-31
网站接口响应时间随着使用时间越来越差
2022-07-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅