EDN首页   博客首页

日志档案

发表于 2006-11-22 23:59:16

12

标签: vxworks如何才能操作WindML显示部分的存储空间  

vxworks如何才能操作WindML显示部分的存储空间

(UGL_UINT32)Vesa_VideoDriver->genDriver.fbAddres在初始化设备后将这个值附给一个全局变量,再打印出来就行.这个地址就是初始地址.其实在你应用程序初始化设备后会在Shell里看见打印出一串地址(我的工控板是0x40800000)这就是起始地址,后面还有显存大小,是否使用双缓存.下面是初始化你的图形设备的程序: 

if (uglInitialize() == UGL_STATUS_ERROR)/*初始化设备*/
 return; 
  pRegistryData = uglRegistryFind (UGL_DISPLAY_TYPE, 0, 0, 0);/*找到设备注册信息*/
    if (pRegistryData == UGL_NULL)
        {
 printf("Display not found. Exiting.\n");
 uglDeinitialize();
 return;
 }
    devId = (UGL_DEVICE_ID)pRegistryData->id;/*设备ID*/

    pRegistryData = uglRegistryFind (UGL_INPUT_SERVICE_TYPE, 0, 0, 0); /*找到输入设备*/  
    if (pRegistryData == UGL_NULL)
   {
     printf("Input service not found. Exiting.\n");
     uglDeinitialize();
     return;
   }
    inputServiceId = (UGL_INPUT_SERVICE_ID)pRegistryData->id;/*输入设备ID*/

后直接往初始地址地址就能写值了!

系统分类: 嵌入式   |   用户分类: windML   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(2222)    回复(21)  

投一票您将和博主都有获奖机会!

  • huifajiang

    2006-11-29 8:44:03

    我正在开发一个vxworks下得显控界面,但安装了zinc6后无法使用,论坛上人告诉我是因为zinc不支持windml3.0,但我的windml2.0在tornado2.2下无法安装,真是急死我了。

    请问这里得高手,怎样才能让tornado、windml和zinc配合起来使用?这些软件到何处下载?

  • yanshen

    2006-11-29 12:34:14

    vxworks在5.0以后的版本好像就不支持zinc了,tornado2.2是vxworks5.5。你装个tornado2.0试试吧。

  • yanshen

    2006-11-23 22:09:37

    你可以先用函数chdir将默认路径改为/ATA0(也可能不是这个名,要看你的ATA组件中的属性),然后直接用函数open,read,write,close就能对文件进行操作了。

  • iceliux

    2006-11-23 9:59:19

    请教个问题,如何在windshell中访问目标机CF卡中内容。比如将CF卡中文件通过windshell copy出来。。

    iceliux@emails.bjut.edu.cn

  • cocappjj

    2006-11-27 14:52:57

    呵呵,谢谢yanshen啊,楼上提问的朋友,可以去bbs试一试。

  • yang_tch

    2006-11-27 21:16:35

     

    在目标机中建立ftp server,用PC登陆

     

  • 郑伯新

    2007-2-1 16:58:35

    大家好.我这有PC/104用的内存条,144PIN SO-DIMM PC133

    200PIN SO-DIMM PC333 .我是做工控机内存条的.我给好价格呀!

    北京骏一在线电子科技有限公司

    网站:www.neicun.com.cn      技术支持:400-650-3938

    联系电话:郑伯新  010-51296615/25-602

  • sl

    2006-12-17 17:47:52

    问题解决了,谢谢你的指导,以后还会向你多多请教的

  • sl

    2006-12-17 13:33:00

    谢谢你的回复,谢谢!!!
    我用的实验板也是工控机,是盛博的PC104,型号SuperPT,显卡C&T69000,2M显存,我按照你在文章中说的方法试了一下,找到的显存位置好象不对,我在我的.c中加入以下代码。我的目标在屏幕上画一个BMP图象,640*480,256色的。bmp是我用windows自带的画图程序做的,一个纯红色图片,色彩值全部是F9,
    unsigned int width,height,address,memsize;
    unsigned char temp[640*480]
    ....
    UGL_MODE_INFO info;
    ...初始化信息和屏幕上画图完成后,
    uglInfo(devId, UGL_MODE_INFO_REQ, &modeInfo);
    width = info.width;
    height = info.height;
    address=(UGL_UINT32)info.fbAddress;
    memsize=info.displayMemAvail;
     
    我取出width,height,address,memsize值发现,width和height是对的,address=0xd8000000,memsize=0;displayMemAvail不是可利用的显存大小吗,怎么是0呢,我的BMP文件在显存空间是不是从0xd8000000后的640*480字节。这里面应该全是F9,我从程序中把这段空间读了出来,内容不是F9;这是什么原因,请指导下,谢谢。
    我装的是winxp,tornado2.0,windml2.0;uglRegistryFind这个函数不知道为什么我的WINDML库里没有啊
    期盼回复指导!!!!!!

  • yanshen

    2006-12-17 14:12:26

    uglRegistryFind这个函数没有,是不是因为你配置WindML的时候没有配置好呢?

  • yanshen

    2006-12-17 14:13:37

    在uglInitialize() 执行完以后,在主机端的Shell里就打印出了你的显存地址和显存大小。你看看是不是?

  • sl

    2006-12-17 14:32:43

    我主机端初始化完成后没任何显示uglRegistryFind我UGL的.h文件中没有

  • sl

    2006-12-17 14:36:25

    有QQ之类的吗,我希望能多和你交流交流,我的QQ:41686110

  • yanshen

    2006-12-16 23:52:15

    其实这个地址是只是一个影射地址我的工控板地址是0x40800000(windML配置的16位色)。直接往这个地址开始写565的十六位色,显卡驱动就可以在屏幕上将你写的颜色显示在屏幕上。

  • sl

    2006-12-16 15:48:01

    你好,看了您的文章,想请教下在VXWORKS用WINDML的问题,文章中说在uglInitialize()将(UGL_UINT32)Vesa_VideoDriver->genDriver.fbAddres这个值附给一个全局变量,这样找到的是显存开始的位置,还是所要操作的显存位置,Vesa_VideoDriver是UGL_GENERIC_DRIVER型变量吗,能给段具体的例子说明下吗

    谢谢!!!!!!!!

  • hrn31

    2007-3-23 16:57:24

    您好!向您请教一个问题:

    uglInitialize() 是如何调用显示、字体等的驱动程序?

  • yanshen

    2006-11-26 22:13:44

    对不起了,我们用的自己的GUI,对这些函数不是很了解。如有可以解决的高手请留言,谢谢!

  • 朱锦明

    2006-11-26 0:17:33

    高手你好,由于工作需要,做一个阵面监测的程序,

    我在窗口上画的矩形没有任何显示,为什么?程序如下

    int MyDetectWin::MyDraw(int left,int top,int width,int height)
    {
          ZafRegionStruct drawRegion ; //BeginDraw();
         
      
          ZafDisplay *display = Display();
          display->SetCoordinateType(ZAF_PIXEL);
         
          BeginDraw();
          drawRegion.left = 10;
          drawRegion.top  = 10;
          drawRegion.right = drawRegion.left + 100;
          drawRegion.bottom = drawRegion.top + 100;

       
          display->SetBackground(ZAF_CLR_RED);
          display->Rectangle(drawRegion,1,true);
          //display->DestroyColor(color);
         
          ZafPrompt *lable=new ZafPrompt(drawRegion.left,drawRegion.top,40, ZAF_ITEXT("prompt"));//prompt在界面上可以看到,说明执行了。
                    lable->SetCoordinateType(ZAF_PIXEL);                                                          
       Add(lable);
          EndDraw(); 
         
       
    return 1;
    }

    但是用鼠标消息画的矩形却有显示:

    ZafEventType MyDetectWin::Event(const ZafEventStruct &event)
    {
     ZafEventType ccode = LogicalEvent(event);
        char buf[50];
        ZafDisplay *replay = Display();
       
     switch (ccode)
     {
         
     case L_BEGIN_SELECT:
        {
         ccode = ZafWindow::Event(event);

      //WindowManager()->SetMouseEventRoute(this);//这一句会导致任何鼠标事件都发给她处理,破坏了
      
      origin = event.position;                    //原来的路由方式.
      replay->SetCoordinateType(ZAF_PIXEL);
      origin_PIXEL = origin.Position(ZAF_PIXEL);
      
      
      sprintf(buf,"%d",origin_PIXEL.column);
            rowstring->SetText(ZAF_ITEXT(buf));
            sprintf(buf,"%d",origin_PIXEL.line);
            linestring->SetText(ZAF_ITEXT(buf)); 
      
      BeginDraw();
      
      ZafRegionStruct redrawRegion ;
      redrawRegion.left = origin_PIXEL.column;
      redrawRegion.top  = origin_PIXEL.line;
      redrawRegion.right = redrawRegion.left + CELLWIDTH;
            redrawRegion.bottom = redrawRegion.top + CELLHEIGHT;
           
            replay->SetBackground(ZAF_CLR_RED);
            replay->Rectangle(redrawRegion,1,true);
           
            EndDraw();
           
          }
        break;
       
       
     default:
      ccode = ZafWindow::Event(event);
     }

     return (ccode);
    }

    怎么办?

    我需要画几十个矩形呢!!对了MyDetectWin是加在notebook上的。

    MyTabBook::MyTabBook(int left ,int top,int width,int height)
     :ZafNotebook(left, top, width, height)
    {
     SetCoordinateType(ZAF_PIXEL);
     

     ZafWindow *page1 = new MyDetectWin(left,top,width,height);
     page1->Add(new ZafTitle("Array Detect"));

     Add(page1);

        tableft = left;
        tabtop = top;
        tabwidth = width;
        tabheight = height;
          
    }

    我感觉是画了,但是又被重画刷新了,怎么改?

  • yanshen

    2007-3-29 17:29:09

    windML没有中文字体哦:)

  • beaver

    2007-6-2 21:02:42

    您好!

    我用的是Tornado2.0。在其他论坛上看到了与Tornado2.2配合的windml+zinc的组合。但没有看到怎么样组合才能适合Tornado2.0,是否需要什么补丁?请您指点一下。我是新手。需要开发个简单的界面。比较茫然。请高手指点。

  • wukui

    2007-7-11 20:32:44

    安装Tornado ID 2.0后(内置的WindML3.02),居然没有任何关于WindML的文档。

    具说有一本是WindML Programer's Guide,请问高手能否支援一下。

    另外我是新手,刚做了几个非GUI程序并download的运行成功。但对WindML一筹莫展,最简单的例子都编译不过。有没有入门资料可以参考啊。

    谢谢了。

    wukui.2005#gmail.com