打印

CM3性能的讨论。欢迎加入

[复制链接]
2836|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w00d|  楼主 | 2011-1-31 00:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 w00d 于 2011-2-1 00:14 编辑

最近有个项目,需要响应一个很频繁的AD中断,大概14us发生一次中断。用的是NXP的LPC1766,100MHz。因为每次都需要对数据进行分析和处理,所以不能使用DMA,这样对中断程序的性能要求就非常苛刻了。虽然程序还没有完全写好,但是也已经搭建好了框架,大概能够看出一些情况了。
里面主要是一个switch语句,我在中断服务程序的进入点和退出点分别改变芯片引脚状态,发现整个程序大概为800ns。运行时间最长的是读取外设寄存器的时间,大概达到了310ns,这对于单条指令时间为10ns的LPC1766来说当然太长了。通过观察反汇编程序,其流程如下:
1.通过相对于PC的寻址方式,将FLASH中的寄存器地址载入寄存器。
2.读取外设内容进入寄存器。
我分析了一下,初步认为是因为读取FLASH的时候打破了流水线和FLASH加速,从而造成了极大的延迟。想了n多办法都没有效果,后来看了一下LPC1766的框图,发现nxp好像将i-codebus,d-codebus和system bus都进入了多层总线阵列中,打破了arm公司的CM3定义,这样程序在ram中跑应该可以全速跑,试了一下,整个程序大概跑了600ns,提高还是很可观的。
大家谈谈吧,还有什么办法能够提高性能。不要说什么使用汇编,我看了反汇编出来的程序,估计自己写也提高不会太大。

相关帖子

沙发
w00d|  楼主 | 2011-2-1 00:15 | 只看该作者
没人来谈谈吗?

使用特权

评论回复
板凳
kinbing| | 2011-2-3 14:38 | 只看该作者
不懂

使用特权

评论回复
地板
IGOOGLE| | 2011-2-11 14:05 | 只看该作者
提高性能?
是提高执行速度吧
一个程序跑下来600ns?我都是在ms级的。
不知道你AD是用来采集数据做分析处理,还是只采集一个关键点?如果主要是一个点,建议还是想办法用个比较器。

使用特权

评论回复
5
fxal| | 2011-2-12 15:51 | 只看该作者
1766我也用过,但没你要求这么高,我就用来做按键检测的。

使用特权

评论回复
6
jiajining| | 2011-2-15 17:48 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

2

粉丝