本帖最后由 刘鑫源的水煮鱼 于 2024-11-6 16:06 编辑
在很多嵌入式应用当中,需要跑各种各样的算法,比如像BLDC电机的FOC算法,BMS的卡尔曼滤波算法计算SOC,还有神经网络,语音识别,AI算法等等,在嵌入式软件工程师完成自己的算法后,往往会需要评估下算法的执行效率,消耗多少的RAM,ROM,执行花费了多少的时间周期,在这当中,最为重要的当属算法执行的时间最为重要了,有时候为了达到高性能的执行效率,甚至会在软件上通过查表等方法通过空间来换取时间用以优化算法。
在嵌入式开发当中,测量算法的执行时间是非常重要的,为了完成这个指标,我特地在试用瑞萨的RA2E1
开发板上做详细说明。最后通过串口打印输出算法模块函数的执行时间,来展示给大家。
1.打开我之前的项目工程FPU文件夹目录,打开keil
打开pack insall 安装管理器,安装perf_counter
安装完毕以后,就返回keil界面,点击这个
使能CMSIS里的core
然后使能perf_counter里的core
再hal_entry.c文件里添加如下头文件
我先配置了两个LED ,P103,P104,在keil里打开
配置P103和P104
点击生成
关闭瑞萨IDE,打开keil
封装好LED1和LED2的跑马灯程序
void led_1_flicker(void)
void led_2_flicker(void)
void led_flicker(void)
最后的核心一步,是添加我自己写好的profile测量时间函数,是基于sys
tick定时器来实现的,可以应用在所有Cortex-M处理器上,不限内核版本。
加入keil工程
添加文件目录
在hal_entry()里面添加如下函数代码
while里面实现流水灯,同时测量流水灯执行时间
编译后烧录到板子上
打开串口,选择115200波特
板子上的LED1,LED2在进行跑马灯闪烁。
LED跑马等的裸机是
1,LED1和LED2一起200ms翻转
2,LED1单独200ms翻转,LED2熄灭
3,LED2单独200ms翻转,LED1熄灭
然后可以在串口上面查看LED1和LED2翻转的200ms的执行时间
附件是我的工程代码
可以看到这个执行时间是400014us,是因为两个led亮灭,
400014us是这个,因为集成两个LED,所以耗时多了2us
这里LED1和LED2分别亮灭执行了400012us,本身延时400ms + LED的亮灭 =400012us,非常的准确,符合理论预期