- 博客(73)
- 资源 (10)
- 收藏
- 关注
原创 C语言中指针的正确用法详解
本文介绍了指针的基本概念与正确使用方法。指针是存储变量地址的变量,系统会自动为指针变量分配内存。正确用法包括初始化(避免野指针)、内存管理(栈/堆分配)、指针运算、函数参数传递、多级指针和函数指针等。常见错误有野指针、内存泄漏、双重释放和数组越界,可通过初始化、检查NULL、配对malloc/free等避免。最佳实践建议声明时初始化、使用前检查、避免复杂运算、使用const保护数据。指针本身需要内存存储其指向的地址,通过解引用可访问目标变量。理解指针需区分指针变量内存和指向内存的管理方式。
2025-12-26 17:38:26
957
原创 eMMC常用指令
摘要:本文系统介绍了eMMC存储协议的CMD6指令及其它主要指令。CMD6是eMMC的核心"切换"指令,支持动态配置工作模式(如总线宽度、高速模式等),通过128位数据块传递参数。文章还分类讲解了eMMC指令集:基础指令(设备识别)、读写指令、擦除指令、写保护指令等,重点说明了CMD8(获取扩展配置)、CMD21(高速模式校准)等关键指令。这些指令构成了eMMC完整的控制体系,其中CMD6和CMD8对发挥eMMC高性能至关重要,而CMD13、CMD7等则是保证操作正确性的基础。
2025-12-25 16:08:58
948
原创 ARM DS (Development Studio) 常用命令
摘要:ARMDS工具连接目标后,可通过Debug界面的"Load"按钮加载ELF文件,或在调试配置中使用-a参数预加载。调试常用命令包括:运行控制(go/step/stop)、断点管理(break/info break)、内存操作(mem/setmem)、寄存器操作(reg/setreg)等。建议通过工具内help命令或查阅ARM官方文档获取详细帮助。注意命令语法可能因版本不同而有所差异。
2025-12-24 14:50:13
507
原创 在L1级别,dcache配置范围对icache的影响
摘要:现代处理器架构中,L1指令缓存(icache)和数据缓存(dcache)通常是物理独立的,对已缓存在L1 icache中的代码影响极小。分析表明,只有在自修改代码等特殊情况下,dcache配置才会通过缓存一致性机制影响icache。建议通过性能计数器监控icache命中率,若保持高位(>95%)则表明dcache配置影响可忽略。对于指令密集型应用,优化代码布局和局部性比调整dcache配置更有效。实践表明,在正常程序执行场景下,dcache配置范围扩大基本不会影响已缓存在L1 icache中的代
2025-12-24 14:31:59
1033
原创 Dcache配置对ICache的影响
摘要:CPU的指令缓存(ICache)和数据缓存(DCache)在架构上是独立的,DCache配置变化通常不会直接影响ICache的替换算法。但二者会通过共享资源产生间接影响:1)在末级缓存(LLC)中竞争空间;2)共享内存带宽和TLB资源;3)系统总线仲裁;4)电源热约束导致的全局降频。影响程度取决于工作集大小和LLC容量,建议优化时需同时监控ICache缺失率、LLC命中率和整体性能指标。
2025-12-24 14:24:07
769
原创 Cache写操作策略:Write Allocate与Write No-Allocate的区别
缓存系统处理写缺失的两种策略:WriteAllocate(写分配)和WriteNo-Allocate(写不分配)。写分配会在写缺失时将数据块加载到缓存并更新,适合反复读写场景,能利用空间局部性减少延迟;写不分配则直接写入主存,避免缓存污染,适合一次性写入或流式数据。常见组合包括写回缓存+写分配(减少主存访问)和写通缓存+写不分配(避免不必要加载)。现代CPU多采用写回+写分配策略,而GPU等特殊架构可能选择写不分配以优化特定负载。策略选择需根据数据访问模式权衡缓存效率与带宽消耗。
2025-12-18 23:24:33
673
原创 SPI NOR Flash 的命令码详解
本文系统解析了SPINOR Flash的命令码及其通信协议。主要介绍了标准命令集,包括基本读写操作(WREN、READ、PP等)、识别与配置命令(RDID、DP等)、高性能模式(QPP、QIOR等)及4字节地址模式命令。重点阐述了状态寄存器各关键位的功能和使用方法,如WIP、WEL等。通过典型工作流程示例,说明了写操作的具体步骤和注意事项。强调使用前必须查阅具体型号的数据手册,并注意先擦后写、页边界限制、地址对齐等关键操作要点。
2025-09-14 17:27:47
1038
原创 c语言中enum与#define的用法区别
枚举(enum)和宏定义(#define)在定义常量时的主要区别在于: 本质:宏是预处理文本替换,枚举是编译期数据类型; 类型安全:枚举提供弱类型检查,宏无类型检查; 调试:枚举保留标识符名,宏仅显示替换值; 作用域:枚举遵循变量作用域,宏从定义处持续生效; 赋值:枚举支持自动递增,宏需显式指定每个值。 建议: 优先用enum定义相关整型常量(如状态码) 独立常量推荐用const替代#define 保留#define用于条件编译等特殊场景
2025-08-23 17:56:30
955
原创 ARMv8/v9架构FAR_EL3寄存器介绍
摘要:ARMv8/v9架构中FAR_EL3是EL3专用的故障地址寄存器,用于记录触发同步异常的物理地址。当EL3发生指令/数据中止、对齐错误等异常时,硬件自动将异常地址写入该寄存器。需结合ESR_EL3分析异常类型和原因,主要用于安全监控器的错误诊断。FAR_EL3仅记录EL3自身异常,且仅EL3特权级可访问,确保安全隔离性。开发安全固件时,通过读取FAR_EL3和ESR_EL3可精确定位异常根源,是调试EL3异常的核心工具。
2025-08-02 15:59:14
882
原创 FPGA kernel 仿真器调试环境搭建
本文档详细描述了在haps平台上使用仿真器进行kernel运行和调试的完整流程。主要内容包括:1)通过DS-5软件导入kernel工程并进行debug配置;2)使用attach方式连接仿真器,加载FIT到RAM后通过uboot启动;3)详细记录了从BL1到kernel启动的完整串口输出日志。调试过程中需要注意EXT mode的使能问题,并提供了具体的bootm命令参数(0x10000000为FIT在RAM中的固定地址)。文档还展示了kernel启动时的详细内存分配、CPU初始化、设备驱动加载等信息,对系统启
2025-08-02 15:33:41
276
原创 ARM架构ELR、LR 和 ESR寄存器含义
摘要:ARM架构中的ELR、LR和ESR是异常处理与程序控制的关键寄存器。LR(R14/X30)存储子程序返回地址,并在异常时保存PC值;ELR(ELR_ELx)记录异常返回地址,区分同步/异步异常场景;ESR(ESR_ELx)存储异常类型与详细信息(如EC代码)。三者协同工作:异常触发时,硬件自动将PC存入ELR、原因写入ESR,处理完毕后通过ERET恢复执行。LR用于函数调用流程,ELR/ESR专用于系统级异常管理,尤其在ARMv8多级安全架构中至关重要,是操作系统中断调试与特权级切换的基础。
2025-08-02 15:22:25
1062
原创 uboot FPGA调试环境搭建
摘要:本文介绍了使用ARM Development Studio调试uboot的流程。首先需通过git克隆build库并运行脚本获取其他库,选择lunch进行编译。调试时需将elf文件下载至DDR。建议通过samba或RaiDrive映射Linux目录作为workspace,新建工程时选择源码目录以便代码追踪。调试配置可通过"create a debug connection"或file-new-others创建,使用add-symbol-file指定uboot路径和地址(EL3:3ef
2025-07-24 23:33:12
632
原创 uboot仿真器调试-详细log输出
摘要: 该日志记录了TS-TX5226开发板的U-Boot启动过程。系统从FPGA启动,初始化了CPU、内存(1GB)、串口设备等硬件。检测到boot_sel=0,加载默认环境变量,设置网络参数(IP 192.168.1.10)。启动过程中成功匹配了多个设备节点,包括串口、GPIO、QSPI等。系统提供了多种启动模式(SPI NOR/NAND、eMMC、SD卡、网络等)和固件更新方式。自动启动倒计时3秒后,因收到未知命令'b'而中断启动流程。整个启动过程包含内存分配(非缓存区1MB)、设备树解析、时钟初始化
2025-07-24 22:59:21
162
原创 uboot命令行中跳转跑裸跑bin代码
本文介绍了在U-Boot环境下运行裸机代码进行回片验证的方法。主要步骤包括:1)调整裸机代码UART波特率与U-Boot一致;2)移除页表创建和MMU使能操作;3)编译生成AXF文件并转换为BIN格式;4)在U-Boot命令行修改加载地址并通过TFTP下载BIN文件;5)使用自定义ts_jump命令跳转到裸机代码执行。文中提供了关键实现代码,包括跳转命令实现、链接脚本和启动代码,详细说明了处理器初始化、中断处理和多核启动流程,为在U-Boot环境下进行裸机验证提供了完整解决方案。
2025-07-16 23:15:22
251
原创 ARM DS (Arm Development Studio) 中将代码编译成 .bin 文件
摘要:在Arm Development Studio中将代码编译为.bin文件需配置工程并添加后处理命令。主要步骤包括:创建/导入工程并选择目标设备;配置使用Arm Compiler工具链;关键是在工程属性的Post-build步骤中添加fromelf命令(fromelf --bin --output="xxx.bin" "xxx.axf");构建后可在Debug/Release目录获取.bin文件。也可手动执行fromelf命令转换。常见问题包括路径错误和链接器配置
2025-07-16 22:10:31
519
原创 elf、axf、bin的区别与转换
摘要: ELF、AXF和BIN是嵌入式开发中常见的文件格式,各有特点: ELF:通用格式,含代码、符号表及调试信息,适合跨平台开发与动态链接。 AXF:ARM专用ELF扩展,包含CoreSight调试信息,用于Keil/IAR调试。 BIN:纯二进制文件,无调试信息,需指定加载地址,直接用于烧录。 转换方法: 通过工具链(如objcopy或fromelf)实现格式互转,BIN转ELF需指定基址。 开发阶段建议保留ELF/AXF以支持调试,发布时转为BIN。 注意事项:地址一致性、调试信息保留及文件填充对齐是
2025-07-16 19:22:34
654
原创 U-Boot 中增加 GIC-400中断服务程序
摘要:本文详细介绍了在U-Boot中为GIC-400(GICv2架构)添加中断服务程序的完整实现方案。关键步骤包括:1)启用U-Boot中断支持;2)实现GIC-400驱动;3)构建中断处理框架;4)集成到启动流程;5)注册具体中断服务程序;6)编译配置和验证。重点涵盖了GIC初始化、中断注册机制、处理函数实现以及常见问题解决方法,特别强调U-Boot中断处理应遵循极简原则(处理时间<100μs)。该方案适用于需要快速中断响应的嵌入式场景,所有代码均提供完整实现范例。
2025-07-15 20:30:16
525
原创 U-Boot 2025.07 引入的 “uthreads” 优势介绍
U-Boot 2025.07引入的"uthreads"是一种轻量级协程框架,采用非抢占式协作调度机制,优化Bootloader阶段的异步任务处理。该框架通过单栈复用和简易状态机管理,显著降低内存占用和切换开销(<50时钟周期),适用于硬件初始化并行化、中断驱动外设管理等场景,可缩短系统启动时间15-30%。相比传统多任务方案,uthreads具有低资源消耗优势,但需注意协作调度可能导致的阻塞风险。该设计借鉴barebox的bthreads,已支持多种主流平台,体现了开源生态的技术复
2025-07-10 20:04:37
930
原创 linux 4.14 kernel屏蔽arm arch timer的方法
摘要:ARMv7单核CPU禁用时钟中断需谨慎,主要方法包括通过GIC屏蔽中断(推荐)或直接操作定时器寄存器。关键步骤需配合保存中断状态、禁用抢占等保护措施,且禁用时间不应超过100ms。典型应用场景包括极短时延操作和低功耗状态切换,但会破坏调度器功能。注意事项强调:仅限内核使用、禁止调度相关调用、多核需额外处理CPU亲和性。建议优先使用preempt_disable()等替代方案以保持系统基本功能。
2025-07-10 16:23:08
560
原创 Linux 4.14 内核关中断的方法
摘要:Linux4.14内核驱动开发中,关闭当前CPU中断的正确方法是使用local_irq_save()/local_irq_restore()函数对,仅影响当前CPU且可保存中断状态。在多核系统中保护共享数据应配合自旋锁使用spin_lock_irqsave()。需注意临界区代码要简短,避免调用可能调度的函数,禁止关闭所有CPU中断。性能敏感场景建议使用细粒度锁或延迟处理机制,始终遵循最小化关中断范围原则。(150字)
2025-07-08 15:51:14
436
原创 基于4.14 kernel ARM V7 单核cpu swi功能的验证方法
本文详细介绍了ARMv7单核CPU在Linux4.14内核下验证SWI(软件中断)功能的方案。验证目标包括系统调用触发、参数传递、异常处理等核心功能。提供了三种互补验证方法:用户空间系统调用测试、内核空间SWI处理跟踪和动态调试分析。方案涵盖硬件环境搭建(ARMv7开发板)、软件工具配置(gcc工具链、内核调试选项)以及具体测试步骤。关键验证点包括SWI入口正确性、系统调用号传递、参数处理和异常响应。故障排查指南覆盖常见问题定位方法,并建议了Thumb模式测试、压力测试等高级验证选项。
2025-07-07 23:56:12
1214
原创 ARMv7单核CPU上SWI(软件中断)验证
摘要:本文详细介绍了在ARMv7单核CPU上验证软件中断(SWI)功能的技术方案。方案包含硬件环境搭建(开发板、调试工具)、裸机软件实现(异常向量表配置、SWI处理函数)和验证步骤。关键实现包括汇编级的异常向量表设置、现场保存恢复机制以及调用号提取逻辑,并通过LED控制和串口打印进行功能验证。文章还提供了故障排查指南和高级验证建议,强调寄存器状态检查、栈保护验证和性能测试等关键点,为嵌入式系统开发人员提供了实用的SWI验证方法。
2025-07-07 23:42:16
452
1
原创 ARMv8 创建1、2、3级页表代码与注释
本文详细描述了ARMv8架构下三级页表的初始化过程。通过L1、L2、L3三级页表实现了4GB地址空间的映射:L1表管理4个1GB区域,其中0xC0000000-0xFFFFFFFF指向L2表;L2表使用2MB块映射DDR(512MB)、OSPI Flash(256MB)等区域,并对特定地址(0xF0200000-0xF07FFFFF)指向3个L3表;L3表采用4KB页粒度完成精细映射。代码实现了页表清零、描述符配置、地址转换等关键操作,通过循环结构高效完成整个页表体系的构建,为系统内存管理奠定了基础。
2025-07-06 22:22:22
731
原创 ARMv8 创建3级页表示例
本文详细介绍了ARMv8架构下的页表创建过程。通过三级页表结构(L1-L3),实现了从虚拟地址到物理地址的映射:L1页表使用1GB大页映射DDR内存,L2页表采用2MB块映射DDR和OSPI Flash区域,L3页表精细管理4KB小页的特殊设备区域。代码展示了如何通过清零页表、配置各级描述符属性(包括内存类型、访问权限等),并使用位操作提取虚拟地址索引来定位页表项。特别处理了RNE_CFG1设备内存、GIC控制器等特殊区域的映射,体现了ARMv8 MMU对不同内存类型和访问权限的灵活管理能力。
2025-07-06 22:13:43
367
原创 armv8 创建4k页表示例
摘要:该代码为ARMv8架构创建80KB(0xf2600000-0xf2614000)物理地址的4KB页表映射,采用三级页表结构(L0/L1/L2)。主要步骤包括:1)计算20个4KB页;2)设置L2页表使用2MB大页(属性0x723);3)配置L1指向L2表;4)设置L0指向L1表;5)刷新TLB。代码使用位操作处理48位地址空间划分([47:39][38:30][29:21][20:0]),通过ORR组合地址与属性,并说明需预先配置MAIR_EL1和TCR_EL1寄存器。该实现优化采用2MB大页减少层级
2025-07-06 11:45:00
618
原创 ARMv8 Data Abort 故障码排查
摘要:该文档详细描述了ARM架构中数据中止异常(Data Abort)的ISS字段结构及其EC值(0b100100和0b100101)。ISS字段包含多个关键信息位:ISV(指令综合征有效位)、SAS(访问大小)、SSE(符号扩展标志)、SRT(寄存器号)、SF(寄存器宽度)、AR(获取/释放语义)等。DFSC字段(数据故障状态码)提供了具体的故障类型,如地址/翻译/权限故障等。此外,还涉及RAS扩展、外部中止分类及缓存维护操作相关标志位。这些字段共同帮助系统诊断和处理数据中止异常的原因及上下文状态。
2025-07-05 08:00:00
1112
原创 ARMv8 没开mmu执行memset引起的非对齐访问异常
摘要:在ARM Cortex-A35处理器调试过程中发现memset操作引发异常,原因是MMU关闭导致非对齐访问。通过分析ESR_EL1寄存器的EC(0x25)和DFSC(0x21)字段可确认对齐错误,FAR_EL1寄存器记录异常地址。调试脚本展示了如何读取关键寄存器并判断异常类型,同时指出ARMv8架构下不同类型数据的对齐要求。建议检查SCTLR_ELx.A位配置对齐检查功能,默认开启时需确保内存访问符合对齐规范。
2025-07-04 20:05:31
733
原创 ARM DStream仿真器脚本常用命令
摘要:ARMDStream仿真器常用命令分为六大类:1)连接初始化(connect/reset/target);2)程序加载存储(loadfile/readmem);3)执行控制(go/step);4)断点观测(break/watch);5)寄存器操作(reg/print);6)脚本控制(source/echo)。使用时需注意命令版本兼容性、调试环境准备和内存地址映射配置。这些命令支持在DS-5环境中进行嵌入式调试,包括程序加载、单步执行、断点设置等核心功能。(149字)
2025-07-04 16:33:00
531
原创 haps80抓A35 CPU启动信号
芯片调试发现AXI总线异常:抓取CA35核的mAxi_arvalid信号作为触发条件,监控复位时CPU访问bootrom的波形。分析发现arvalid信号未跳变,表明命令发送后返回数据异常,需进一步追踪总线信号定位问题。当前阶段排除了复位信号(corerstn/cpuporstn)的影响,重点关注地址(maxi_arddr)、数据(maxi_rdata)及传输状态(maxi_rlast/rvalid)信号。
2025-07-02 17:38:45
185
原创 git 迁移之获取原库所有分支
分支名包含特殊字符(如空格)时可能需要额外处理。如需强制覆盖已存在分支,请使用。可查看所有本地分支及其跟踪关系。不存在时创建带跟踪关系的分支。检查本地是否已存在同名分支。排除远程 HEAD 指针。过滤掉 HEAD 指针。获取最新远程分支列表。跳过已存在的本地分支。
2025-06-27 16:15:23
445
原创 iperf3使用方法
打流”通常指的是进行持续、大流量的网络传输测试,以评估网络的吞吐量、稳定性和承载能力。接收端报告的带宽更准确(不受发送端本地性能瓶颈影响),发送端报告的丢包率更准确(知道发了多少包)。(UDP) 抖动的平均值。网络的上行(客户端->服务器)和下行(服务器->客户端)带宽可能不对称(如 ADSL、Cable Modem)。进行各种复杂的网络“打流”测试,精确评估网络的性能极限和稳定性。: 在客户端结束时,从服务器获取并显示额外的结果报告 (包含服务端视角的丢包统计等,对 UDP 尤其重要)。
2025-06-23 21:15:44
5092
原创 hwclock的使用
https://wenku.baidu.com/view/0df8e438660e52ea551810a6f524ccbff121ca8f.html?fr=aladdin266&ind=1&aigcsid=0&qtype=0&lcid=1&queryKey=hwclock+%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E&verifyType=undefined&_wkts_=1748508539093&bdQuery=hwclock+%E4%BD%BF%E7%94%A8%E8%AF
2025-05-29 19:46:48
221
原创 linux kernel 内存回收水位线调整方法
系统保留的最小空闲内存,低于此值会触发直接内存回收(同步回收),可能导致进程阻塞。:当可用内存低于此值时,内核开始后台回收(kswapd进程),直到达到high水位。之间的间隔(默认10,范围1-1000),值越大间隔越宽,减少回收频率。通过合理调整这些参数,可优化系统在内存压力下的行为,平衡性能与稳定性。会减少可用内存,可能导致频繁回收;:在NUMA架构中需分别调整各节点的水位线,参数路径如。:不同内核版本参数可能不同,建议参考对应版本的文档(如。:内存充足时的阈值,回收过程停止。
2025-05-27 14:33:33
946
原创 集成电路生产测试中CP针卡(Probe Card)简介
CP针卡(Probe Card)是半导体芯片制造中用于晶圆测试(Chip Probing, CP)的核心组件,其作用是在晶圆未切割封装前,通过探针与芯片的焊盘(Pad)或凸块(Bump)接触,建立测试机(ATE)与芯片之间的电气连接,从而完成电性能和功能测试3510。
2025-05-19 14:33:20
2686
原创 SDIO EMMC中ADMA和SDMA简介
(Simple Direct Memory Access)是两种不同的DMA(直接内存访问)模式,用于优化主机控制器与存储器(如eMMC)之间的数据传输效率。(Scatter-Gather I/O),通过链表或描述符表管理多个分散的数据块,无需CPU干预。提供更完善的错误报告机制(如描述符错误状态位),支持更精细的错误恢复流程。描述符结构更复杂,支持链式或多级描述符,可灵活配置多个数据传输任务。需要更复杂的主机控制器硬件支持(如支持64位地址和描述符链表)。错误处理较为基础,通常依赖主机控制器的中断机制。
2025-05-14 20:39:37
1254
原创 总线读写outstanding 和 burst-length概念简介
在芯片总线IP(如AXI、AHB、APB等协议)中,Outstanding和Burst-Length是两个关键概念,分别影响总线的并发性和传输效率。Outstanding表示主设备在未收到从设备响应的情况下,能同时发起的独立请求数量,直接影响总线的吞吐量和复杂度。Burst-Length则指单次突发传输中连续传输的数据单元数量,优化传输效率和带宽利用率。Outstanding适合多任务并行请求,而Burst-Length适合连续数据块传输。设计时需根据应用场景(如随机访问或顺序传输)平衡二者,以优化吞吐
2025-05-13 15:51:43
1149
原创 ISP gamma校正简介
在 ISP 中,Gamma 校正是连接传感器数据与显示设备的关键桥梁,通过非线性映射优化图像感知质量。其核心目标是:适配人眼与显示设备的非线性响应。压缩动态范围并增强细节。确保跨设备色彩一致性。实际应用中需结合场景需求、显示设备特性及 ISP 算法综合优化 Gamma 值及曲线形态。
2025-05-08 18:04:10
1480
原创 CBC(Clock Boundary Crossing)简介
当信号从一个时钟域(由时钟A驱动)传递到另一个时钟域(由时钟B驱动)时,由于两个时钟的相位和频率不同,可能导致信号在接收时钟域中出现亚稳态(Metastability)或时序违规(Timing Violation)。是处理多时钟域信号同步的核心问题,需通过同步器、异步 FIFO 或握手协议解决,并借助 STA、形式验证和仿真确保可靠性。信号在跨时钟域时违反建立时间(Setup Time)或保持时间(Hold Time)。跨时钟域的数据总线(如 FIFO、寄存器同步链)。:门控时钟可能引入隐性跨时钟域问题。
2025-04-30 15:43:41
863
原创 QSPI flash xip模式运行
在做一个项目,调研p-sram当ram用在cadence qspi接口下是否正常,首先用qspi-flash xip模式验证控制器是否支持flash的xip模式。
2025-04-24 22:48:28
966
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅