DSP下的简单性能优化

笔者之前在DSP6416下开发TDD模式的MAC层协议,发现了一些问题,也对时间性能做了简单优化。

在开发MAC层的过程中,发现了很多影响DSP运行速度的因素,主要包括:

1.     动态内存申请和释放,即malloc和free函数的使用。

当使用次数不多时,malloc和free的处理过程耗时为us级。但当多次动态申请内存后,free函数中会进行内存碎片整理和回收,持续时间可能会到达ms级,且具有系统最高优先级,不可被打断。严重影响MAC层实时性的响应。

因此需将使用动态申请内存的部分改为静态的内存,即用数组的方式固定占用内存。考虑到IRAM空间小,将实时性不高且大量占用空间的存储结构放到SDRAM中,通过IRAM的指针去访问。

2.     存储拷贝memcpy函数

memcpy函数是影响MAC运行速度的一个因素。memcpy对源地址和目的地址以及拷贝长度是有不同的传输速率,速率最多可相差2.5倍。如果源与目的地址都是IRAM, IRAM中代码运行速率很快,此差距可忽略。但当源与目的有一个为SDRAM时,对于8K字节,此时延可到达175us-400us范围。

原理不再赘述,目前工程中对于此问题的优化:

A.   对于大数据量的拷贝对于源地址和目的地址以及传输长度进行了规范,即源地址对齐偶地址,拷贝长度对齐8字节。效率提高将近2倍;

B.    减少memcpy的操作次数,尽量使用指针进行转移等操作。                

3.     printf及其他用于调试或显示的系统函数

经测试,printf函数或其它调试以及系统函数的占用时间为ms级,且具备最高的系统优先级,不响应中断,对于代码运行有严重影响。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值