5176|18

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

做winCE6应用和驱动的都进来下: CE6, 三星2440, CreateDIBSection/LCD驱动的问题 [复制链接]

这个问题并不是那么容易发现,表面上看起来好像没有问题一样.
如果您们对界面执行效率要求不高,也许根本就发现不了


环境三星2440, windows CE 6.0 800×480的分辨率.

我们有一个程序在windows CE 5.0下跑得很流畅,但同样的代码移植到三星2440的windows ce 6.0后发现界面很卡,而移植到A4方案上的机器上又不卡.

这个问题有些奇怪,之前也没有遇到过,我们怀疑过很多东西,甚至怀疑是不是windows CE 6.0系统本身的问题.

经过我们一点一点的分析,最后找到了问题的根源:
读写CreateDIBSection所关联的内存和读写new出来的内存效率差别很大.

代码示例:


  1. //引用CreateDIBSection返回的内存
  2. BYTE *pBmpData = NULL;
  3. CreateDIBSection (NULL, pbmi, DIB_RGB_COLORS, (void**)&pBmpData, NULL, 0) ;

  4. //引用new返回的内存
  5. BYTE* pNewData = new BYTE[800*480*sizeof(DWORD)];
复制代码



读写pBmpData和读写pNewData的效率差很多,大概读写pBmpData比读写pNewData慢三倍左右

测试程序在这里下载

请大家帮帮忙,看看怎么解决下,谢谢!!!!!


最新回复

你是怎么确定是这个问题的呢? 这个是操作系统这样规定的吗? 还是定制系统的时候用户设置的?   详情 回复 发表于 2010-3-8 21:42
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
平台TCC89 WinCE6.0 800*480*16

DIBSection : 56
new: 57
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢,这个数据是没有什么问题的,非常强大!!!

我们这边有问题的数据是:

三星2440, windows ce 6.0
DIBSection: 263,
new: 81

由于我们需要直接操作CreateDIBSection返回的内存,所以对我们影响很大.

引用 1 楼 sunrain_hjb 的回复:
平台TCC89 WinCE6.0 800*480*16

DIBSection : 56
new: 57

 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

4
 
是否可以考虑直接获取显存进行读写呢?

这个慢,原因何在呢?
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
我们对驱动不太熟悉,可能是驱动的问题,因为CreateDIBSection毕竟是微软的API,,代码我们检查也没有什么问题,关键是同样的硬件,在CE5.0上没有问题,而在CE6.0上有问题.

希望有做驱动的高人解释下.


引用 3 楼 sunrain_hjb 的回复:
是否可以考虑直接获取显存进行读写呢?

这个慢,原因何在呢?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
帮顶下。

期待高人详细解答下,我也学习下,谢谢!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
用友善之臂的windows ce 6.0系统的,应该都有这个问题.
希望有友善之臂的开发板(跑CE6.0)的兄弟们也帮忙测试下.看看您们是不是有同样的问题.
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

8
 
我问了友善之臂的技术支持, 友善之臂那边回复说没时间解决我这个问题...
有没有高手了解啊,,急啊!!!!

引用 6 楼 wceui 的回复:
用友善之臂的windows ce 6.0系统的,应该都有这个问题.
希望有友善之臂的开发板(跑CE6.0)的兄弟们也帮忙测试下.看看您们是不是有同样的问题.
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
“三星2440, windows CE 6.0”下CreateDIBSection创立的内存区域会不会受保护,导致对其操作比New的内存会慢?也许和LCD驱动的内存操作有关!
不太清楚,帮顶下!
 
 
 

回复

40

帖子

0

TA的资源

一粒金砂(初级)

10
 
[url=http://blog.eeworld.net/91program/archive/2010/01/06/5144060.aspx][/url]

和我遇到的这个问题类似,不过没有解决方法
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

11
 
    CreateDibSection开辟的内存区域在上面的环境下(三星2440, windows CE 6.0)会不会被保护了?
    结果访问CreateDibSection开辟的内存区的操作时,实际操作被转换为先把数据拷出来,再操作,最后写回!
    以上纯属猜测,大家也可以把自己的猜测、想法写出来一起看看哈!

 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

12
 
关注下,之前做截屏 没发觉CreateDibSection效率问题,之后用DDraw也没觉得快多少。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

13
 
观注观注,学习学习…WinCE5.0与WinCE6.0在某些处理机制上的确有差别,但是不代表该平台有问题,WinCE6.0也是向前兼容滴…
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

14
 
不理解,GWS部分的代码不公开,所以看不到CreateDIBSection之后干了什么事
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

15
 
找到问题所在了,CreateDIBSection所引用的内存是No Cache的,所以非常的慢,
new出来的内存是可以Cache的,所以很快
,如果解决还是不知道,
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 15 楼 wceui 的回复:
如果解决还是不知道,

这句话没有看懂?
呵呵~~~
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

17
 
也就是找到问题根本所在了,但不知道怎么去解决..
引用 16 楼 xilidecai 的回复:
引用 15 楼 wceui 的回复:
如果解决还是不知道,
这句话没有看懂?
呵呵~~~
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 
up,我的是友善的板子
800*480的屏 2440 wince 6
305:92
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 15 楼 wceui 的回复:
找到问题所在了,CreateDIBSection所引用的内存是No Cache的,所以非常的慢,
new出来的内存是可以Cache的,所以很快


你是怎么确定是这个问题的呢?
这个是操作系统这样规定的吗?
还是定制系统的时候用户设置的?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表