ISYSTEM调试实践12-软件运行时间的优化

文章探讨了在实际工程中如何通过ProfilerTimeline分析软件运行时间,解决任务执行周期抖动问题。通过减少延时函数调用、拆分任务、使用DMA优化和调整调用频率,成功降低了CPU负载并改进了任务执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际工程的运行要比上篇文章提到的例程复杂的多
ISYSTEM调试实践11-Profiler Timeline和软件运行时间分析

由于复杂的应用层模型和底层任务,假定应用层模型的运行周期是10ms,任务函数的执行时间往往超过1ms,这时候就必须要考虑函数执行本身的时间。

例如下图,taska\taskb\taskc\taskapp是10ms执行一次,task5ms任务是5ms执行一次。
由于10ms周期里,四个任务执行了6.95ms,等于占用了其他函数的周期,导致5ms的任务不能按时执行。
虽然说由于考虑程序执行时间以后,函数调用被影响无法避免,但是我们还是希望尽可能减少这种结果的发生,将影响程度降到最低,另外也可以降低CPU负载率。
在这里插入图片描述
所以该5ms的任务统计情况详见下图。它的period也就是调用周期异常,最大15ms,相当于周期性抖动(JIT)等于达到了200%,这是不能被接受的。而且最小仅仅位652us,等于是无效操作,毕竟这个任务既然要求5ms,太快的执行是没有意义的
在这里插入图片描述比如ccpDaq这个函数也是5ms执行一次,被调用的情况和上一个类似,周期完全被打乱。
在这里插入图片描述

优化的方法就是找到哪些函数占用了大量的时间。

方法一:

例如这个函数执行一次需要2.5ms,时间长是因为大量调用了延时函数,可以根据需要减少周期。
在这里插入图片描述经过对延时适当的降低,平均运行时间降到了1.05ms

在这里插入图片描述
在这里插入图片描述

方法二:

将需要时间才能执行完成的函数拆开,分批次执行,错开时间,给那些调用周期更短的任务执行。
在这里插入图片描述左图是优化后
在这里插入图片描述

将上文提到10ms执行一次的aska\taskb\taskc\taskapp分开到两次执行,而将5ms执行一次的task5ms采样任务插入到中间任务,可以大大降低5ms任务的抖动时间。
在这里插入图片描述这里抖动时间将为100%。

方法三:

ADC_GetConvertValue,这个函数在1.023这个统计周期内被调用了25808次,累计花了190ms,ADC读取作为被大量调用的函数,也需要进行优化,这里建议一般改为DMA读取,并且增加ADC的工作频率
在这里插入图片描述在这里插入图片描述

改为DMA以后,平均call time降为463ns
在这里插入图片描述

方法四:

将不需要频繁执行的函数降低调用频率。
这个要根据项目实际情况。

CPU负载

在这里插入图片描述

在这里插入图片描述

经过优化以后,根据上一章节的计算方法,cpu 负载降为66.2%

### 使用 ISYSTEM 调试器统计 RAM 和 ROM 使用情况 #### 配置调试环境 为了能够有效地利用 ISYSTEM 调试工具来监控和分析嵌入式系统的存储器使用状况,首先要确保目标平台已经正确配置并连接到调试环境中。这通常涉及到安装必要的驱动程序以及设置通信接口参数。 #### 启动 ISYSTEM Debugger 启动 ISYSTEM调试应用程序后,在项目管理界面加载对应的目标硬件描述文件(Target Description File),该文件包含了关于处理器架构的信息,例如对于基于 ARM Cortex-A15 架构的设备来说,则应选择支持 ARMv7-A 指令集的相关配置[^3]。 #### 加载固件映像 将待测的应用程序或操作系统镜像上传至调试器,并将其下载到目标板上的闪存或其他非易失性存储介质中。这一过程会创建一个可以被用来评估整个系统资源占用的基础状态。 #### 设置观察点 在 ISYSTEM 中定义特定地址范围作为观测区域,用于跟踪 RAM 和 ROM 的实际利用率变化趋势。针对不同的应用场景可以选择不同类型的断点机制;比如,在 X86 上可以通过 INT3 (0xCC) 来实现软件级别的暂停控制功能[^2],而在其他平台上则可能依赖于硬件特性所提供的专用监视手段。 #### 执行内存扫描命令 通过发送专门设计好的查询请求给目标机,获取当前时刻各段物理地址区间内的已用字节数目及其分布特征。此操作可以帮助识别是否存在异常增长模式或是潜在泄漏风险的位置。 #### 分析报告生成 最后一步是从收集的数据集中提取有价值的信息片段,形成易于理解的结果展示形式——如图表、列表等可视化表达方式。这些资料不仅有助于即时诊断问题所在之处,也为后续优化提供了依据。 ```bash # 假设有一个名为 'memory_usage' 的脚本用于自动化上述流程 ./memory_usage --target=your_device_model --output=report.html ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值