做winCE6应用和驱动的都进来下: CE6, 三星2440, CreateDIBSection/LCD驱动的问题

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


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

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

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

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

代码示例:


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

//引用new返回的内存
BYTE* pNewData = new BYTE[800*480*sizeof(DWORD)];



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

测试程序在这里下载

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


...全文
310 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wohuazhen 2010-03-08
  • 打赏
  • 举报
回复
引用 15 楼 wceui 的回复:
找到问题所在了,CreateDIBSection所引用的内存是No Cache的,所以非常的慢,
new出来的内存是可以Cache的,所以很快


你是怎么确定是这个问题的呢?
这个是操作系统这样规定的吗?
还是定制系统的时候用户设置的?
jiereliyi 2010-03-08
  • 打赏
  • 举报
回复
up,我的是友善的板子
800*480的屏 2440 wince 6
305:92
WceUi 2010-03-07
  • 打赏
  • 举报
回复
也就是找到问题根本所在了,但不知道怎么去解决..
引用 16 楼 xilidecai 的回复:
引用 15 楼 wceui 的回复:
如果解决还是不知道,
这句话没有看懂?
呵呵~~~
xilidecai 2010-03-07
  • 打赏
  • 举报
回复
引用 15 楼 wceui 的回复:
如果解决还是不知道,

这句话没有看懂?
呵呵~~~
WceUi 2010-03-06
  • 打赏
  • 举报
回复
找到问题所在了,CreateDIBSection所引用的内存是No Cache的,所以非常的慢,
new出来的内存是可以Cache的,所以很快
,如果解决还是不知道,
navi_dx 2010-03-05
  • 打赏
  • 举报
回复
不理解,GWS部分的代码不公开,所以看不到CreateDIBSection之后干了什么事
wolfmvp 2010-03-05
  • 打赏
  • 举报
回复
观注观注,学习学习…WinCE5.0与WinCE6.0在某些处理机制上的确有差别,但是不代表该平台有问题,WinCE6.0也是向前兼容滴…
Ei 2010-03-04
  • 打赏
  • 举报
回复
关注下,之前做截屏 没发觉CreateDibSection效率问题,之后用DDraw也没觉得快多少。
fanggui 2010-03-04
  • 打赏
  • 举报
回复
CreateDibSection开辟的内存区域在上面的环境下(三星2440, windows CE 6.0)会不会被保护了?
结果访问CreateDibSection开辟的内存区的操作时,实际操作被转换为先把数据拷出来,再操作,最后写回!
以上纯属猜测,大家也可以把自己的猜测、想法写出来一起看看哈!

WceUi 2010-03-03
  • 打赏
  • 举报
回复
我问了友善之臂的技术支持, 友善之臂那边回复说没时间解决我这个问题...
有没有高手了解啊,,急啊!!!!

引用 6 楼 wceui 的回复:
用友善之臂的windows ce 6.0系统的,应该都有这个问题.
希望有友善之臂的开发板(跑CE6.0)的兄弟们也帮忙测试下.看看您们是不是有同样的问题.
sunrain_hjb 2010-03-03
  • 打赏
  • 举报
回复
http://www.cnblogs.com/we-hjb/archive/2010/02/09/1666778.html
看看这里,简单介绍了WinCE下绘制屏幕的几种方法,有些确实慢,有些快一些。
91program 2010-03-03
  • 打赏
  • 举报
回复
http://blog.csdn.net/91program/archive/2010/01/06/5144060.aspx

和我遇到的这个问题类似,不过没有解决方法
fanggui 2010-03-03
  • 打赏
  • 举报
回复
“三星2440, windows CE 6.0”下CreateDIBSection创立的内存区域会不会受保护,导致对其操作比New的内存会慢?也许和LCD驱动的内存操作有关!
不太清楚,帮顶下!
WceUi 2010-03-02
  • 打赏
  • 举报
回复
用友善之臂的windows ce 6.0系统的,应该都有这个问题.
希望有友善之臂的开发板(跑CE6.0)的兄弟们也帮忙测试下.看看您们是不是有同样的问题.
kyzf 2010-03-02
  • 打赏
  • 举报
回复
帮顶下。

期待高人详细解答下,我也学习下,谢谢!
WceUi 2010-03-02
  • 打赏
  • 举报
回复
我们对驱动不太熟悉,可能是驱动的问题,因为CreateDIBSection毕竟是微软的API,,代码我们检查也没有什么问题,关键是同样的硬件,在CE5.0上没有问题,而在CE6.0上有问题.

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


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

这个慢,原因何在呢?
sunrain_hjb 2010-03-02
  • 打赏
  • 举报
回复
是否可以考虑直接获取显存进行读写呢?

这个慢,原因何在呢?
WceUi 2010-03-02
  • 打赏
  • 举报
回复
谢谢,这个数据是没有什么问题的,非常强大!!!

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

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

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

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

DIBSection : 56
new: 57
sunrain_hjb 2010-03-02
  • 打赏
  • 举报
回复
平台TCC89 WinCE6.0 800*480*16

DIBSection : 56
new: 57

19,502

社区成员

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

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