如何简单快速的来打造MCU性能分析利器的详细资料概述

嵌入式资讯精选 2018-07-05 09:23 次阅读

说出来不确定大家信不信,实现起来也就70来行算上大括号的代码,是不是很激动人心?

言归正传,再小的程序,也是数据结构+代码。咱们先来由表及里地看看核心数据结构的样子。

首先,既然要从Cortex-M核在响应中断时自动入栈的信息采集PC,就必须了解自动入栈了些啥东东:

如何简单快速的来打造MCU性能分析利器的详细资料概述

这里可以看出Cortex-M内核自动压入了8个寄存器,右二那个不起眼的pc,正是一号主角。对自动入栈不太了解的小伙伴,可以查看《Cortex-M3权威指南》第9章的介绍

(https://github.com/RockySong/cm3_def_guide_cn)

理论上pc可以是任何指令位置。不幸的是一般工程生成的指令数常常在几万甚至几十万条,难道都要记录下来?估计天价的开发工具也不会这么做。常言说“首恶必办,协从不问”,咱们做profiling,也没必要统计出PC在所有指令上的分布密度,只要抓几个大头就够了。还有个麻烦的,是一个函数可以有多个指令,函数长度可以相差巨大,而且在一个大函数里不同区域的覆盖密度也不同。过日子还需要精打细算呀,咱们权衡打击精度与弹药消耗量,使用2个宏来决定配置,比如:

如何简单快速的来打造MCU性能分析利器的详细资料概述

第1个宏PROF_CNT决定了抓多少个大头,第2个宏PROF_ERR决定了网眼的大小——抓取的地址范围(也就是最大误差),在这个范围内的地址都计作同一个地址块。显然,PROF_CNT越多,PROF_ERR越小,抓取的就越多越精确,也就更接近高档的分析工具。值得一表的是,如果PROF_ERR够小,可以在较大的函数中抓出更消耗性能的位置。

第3个宏PROF_MASK又是什么鬼?这其实是个工具宏,用来把地址向下对齐到误差范围的边界,这也意味着PROF_ERR必须是2的整数次幂,这么做是避免消耗性能的取模运算。

下面请出关键的数据结构:性能分析的PC统计单元:

如何简单快速的来打造MCU性能分析利器的详细资料概述

很显然,PROF_CNT是多少,就应该有多少个ProfUnit_t实例。结构中,hitCnt是关键的参数,它统计了这个对齐后的PC地址”baseAddr”被采集到了多少次,”hitRatio”则是一个对人类友好的辅助变量,提供千分数(其实是1024级)精度的CPU占用率。

此外,还有个非常有用的小细节。比如,小伙伴们可能也注意到了,CPU占用率也是有时效性的。就像一个漫长的初始化可能让一些查询等待的函数红极一时,但在之前越是弄得满城风雨,程序主体运行后往往越是无声无息,甚至都没机会再运行一遍。

而即使在正常运行期间,不同时段开启的功能不同,常常出现“皇帝轮流做,明年到我家”。因此,咱们可以加一点衰减处理,也就是定期对于非0的hitCnt进行扣除一格,如果没有后续源源不断的再次命中,就会渐渐走下神坛直至跌出排行榜。这样可以提高统计结果的实时性。衰减机制的思路也很简单,就是轮流从hitCnt非0的各个PC样本点去扣。

综合上面的如意算盘,定义了如下统领全局的结构体:

如何简单快速的来打造MCU性能分析利器的详细资料概述

这个结构里decayNdx表示下次统计时从谁身上扣除hitCnt,每一次扣除后就轮转到后面的item上,以公平公正。profCnt则表示已经做了多少次profiling统计,用于计算命中率,而items则是上文介绍的PC样本统计单元。这里也有个小细节,就是在应用衰减来扣除每个item的hitCnt时,profCnt也需要扣除。

好了,有了完整的数据结构,该写代码了。从易到难,咱们可以先处理命中时的动作。

如何简单快速的来打造MCU性能分析利器的详细资料概述

代码很简单,记录地址,增加hitCnt,计算hitRate,再实时地“冒泡”,把最多hitCnt的item顶上去,排序的目的也是为了便于突出重点,对人类查看友好。这里每次hitCnt加2,是为了让衰减得没有增加的快,“过气”得缓慢点,小伙伴们可以根据需要调节增加量。

再剩下的就是最复杂的主函数了——说是复杂也就不到40行的代码。要在主函数里先应用衰减,然后检查这次的PC样本是否已有记录。如有记录就调用上面的_ProfOnHit(),如无记录则在一个hitCnt为0的item上记录这个新PC样本,也是调用_ProfOnHit()。此外,为了避免把idle函数和一些不想关心的函数也记录下来,程序还支持一个“忽略列表”,凡是位于忽略列表地址范围的PC样本都不理会。

如何简单快速的来打造MCU性能分析利器的详细资料概述

大功告成!接下来就是要使用了。使用非常简单,只需在定时器中断服务程序的主体中调用Profiling()并告诉它进入定时器中断时pc寄存器的值。为了获取入栈的PC,这个需要一点Cortex-M的基础知识和手写汇编。下面给出KEIL下的汇编入口:

如何简单快速的来打造MCU性能分析利器的详细资料概述

这个小程序先查出中断前使用的栈指针并以作为参数传递给C语言主体“SysTick_C_Handler”。如果小伙伴们对这段汇编看不明白,就直接用就可以。

C语言主体的使用方式如下:

如何简单快速的来打造MCU性能分析利器的详细资料概述

在使用的时候,咱们就进入开发工具的调试会话,让程序跑一会,再停下来。如果是在KEIL或IAR中,可以使用memory窗口或watch窗口观察s_prof.items。如果使用了GDB,可以输入命令 p/a s_prof.items。查看排名靠前的item,对照map文件即可估计出函数的名字和大致位置。值得一表的是,GDB下会自动解析出地址所对应的函数名,不用再让咱们手动查map,非常贴心!

回顾理论篇介绍的几个小坑,当查到一个不合理的地址时,先别激动,看看是不是小坑中的之一。如果确定不是,就有必要深入处理了。

到了这里,这期性能分析的话题的理论和实践的故事就讲完了。

等等,似乎还有什么没交待完。试想,当我们一一找出最耗CPU资源的函数后,倘若束手无策,那也是徒劳无功,我们必须有对付他们的办法。其中一项省力而又见效快的办法就是把它们放在执行性能更高的位置中去,也就是前面说的VIP区。下次,咱们就介绍一下各种VIP区的特点,以及升V的方法!敬请继续关注!

热门推荐

原文标题:70行代码来打造MCU性能分析利器!

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

盘点下代超低功耗黑科技:IoT核心组件

物联网节点里的最后一个关键模组是MCU。MCU作为控制整个物联网节点的核心模组,其功耗也往往不可忽视....

的头像 富士通电子 发表于 07-17 17:29 166次 阅读
盘点下代超低功耗黑科技:IoT核心组件

电流监控和调试工具在MCU设计中应用

构成物联网 (IoT) 的众多器件关联在一起的其中一个原因是对低能耗的要求。为了满足这一要求,需要在....

的头像 Duke 发表于 07-13 10:00 842次 阅读
电流监控和调试工具在MCU设计中应用

单片机选型诀窍分享:根据数值选择低功耗MCU

发表于 07-13 00:14 5次 阅读
单片机选型诀窍分享:根据数值选择低功耗MCU

MM32SPIN MCU系列应用方案展示——电动工具

发表于 07-12 16:11 58次 阅读
MM32SPIN MCU系列应用方案展示——电动工具

70行代码来打造MCU性能分析利器!

改善性能可以改进代码的写法或算法,这就要结合实际问题,各显神通了。

的头像 嵌入式资讯精选 发表于 07-12 14:52 317次 阅读
70行代码来打造MCU性能分析利器!

SensorTile开发套件及无线解决方案

具有蓝牙功能的 IoT 设备可通过智能手机和其他网关设备提供即时可用的数据访问。但电池供电的低功耗 ....

的头像 Duke 发表于 07-12 09:26 813次 阅读
SensorTile开发套件及无线解决方案

针对汽车行业的通用型MCU应用

S32K系列汽车MCU是NXP推出的针对汽车行业的通用型MCU,采用亲民的ARM内核,可以覆盖从M0....

的头像 ZLG致远电子 发表于 07-12 08:55 1089次 阅读
针对汽车行业的通用型MCU应用

恩智浦推跨界处理器 加速MCU/MPU的融合

目前恩智浦在华拥有超过7000名员工,50%的市场营收来自中国,是中国最大的ARM MCU供应商,在....

的头像 面包板社区 发表于 07-11 16:41 307次 阅读
恩智浦推跨界处理器 加速MCU/MPU的融合

ZLG集团携手NXP将在全国开展S32K系列MCU研讨会

同时,ZLG致远电子将同场展示PA8000功率分析仪、ZDS4054 Plus示波器、CAN总线分析....

的头像 周立功单片机 发表于 07-11 16:05 586次 阅读
ZLG集团携手NXP将在全国开展S32K系列MCU研讨会

典型的MCU+DC-DC架构的移动电源设计

软件SoC架构是把MCU和DC-DC集成在同一颗SoC芯片上,既满足灵活性的需求,也有集成度高、外围....

的头像 电子工程专辑 发表于 07-11 15:54 229次 阅读
典型的MCU+DC-DC架构的移动电源设计

FOC之定点小数运算

许多MCU 芯片只支持整数运算,如果要在这些芯片上进行小数运算,定点运算应该是最佳选择了;此外即使芯....

的头像 张飞实战电子 发表于 07-11 15:10 158次 阅读
FOC之定点小数运算

XMC MCU 开发基础:DAVE3 APP项目转KEIL项目

DAVE3 APP项目转KEIL项目

的头像 Infineon视频 发表于 07-11 10:40 102次 观看
XMC MCU 开发基础:DAVE3 APP项目转KEIL项目

能量收集系统设计,MPPT算法以及MCU总控制系统设计流程图

考虑低频可再生能源的收集内阻较大,如果使用LC振荡器电路中的电感值较大,不易集成,且电磁损耗大。本系....

的头像 电子技术应用ChinaAET 发表于 07-11 09:01 164次 阅读
能量收集系统设计,MPPT算法以及MCU总控制系统设计流程图

XMC MCU 开发基础:DAVE3项目导入导出

DAVE3 项目导入导出

的头像 Infineon视频 发表于 07-11 02:12 69次 观看
XMC MCU 开发基础:DAVE3项目导入导出

XMC MCU 开发基础:DAVE3 APP Lib安装过程

DAVE3 APP Lib 安装过程

的头像 Infineon视频 发表于 07-11 02:07 68次 观看
XMC MCU 开发基础:DAVE3 APP Lib安装过程

XMC MCU 开发基础:DAVE3安装过程

DAVE3 安装过程

的头像 Infineon视频 发表于 07-11 01:50 105次 观看
XMC MCU 开发基础:DAVE3安装过程

XMC MCU 开发基础:DAVE3例程下载

DAVE3 例程下载

的头像 Infineon视频 发表于 07-11 01:31 86次 观看
XMC MCU 开发基础:DAVE3例程下载

XMC MCU 开发基础:生成DAVE3 APP项目

生成DAVE3 APP项目

的头像 Infineon视频 发表于 07-11 01:10 107次 观看
XMC MCU 开发基础:生成DAVE3 APP项目

关于Atmel ARM MCU使用SambaGUI的单片机串行编程的介绍

Atmel小贴士 Atmel ARM MCU 使用SambaGUI的单片机串行编程

的头像 Microchip视频 发表于 07-11 00:18 76次 观看
关于Atmel ARM MCU使用SambaGUI的单片机串行编程的介绍

S3F8S28XZZ-VK98 积压库存,1.6元出售,全新原装 MBI5024的晶圆

发表于 07-10 17:32 89次 阅读
S3F8S28XZZ-VK98 积压库存,1.6元出售,全新原装        MBI5024的晶圆

关于PIC24F Curiosity开发板和MPLAB代码配置器的特点介绍

本视频将通过一个易于入门的生态系统向您介绍16位单片机的无限可能,该生态系统包括PIC24F Cur....

的头像 Microchip视频 发表于 07-10 11:22 90次 观看
关于PIC24F Curiosity开发板和MPLAB代码配置器的特点介绍

关于PIC24FJ256GB412系列低功耗单片机的特点介绍

本视频将介绍PIC24FJ256GB412系列低功耗加密单片机的详细信息,还将展示IoT演示的加密和....

的头像 Microchip视频 发表于 07-10 11:12 113次 观看
关于PIC24FJ256GB412系列低功耗单片机的特点介绍

关于8位MCU PIC16F19197产品系列的特点介绍

本视频介绍了Microchip首款针对广受欢迎的低功耗、电池供电且带触摸功能的LCD应用而优化的8位....

的头像 Microchip视频 发表于 07-10 11:06 114次 观看
关于8位MCU PIC16F19197产品系列的特点介绍

美国微芯科技公司,推出了两款全新的tinyAVR MCU器件

为了提高采用AVR单片机的应用的响应能力,Microchip Technology Inc.(美国微....

发表于 07-10 10:23 72次 阅读
美国微芯科技公司,推出了两款全新的tinyAVR MCU器件

用于CC3220无线 MCU的LaunchPad 开发套件设计

发表于 07-10 09:43 287次 阅读
用于CC3220无线 MCU的LaunchPad 开发套件设计

在Flex Gecko上添加MicriumOS的设计指南

将Flex Gecko EFR32FG12安装到Wireless Started Kit Mainb....

的头像 SiliconLabs 发表于 07-10 09:12 519次 阅读
在Flex Gecko上添加MicriumOS的设计指南

设计MCU时晶振不工作怎么办?MCU如何选型?怎样外接电容?

在设计MCU,会遇到晶振不工作,这个文档的内容解释MCU如何选型,以及怎样外接电容。使晶振更好的工作....

发表于 07-10 08:00 45次 阅读
设计MCU时晶振不工作怎么办?MCU如何选型?怎样外接电容?

介绍关于PIC16F161X角度定时器的操作演示

PIC16F161X角度定时器演示

的头像 Microchip视频 发表于 07-10 04:17 79次 观看
介绍关于PIC16F161X角度定时器的操作演示

关于Atmel ATtiny43U MCU的特点介绍

Atmel ATtiny43U MCU简介

的头像 Microchip视频 发表于 07-10 03:07 88次 观看
关于Atmel ATtiny43U MCU的特点介绍

关于Atmel AVR MCU特点及功能应用介绍

Atmel 的AVR_MCU架构您应该都有听过或用过,您有看过这些功能和应用吗?

的头像 Microchip视频 发表于 07-10 01:14 80次 观看
关于Atmel AVR MCU特点及功能应用介绍

Atmel - 介绍ARM MCU在单片机串行编程中有哪些应用?

Atmel ARM MCU在单片机串行编程中的应用

的头像 Microchip视频 发表于 07-10 00:54 97次 观看
Atmel - 介绍ARM MCU在单片机串行编程中有哪些应用?

Microchip MCU智能可穿戴设备解决方案,了解下

大联大旗下品佳集团推出基于 Microchip MCU的智能可穿戴设备解决方案,其中包括运行记步器的....

发表于 07-09 15:58 45次 阅读
Microchip MCU智能可穿戴设备解决方案,了解下

嵌入式硬件设计过程中的一些问题浅析

嵌入式开发项目中,首先需要做需求分析,然后根据需求分析进行综合考虑,这里给出几个特别要注意的问题

的头像 畅学单片机 发表于 07-09 14:59 171次 阅读
嵌入式硬件设计过程中的一些问题浅析

关于Studio 7图像界面设计工具的特点介绍

此工具將幫助您選擇和配置MCU中的軟件組件,驅動程序,中間件和示例項目,定制你的嵌入式應用的可用性和....

的头像 Microchip视频 发表于 07-09 01:02 121次 观看
关于Studio 7图像界面设计工具的特点介绍

介绍ATMEL MCU的GPIO配置

Getting Started with Atmel SMART SAM D MCU Configu....

的头像 Microchip视频 发表于 07-09 00:25 111次 观看
介绍ATMEL MCU的GPIO配置

tinyAVR的新一代AVR MCU介绍

本视频介绍tinyAVR家族的最新成员——ATtiny161x/ATtiny81x/ATtiny41....

的头像 Microchip视频 发表于 07-08 01:02 136次 观看
tinyAVR的新一代AVR MCU介绍

对主流MCU的程序加密进行讲解

利用芯片随机数外设或者其他能够产生随机数的机制,在每次上电后系统取得一个随机数,并将这个随机数通过类....

的头像 周立功单片机 发表于 07-06 09:17 320次 阅读
对主流MCU的程序加密进行讲解

关于AVR微控制器最早期的样品介绍

爱特梅尔AVR微控制器共同发明人兼首席营销官Alf-Egil Bogen 介绍AVR微控制器最早期的....

的头像 Microchip视频 发表于 07-06 05:38 199次 观看
关于AVR微控制器最早期的样品介绍

关于2017年STM32巡回研讨会视频

另外,本次研讨会资料也提供下载了!大家可以自行下载:

的头像 EE techvideo 发表于 07-06 02:18 248次 观看
关于2017年STM32巡回研讨会视频

关于STM32品牌宣传的视频

STM32品牌宣传片

的头像 EE techvideo 发表于 07-06 02:17 166次 观看
关于STM32品牌宣传的视频

关于2017年STM32中国峰会的现场视频

2017年STM32中国峰会,精彩回顾

的头像 EE techvideo 发表于 07-06 02:11 181次 观看
关于2017年STM32中国峰会的现场视频

利用ST MCU内部的基准参考电压监测电源电压

发表于 07-06 00:59 62次 阅读
利用ST MCU内部的基准参考电压监测电源电压

AI和边缘计算驱动恩智浦 i.MX处理器全面升级

已经拿下中国最大ARM MCU供应商宝座的恩智浦(恩智浦)最近在北京宣布,推出性价比秒杀对手的三款i....

的头像 章鹰 发表于 07-05 10:42 1707次 阅读
AI和边缘计算驱动恩智浦 i.MX处理器全面升级

介绍ST MCU官网的包含内容

ST MCU官网介绍

的头像 EE techvideo 发表于 07-05 01:03 158次 观看
介绍ST MCU官网的包含内容

介绍通过ST官网申请MCU免费样片的过程

如何通过ST官网申请MCU免费样片

的头像 EE techvideo 发表于 07-05 00:05 163次 观看
介绍通过ST官网申请MCU免费样片的过程

你的MCU不只这么强大

当前的生活节奏越来越快,对计算处理器的要求也越来越高。即使是有摩尔定律的限制,人们仍然希望在单个芯片....

的头像 嵌入式资讯精选 发表于 07-04 14:14 372次 阅读
你的MCU不只这么强大

美国微芯科技公司推出了两款全新的tinyAVR® MCU器件

Microchip的MCU8产品部副总裁Steve Drehobl表示:“我们一直在为推出新型AVR....

的头像 Microchip微芯 发表于 07-04 11:39 456次 阅读
美国微芯科技公司推出了两款全新的tinyAVR® MCU器件

基于RS485的MODBUS编程,mcu是51单片机的详细资料和程序免费下载

本文档的主要内容详细介绍的是基于RS485的MODBUS编程,mcu是51单片机的详细资料和程序免费....

发表于 07-04 08:00 65次 阅读
基于RS485的MODBUS编程,mcu是51单片机的详细资料和程序免费下载

STM32F103C8-PKT评估板演示代码与手册等相关资料下载

发表于 07-04 01:58 86次 阅读
STM32F103C8-PKT评估板演示代码与手册等相关资料下载

【精选问答】TI 低功耗无线 MCU 对物联网的推动及应用

发表于 07-03 15:46 361次 阅读
【精选问答】TI 低功耗无线 MCU 对物联网的推动及应用

Microchip推出两款全新tinyAVR® MCU器件 进一步增加传感器节点功能

ATtiny3217和ATtiny3216是Microchip tinyAVR® 产品系列中存储器最....

的头像 人间烟火123 发表于 07-03 14:33 1055次 阅读
Microchip推出两款全新tinyAVR® MCU器件 进一步增加传感器节点功能

dsPIC33EP GS系列是Microchip新一代16-bit高性能MCU

凭借这些特性及其整体的高性能,dsPIC33EP“GS”系列产品适用于广泛的应用领域,涵盖以下应用市....

的头像 电子工程专辑 发表于 07-03 08:42 422次 阅读
dsPIC33EP GS系列是Microchip新一代16-bit高性能MCU

介绍STM32L0实现超低功耗

STM32L0 超低功耗新突破

的头像 EE techvideo 发表于 07-03 04:20 226次 观看
介绍STM32L0实现超低功耗

介绍STM32L496G开发套件的特点及应用

STM32L496G套件介绍

的头像 EE techvideo 发表于 07-03 03:37 251次 观看
介绍STM32L496G开发套件的特点及应用

如何以MCU控制VKS232驱动LCD显示详细介绍了VKS232的特性和应用

VKS232 是 116 SEG×2 COM 点阵式存储器映射双模式 LCD 驱动电路。是一款静态扫....

发表于 07-02 08:00 54次 阅读
如何以MCU控制VKS232驱动LCD显示详细介绍了VKS232的特性和应用

STM32F7有别于其它相同内核的MCU的几个特性

发表于 07-02 05:17 80次 阅读
STM32F7有别于其它相同内核的MCU的几个特性

告诉你制作单片机需要哪些知识?

然后开始写操作系统前置:ucos(嵌入式操作系统)系统宏定义,系统功能配置,系统头文件,初始化文件,....

的头像 机器人博览 发表于 06-29 15:34 502次 阅读
告诉你制作单片机需要哪些知识?

SimpleLink™蓝牙低功耗CC2640R2F无线MCU

发表于 06-29 09:37 612次 阅读
SimpleLink™蓝牙低功耗CC2640R2F无线MCU

MSP430F149 RF1100的案例参考代码免费下载

本文档的主要内容详细介绍的是MSP430F149 RF1100的案例参考代码免费下载:包括了RF11....

发表于 06-29 08:00 57次 阅读
MSP430F149 RF1100的案例参考代码免费下载

如图所示,TIME-VR接单片机p1.0,MCU带模数转换功能,请问如何采集5V电压?

发表于 06-28 10:00 222次 阅读
如图所示,TIME-VR接单片机p1.0,MCU带模数转换功能,请问如何采集5V电压?