这是一个很重要的概念! 1.printf()的时间 在PC编程中,你可以用printf()这个函数来看变量值,而忽略它所占用的时间,(相对于3GHZ的CPU来说可以忽略),但是在嵌入式编程中,用printf()在超级终端中看变量值的时候,它的开销你要计算进去,尤其是程序对信号的捕捉到了毫秒,微秒级别的时候! 笔者曾经干过这样一件事情,用定时器函数来delay()9毫秒时间,过0.9毫秒,让里面的变量i加一,结果i等于9的时候跳出循环,而在里面多加了一句printf(),i加到了6就跳出了循环,害的我以为我的算法错了,希望大家不要走同样的弯路! 2.乘法时间 说到delay()函数,我的原型如下: void delay(double time) time = time * 12000; //得到计时次数 while(delayEnd == 0); //得到定时中断服务函数吧delayEnd 置为1 笔者用这个延迟函数想产生一个周期为26us的方波,于是delay(0.026);然后取反,结果产生了周期为100us的方波于是笔者改成了这样: void Delay(long time) while(delayEnd == 0); //得到定时中断服务函数吧delayEnd 置为1 结果产生周期为50us的方波,从两个delay()函数中我们可以看到,乘法的占用时间在程序达到us级别的时候,是必须要简化和考虑的,而每条语句的汇编条数我们也要看到,尽量精简,因为延迟函数之前,程序的条数也会占用时间,这些在PC机中从来不用考虑! |
相关推荐
ARM Cortex-M3/M4异常现场保存原理与硬件实现
在嵌入式实时系统中,异常处理的现场保存是保障任务原子性与系统稳定性的基础机制。其本质是CPU执行状态(包括PC、xPSR、通用寄存器等)的精确快照,核心原理源于ARMv7-M架构对确定性响应的硬性要求。技术价值体现在12周期固定中断延迟、原子压栈及零软件开销,支撑FreeRTOS等RTOS的微秒级上下文切换。典型应用场景涵盖STM32F103工业控制、电机驱动与通信协议栈开发,尤其在SysTick或EXTI中断高频触发时,现场完整性直接决定逻辑正确性。本文深入剖析Cortex-M3/M4基于AAPCS标准的
新唐M261M262M263系列芯片知识总结归纳(1)
新唐M263KIAAEPDMA PDMA Peripheral Direct Memory Access (PDMA) 外设直接存储器存取(PDMA)控制器用于提供高速数据传输。PDMA控制器可以在没有CPU干预的情况下将数据从一个地址传输到另一个地址。这样做的好处是减少了CPU的工作负载,并为其他应用程序保留了空闲的CPU资源。有两个PDMA控制器PDMA0和PDMA1。每个PDMA控制器共有8个通道,每个通道可以执行存储器与外设之间或存储器与存储器之间的传输。 功能: 支持 2PDMA 控制器,即 PD
ARM嵌入式开发必知:SP、LR、PC寄存器实战用法与调试技巧
本文深入解析ARM嵌入式开发中SP、LR、PC三个核心寄存器的实战用法与调试技巧。通过剖析堆栈指针寄存器(SP)在内存管理、函数调用与异常处理中的关键作用,结合GDB等工具的实际案例,帮助开发者精准诊断栈溢出、程序跑飞等常见问题,提升底层调试与系统稳定性保障能力。
新唐单片机如何生成精确延迟
最近在搞新唐单片机,所以记录下这部分内容。之前的相关文章呵,你会51单片机的精确延时吗?假如使用者想要产生精确的延迟时间,建议使用 __nop() 函数来组合达成。__nop() 函数能够...
FreeRTOS任务切换底层原理与ARM Cortex-M上下文保存机制详解
在实时操作系统(RTOS)中,任务调度与切换是实现多任务并发的核心技术。任务调度负责决策哪个任务获得CPU执行权,而任务切换则是实际执行上下文交换的底层机制,直接影响系统的实时性和稳定性。其核心原理在于保存当前任务的CPU寄存器状态(即上下文)到任务私有堆栈,并恢复下一个任务的上下文,从而实现任务间的无缝跳转。在ARM Cortex-M架构中,这一过程通过PendSV异常和硬件自动压栈机制高效实现,涉及堆栈帧结构、任务控制块(TCB)管理等关键技术。理解任务切换的触发时机(如时间片到期、任务阻塞/唤醒、主动
低功耗MCU拥抱Cortex-M33:架构优势、TrustZone与实战设计要点
在物联网与可穿戴设备的推动下,低功耗MCU的设计目标已从单纯的“省电”转向“单位功耗下的更高算力与安全性”。Cortex-M33基于ARMv8-M主线架构,不仅提供DSP扩展和可选浮点单元,更引入TrustZone硬件隔离技术,使安全密钥与普通应用代码彻底分离,同时借助精细的电源域管理实现按需唤醒。相比传统Cortex-M0+,M33在加密运算、协议栈处理等场景下能以更低平均功耗完成任务。时钟树配置、GPIO上下拉、低功耗外设选择以及冷热启动路径区分,都是实际工程落地的关键环节。本文从芯片架构原理出发,结合
闲谈嵌入式编程的复杂性
能从PC机器编程去看嵌入式问题,那是第一步;学会用嵌入式编程思想,那是第二步;用PC的思想和嵌入式的思想结合在一起,应用于实际的项目,那是第三步。很多朋友都是从PC编程转向嵌入式编程的。在中国,嵌入式编程的朋友很少是正儿八经从计算机专业毕业的,都是从自动控制啊,电子相关的专业毕业的。这些童鞋们,实践经验雄厚,但是理论知识缺乏;计算机专业毕业的童鞋很大一部分去弄网游、网页这些独立于操作系统的更高层的
快速进入新唐编程
新唐工程快速建立,包含代码介绍,模块介绍,调用库函数
新唐(nuvoton)MCU软件开发指南—环境搭建设置
新唐MCU软件开发指南--从环境搭建,项目设置,到调试仿真的配置。
Cortex系列M0-4简单对比
本文主要对Cortex系列的M0-4处理器做了简单对比,方便大家选择
ARM CORTEX-M0汇编指令汇总
列出ARM CORTEX-M0可能的汇编指令组合,指令的长度,指令周期数和影响的状态字。
新唐M2L31 MCU集成ReRAM,存储架构变革与开发实践
在嵌入式开发中,MCU的存储方案长期由Flash和SRAM主导,但随着物联网设备对低功耗、高可靠性和快速写入的需求上升,传统非易失存储的物理瓶颈日益凸显。ReRAM作为一种基于导电细丝形成与断裂的阻变式存储器,具有字节级覆写、写入延迟低、与CMOS工艺兼容等特点,正在成为下一代MCU片上存储的重要选择。新唐推出的M2L31系列微控制器将ReRAM集成到Cortex-M23内核平台,兼顾TrustZone安全扩展与超低功耗设计,为IoT终端、可穿戴设备及工业传感器提供了新的片上存储范式。本文从ReRAM工作原
新唐M0通过USB与上位机通信
新唐M0通过USB与上位机通信,NANO系列
ReRAM取代Flash,Cortex-M23内核MCU如何重塑嵌入式存储
在嵌入式系统中,存储器一直扮演着核心角色,而MCU(微控制器)的存储方案也在悄然变革。传统Flash因擦写寿命短、写入功耗高、工艺微缩受限等瓶颈,逐渐难以满足物联网、可穿戴设备等高频率数据写入场景的需求。阻变存储器ReRAM(忆阻器)凭借字节级直接改写、无需擦除、高耐久性和低功耗等优势,正成为新一代MCU存储介质的理想选择。Arm Cortex-M23内核作为低功耗与安全的代表,与ReRAM结合后,能在单芯片上实现代码存储、数据存储和硬件级安全隔离的统一。从工程实践角度看,开发者沿用Keil、GCC等标准A
网络变压器等效电路及网络变压器中间抽头作用详解
华强盛电子导读:要详细了解网络变压器周边EMC管控及网络变压器BOB-SMITH电路的连接原理,首先我们对网络变压器的认识及其电路各参数影响都要有个简要的认识,本文,对非理想网络变压器等效电路做一个详细的分析,其中重点讨论一下网络变压器中间抽头的作用其影响 网络变压器等效电路及 ...
避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践
本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。
ARM Cortex-M函数参数传递机制:从ABI原理到嵌入式调试实战
应用程序二进制接口(ABI)是编译器与硬件之间关于函数调用和数据布局的核心约定,它定义了参数传递、寄存器使用和栈管理等底层规则。在ARM Cortex-M架构中,整数参数主要通过R0-R3寄存器传递,遵循AAPCS标准,这直接影响代码的执行效率和内存访问模式。理解ABI对于嵌入式开发至关重要,尤其在混合语言编程、深度优化和调试内存错误时,能帮助开发者定位参数错位、栈溢出等隐蔽问题。本文通过一个实际的电机控制项目案例,结合调试器验证和反汇编分析,深入剖析了参数传递的完整流程,并探讨了可变参数函数、结构体传递等
知识图谱本体建模之RDF、RDFS、OWL详解
(一)知识图谱本体建模之RDF、RDFS、OWL详解 1.语义网体系 知识图谱于2012年由Google提出,并不是新概念,而是由语义网络(Semantic Network)衍生而来。语义网络由相互连接的节点和边组成,节点表示概念或者对象,边表示他们之间的关系。RDF,RDFS与OWL都是基于语义网的知识表示框架,在节点和边的取值上做了约束,制定了统一标准,为多源数据的融合提供了便利。RDF,RDFS/OWL 属于语义网技术栈,它们的提出,使得语义网克服了语义网络的缺点。其语义网技术栈如下所示。 2.RD
IAR与GCC编译器在Cortex-M嵌入式开发中的关键差异与迁移实战
在嵌入式系统开发中,编译器是连接高级语言与底层硬件的关键桥梁,其代码生成策略和工具链设计直接影响程序的效率、尺寸和可靠性。IAR Embedded Workbench和GNU GCC作为两大主流工具链,虽然都支持ARM Cortex-M内核,但在汇编语法、内存管理、代码优化等核心原理上存在显著差异。这些差异不仅关系到开发效率,更决定了代码在目标硬件上的实际行为,尤其在中断处理、启动流程等底层场景中至关重要。对于需要跨平台移植或开源集成的项目,理解IAR与GCC在中断向量表对齐、链接脚本设计、调试信息生成等方
粒子群算法实战:用Matlab解决旅行商问题(TSP)的完整代码解析
本文提供了使用粒子群算法解决旅行商问题的完整Matlab实战指南。通过将连续空间的粒子群算法进行离散化改造,采用基于交换序的策略来更新粒子位置与速度,并给出了从问题定义、数据结构设计、核心函数实现到主迭代循环的详细代码解析。文章还探讨了参数调优、性能优化及处理复杂TSP变体的进阶思路,为物流规划、路径优化等领域的工程应用提供了可直接复用的解决方案。
yolov5直接调用zed相机实现三维测距(python)
zed代码比较简洁,但是一定要把环境配置好,后续自己会把他当做普通双目标定,去对比分析效果,并完善相关功能。
341



被折叠的 条评论
为什么被折叠?



