阅读:2858回复:8
显示驱动崩溃问题
本人现正从事S3C2450平台驱动开发,跑的是CE5.0 ,三星给过来的BSP是支持800*480分辩率的TFT,我们用的是480*272的TFT,经过修改,使之能正常显示窗口界面等,表面是没什么问题了,但是在开发应用时发现有buge
问题表现: 当上层应用调用bltbit函数,传的其中一些参数会使GWES崩溃了,由s3c2450disp.dll引起。打打印 如下: Data Abort: Thread=8350531c Proc=8053b690 'gwes.exe' AKY=00000049 PC=02cd9620(s3c2450disp.dll+0x00029620) RA=02ccd828(s3c2450disp.dll+0x0001d828) BVA=0fb05b32 FSR=00000001 测试信息: BitBlt (hdc, 10,10,50,100, hdcMem,0,0, SRCCOPY) ; 崩溃 BitBlt (hdc, 0,0,320, 242, hdcMem,50,100, SRCCOPY) ; 崩溃 BitBlt (hdc, 10,10,320, 242, hdcMem,50,100, SRCCOPY) ; 崩溃 BitBlt (hdc, 10,10,480,272, hdcMem,50,100, SRCCOPY) ; 崩溃 BitBlt (hdc, 0,0,480, 272, hdcMem,50,100, SRCCOPY) ; 崩溃 BitBlt (hdc, 0,0,480, 272, hdcMem,50,50, SRCCOPY) ; 崩溃 BitBlt (hdc, 50,50,480, 272, hdcMem,50,50, SRCCOPY) ; BitBlt (hdc, 10,10,320, 242, hdcMem,0,0, SRCCOPY) ; 不崩溃 BitBlt (hdc, 0,0,480, 272, hdcMem,0,0, SRCCOPY) ; 不崩溃 注:源图片是480×272的 经过两周的认真排查,现在还没能找到问题的真正原因,所以在这请求各位大侠帮分析一下,指点指点。 作过的努力:1 刚开始我认为是内存越界问题,因为800×480 分辩率16bit下,该驱动是不会崩溃的, 480×272 24bit下也是不会崩溃的,但是当我用480×272 16bit时,就会有这种情况。 而480×272 +24bit 和800×480 +16bit占用的空间是差不多,但是我在驱动的AllocSurface 里面打印出申请的地址,都是合法的。在会崩溃的情况下加倍了大小,也无济于事。 2 因为2450是有2D硬件加速的,我以为是硬件加速这一块的问题,是不是三星在2D中固定了 对800×480分辩率的支持,但是苦苦找了好几天,都没找出个所以然来。 3 试过加大了显存,没效果 问题: 1 我跟综过,GWES是在BltPrepare运行之后,BltComple之前崩溃的,我估计是在EmulatedBlt 中崩溃,但是CE5.0有个很怪的地方,D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\DISPLAY\GPE这个 目录下的程序生成的是GPE_LIB.lib, 而不是gpe.lib,而s3c2450disp.dll是为gpe.dll服务的, 那gpe.lib在哪生成?GPE_LIB.lib又是干啥用的?我想在EmulatedBlt里打出trace,要在哪里找到 EmulatedBlt函数?\DRIVERS\DISPLAY\GPE这个目录里加好trace好像都没打出来的? 2 我应怎么入手?如果是在EmulatedBlt里出问题了,我又应该如何解决? 3 像我这种情况,一般会是哪里出的问题呢? 谢谢各位了。 |
|
沙发#
发布于:2008-11-08 19:27
为什么没人回答呀,我自已顶起,
|
|
板凳#
发布于:2008-11-09 19:13
接合你自己的Source Code反汇编下,s3c2450disp.dll+0x0001d828这个地方执行什么操作,然后判断
|
|
|
地板#
发布于:2008-11-10 11:14
一般来说,wince自带的程序应该不会出现异常,建议你先把2D加速去掉看看还会不会出现问题.如果还会,那就应该是系统参数设置问题,如果不会了,显然就是2D加速部分的问题.
|
|
地下室#
发布于:2008-11-10 18:54
谢谢上面两位同行,该BSP中,提供了一个2D的LIB.从.map文件看到的崩溃地址(s3c2450disp.dll+0x00029620)都是在该LIB文件中的函数memand,但我没有源码,,我去掉2D是不会崩溃的,只要不用到该lib,我初步估计是在2D实现EmulateBltSelect16时出问题了,不知有没道理
|
|
5楼#
发布于:2008-11-11 13:53
函数EmulatedBlt在文件Swblt.cpp (\wince500\public\common\oak\drivers\display\gpe);
文件WINCE500\PUBLIC\COMMON\CESYSGEN\makefile指定gpe.lib是怎样生成的(但我也看不明白, 此前想将GPE移到platform下, 也不成功,编译出错); |
|
6楼#
发布于:2009-03-16 18:37
你这个问题解决了吗?我现在也碰到相同问题,能传授一下经验吗
developsz2008@163.com 是我的邮箱 |
|
7楼#
发布于:2009-07-04 17:10
大家交流交流,楼上两位的问题解决了么?我也遇到了这样的情况,两位兄弟是怎么解决的,给指指路!谢谢!我的邮箱:yyl919@163.com 谢谢!!
|
|
8楼#
发布于:2009-12-11 17:24
同问啊!!
|
|