有无linux操作系统两种情况下ARM的DMA传输速度不同?

hanhannina 2009-08-03 10:43:11
我做了个测试,在没有操作系统的情况下,配置好DMA特殊寄存器,采用burst模式,读写16字节用时大概2.4微秒,但是在有linux系统的情况下,写了个简单的DMA驱动,也采用burst模式,读写16字节却用了5点多微秒,两种情况DMA的速度差了这么多是什么呢?原来也做过中断测试,发现了同样的情况,就是有linux的中断速度远低于无系统的中断速度,当时估计是因为系统的一些调度消耗了时间降低了速度,可对于DMA来说,初始化之后的传输过程不是就应该不受系统调度的影响了吗?到底是什么影响了DMA的速度呢?
...全文
233 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
panxingpao 2011-04-04
  • 打赏
  • 举报
回复
我也想用这个DMA来解决传输问题,关注中
richard_liu_sh 2009-08-06
  • 打赏
  • 举报
回复
在linux下,
1. 中断有一定延时性,比如,你正在执行一段临界区的代码,你用诸如spin_lock_irq, 或local_irq_disable之类的, 这些函数关闭了中断,使中断暂时得不到响应。
2. 在用DMA搬移数据时,是从一个内存搬到一个内存,每一个burst大小向内存控制器请求一次, 然后内存控制器响应一次。然而,此时linux的其它进程可能软件写了这一些内存,同样,它也会向内存控制器请求。 这样内存控制器就有一个仲裁。DMA此时不会独占内存控制器。

所以比无操作系统的时候速度慢
hanhannina 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 great_bug 的回复:]
详情? 你的数据怎样来的?
[/Quote]
测试中,是把BANK5(从0x28000000地址开始)的一块数据用DMA方式拷到BANK6(从0x31800000地址开始)
hanhannina 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dontium 的回复:]
楼主跑得真快呀,
开始搞OS了?
[/Quote]
呵呵,做东西用到了,就测试测试
Great_Bug 2009-08-06
  • 打赏
  • 举报
回复
详情? 你的数据怎样来的?
westermann 2009-08-06
  • 打赏
  • 举报
回复
单一应用,裸奔肯定比有OS快。

OS是为了解决软件设计复杂度的。如果用裸奔方式设计大型系统(航天飞机,智能手机等),开发成本太高。
dontium 2009-08-05
  • 打赏
  • 举报
回复
楼主跑得真快呀,
开始搞OS了?

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧