ok138ok
驱动牛犊
驱动牛犊
  • 注册日期2007-07-23
  • 最后登录2010-04-12
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望171点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:2778回复:8

显示驱动崩溃问题

楼主#
更多 发布于:2008-11-08 17:06
本人现正从事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 像我这种情况,一般会是哪里出的问题呢?

   谢谢各位了。
ok138ok
驱动牛犊
驱动牛犊
  • 注册日期2007-07-23
  • 最后登录2010-04-12
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望171点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-11-08 19:27
为什么没人回答呀,我自已顶起,
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-11-09 19:13
接合你自己的Source Code反汇编下,s3c2450disp.dll+0x0001d828这个地方执行什么操作,然后判断
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
shentong973
驱动牛犊
驱动牛犊
  • 注册日期2005-08-21
  • 最后登录2011-03-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望77点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-11-10 11:14
一般来说,wince自带的程序应该不会出现异常,建议你先把2D加速去掉看看还会不会出现问题.如果还会,那就应该是系统参数设置问题,如果不会了,显然就是2D加速部分的问题.
ok138ok
驱动牛犊
驱动牛犊
  • 注册日期2007-07-23
  • 最后登录2010-04-12
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望171点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-11-10 18:54
谢谢上面两位同行,该BSP中,提供了一个2D的LIB.从.map文件看到的崩溃地址(s3c2450disp.dll+0x00029620)都是在该LIB文件中的函数memand,但我没有源码,,我去掉2D是不会崩溃的,只要不用到该lib,我初步估计是在2D实现EmulateBltSelect16时出问题了,不知有没道理
aguijie
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2011-07-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望65点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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下, 也不成功,编译出错);
xiecc
驱动牛犊
驱动牛犊
  • 注册日期2009-03-16
  • 最后登录2009-05-20
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-03-16 18:37
你这个问题解决了吗?我现在也碰到相同问题,能传授一下经验吗
developsz2008@163.com 是我的邮箱
yeyonglue
驱动牛犊
驱动牛犊
  • 注册日期2007-05-18
  • 最后登录2009-07-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2009-07-04 17:10
大家交流交流,楼上两位的问题解决了么?我也遇到了这样的情况,两位兄弟是怎么解决的,给指指路!谢谢!我的邮箱:yyl919@163.com 谢谢!!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2009-12-11 17:24
同问啊!!
游客

返回顶部