自己做网站卖货多少钱,wordpress 国内镜像,重庆做网站开发的公司,宁波网络推广培训文章目录
背景介绍
初始代码
优化代码
分析和应用
总结 背景介绍 在一个嵌入式软件开发项目中#xff0c;有一个使用MATLAB Function编写的算法模块#xff0c;功能是从一个较大的数组中提取一段数据#xff0c;然后求均值输出#xff0c;示例如下#xff1a; 初始代…
文章目录
背景介绍
初始代码
优化代码
分析和应用
总结 背景介绍 在一个嵌入式软件开发项目中有一个使用MATLAB Function编写的算法模块功能是从一个较大的数组中提取一段数据然后求均值输出示例如下 初始代码 一开始算法开发的思路非常简单按照功能需求把算法分成两步。第一步提取目标数据第二步求均值输出。示例如下
function y fcn(u, n)assert(n 100);x zeros(1, n);for i1:1:nx(i) u(i);endy mean(x); 基于上述算法编译后生成的代码如下
/* Model step function */void DynamicRAMdown_step(void){real_T x_data[100];int32_T i;/* MATLAB Function: Root/MATLAB Function incorporates:* Constant: Root/Constant*/for (i 0; i 5; i) {x_data[i] DynamicRAMdown_ConstP.Constant_Value[i];}DynamicRAMdown_Y.y x_data[0];for (i 2; i 6; i) {DynamicRAMdown_Y.y x_data[i - 1];}/* Outport: Root/y incorporates:* MATLAB Function: Root/MATLAB Function*/DynamicRAMdown_Y.y / 5.0;} 分析上述代码可以看到该算法的动态内存负荷是一个数组x_data[100]和一个i数组x_data[100]的length是100但是实际有用的长度只有5另外95都是浪费的。 而且随着具体应用的变化如果数据数组更大那么不必要的动态内存负荷浪费就会更严重所以该算法有较大的优化空间。 优化代码 我们利用matlab中的数组截取功能把截取的数组直接送入求均值的函数这样就不产生上述的中间变量数组x示例如下
function y fcn(u, n)y mean(u(1:n)); 基于上述算法编译后生成的代码如下
/* Model step function */void DynamicRAMdown_step(void){int32_T k;/* MATLAB Function: Root/MATLAB Function1 incorporates:* Constant: Root/Constant*/DynamicRAMdown_Y.y 1.0;for (k 2; k 6; k) {DynamicRAMdown_Y.y DynamicRAMdown_ConstP.Constant_Value[k - 1];}/* Outport: Root/y incorporates:* MATLAB Function: Root/MATLAB Function1*/DynamicRAMdown_Y.y / 5.0;} 分析上述代码可以看到该算法的动态内存负荷只有一个k不产生任何的额外浪费。 至此该算法中动态内存负荷压缩的优化就完成了。 分析和应用 动态内存负荷压缩在不同的软件开发项目中重要性是不一样的。一种是数据量非常庞大的应用例如图像处理算法优化很容易会产生很大的动态内存负荷压缩。另一种是硬件资源非常小的开发平台例如单片机开发的算法如果不经过仔细设计很容易就会出现动态内存负荷溢出。 动态内存负荷压缩优化时需要注意如下几个点 1、使用Simulink中的可变数组时生成的数组大小并不是动态的而是按照最大Size来生成的。所以使用该功能时要根据自己的应用来计算一下尽可能把最大Size设定的小一些。 2、Simulink中设计的算法默认都是生成double型的数据单个数据就要占用8 Byte的内存。所以我们要根据自己的应用选择合适的数据类型例如当精度要求不高时把double型改成single型就能压缩一半动态内存负荷如果数值范围不大时把int32型改成int16型就能再压缩一半动态内存负荷。 3、Simulink中设计算法模块时用端口形式放在外面的信号默认会被定义成全局变量如果放在里头就是局部变量。所以我们要尽可能地把一些信号放在内部尽量少使用全局变量内存使用效率就会提高也就压缩了动态内存负荷。 4、以上建议都是从硬件负荷压缩的角度来优化软件的与此对立的一个优化方向是软件通用性和扩展性。前者的极限优化势必会降低后者的性能反之依然。所以要软件设计时要综合考虑各方面的性能多方面来平衡。 总结 以上就是本人在嵌入式软件开发中遇到内存优化时一些个人理解和分析的总结首先介绍了它的背景情况然后展示它的初始设计和优化设计最后分析了内存优化的注意事项和应用场景。 后续还会分享另外几个最近总结的软件优化知识点欢迎评论区留言、点赞、收藏和关注这些鼓励和支持都将成文本人持续分享的动力。 另外上述例程使用的Demo工程可以到笔者的主页查找和下载。 版权声明原创文章转载和引用请注明出处和链接侵权必究