Truly
驱动牛犊
驱动牛犊
  • 注册日期2001-08-16
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2003-07-18 17:49
D12的速度不慢,是MCU慢了,
建议用DMA方式会最快
数据传送部分用汇编编写,改写C的IO函数
提高MCU时钟都会有比较好的效果
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2003-07-18 19:29
我也曾经遇到过楼主的情况,我采取以下方法问题得到解决,现在传送32M内容只需35秒,基本达到要求。
1、瓶颈之一是MCU工作频率太低造成MCU读写FLASH速度太慢,我把原来的8M提高到24M速度大大提高。
2、主机端的编程问题:
   把
   Function1(...)    
   {
    Createfile(...);
    Readfile(...);
    Closehandle(...);
   }
   循环执行Function1(...);

   改成
   Function2(...)    
   {
    Createfile(...);
    循环执行Readfile(...);  //关键地方
    Closehandle(...);
   }
  上述方法在传送大量数据时尤其重要,Function1把大量时间消耗在建立与取消链接(Createfile、Closehandle)中,Function2在整个传送中只建立与取消链接一次。原则是建立链接时主机告诉USB设备要得到什么,然后USB设备不断收/发,主机也不断发/收,传送完了再结束链接,
3、把主机端的BUFFER加大,一般16K、32K就足够了,再加大速度没有明显提高,因为D12只有128Byte BUFFER。

最后速度上去后记住给我加分。


 

    循环执行Readfile(...);这样也行吗?我采用了加大BUFFER的方法的,我设成64K。我觉得加大了BUFFER,就是循环执行了READFILE()啊,难道它们还有区别?
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2003-07-19 08:44
引用:循环执行Readfile(...);这样也行吗?我采用了加大BUFFER的方法的,我设成64K。我觉得加大了BUFFER,就是循环执行了READFILE()啊,难道它们还有区别?


BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。
山穷水尽疑无路,柳暗花明又一村。
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2003-07-19 08:48
补充:D12跟FLASH的速度都不是瓶颈,MCU跟他们都是并行通信,关键是MCU速度太慢没有把D12跟FLASH的速度发挥出来。
山穷水尽疑无路,柳暗花明又一村。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2003-07-20 11:09
就是啊,我用的是中断的方式,我感觉MCU在响应中断时,把64个数据写入D12太慢了,更让人不解的是bulk方式下,每帧可以放16个数据包,不知道怎么实现?
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2003-07-20 11:13
引用:BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。

一个DWORD是什么意思啊,是不是我设的BUFFER为64K,一个DWORD也就是64K?

hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2003-07-21 09:21
引用:BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。

一个DWORD是什么意思啊,是不是我设的BUFFER为64K,一个DWORD也就是64K?

 


是的
山穷水尽疑无路,柳暗花明又一村。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2003-07-27 18:49
我仔细的看了我的应用程序,上面用的是DO……WHILE的方式,应该用的是循环方式的,看来只有采用DMA方式了,痛苦啊!
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2003-07-27 18:51
hewx老兄,谢谢你聊了这么多,给点分你,先!希望以后能继续和你交流!
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2003-07-27 18:53
hewx老兄,不好意思,我放不了分,别的帖子给你放分吧!

真的抱歉
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2003-07-28 10:23
谢谢,分不是目的,能够在技术上做交流,彼此有进步才是最终目的。当然,有分给就更好,因为是对本人回答正确与否的评价。
山穷水尽疑无路,柳暗花明又一村。
上一页 下一页
游客

返回顶部