ucgui移植到vxworks的windml.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ucgui移植到vxworks的windml

最近比较闲,就把ucgui移植到vxworks的windml上了。Ucugi本身假如直接移植到硬件的话会更有效率,但移植到windml上也有它的优势,比如移植流程比较简单,可以绕过各种硬件,直接在ugl提供的接口函数上操作,从而省去繁琐的硬件调试,而硬件调试恰恰是最轻易出错的地方。还有就是使得ucgui能运行在任何支持windml的硬件环境上面,比如simpc、pentium机等,这对于缩短产品开发周期大有好处。至于效率方面,因 为俺们只需要运用运用windml最简单的ugl画图功能,所以只要CPU不是太差(比如桌面PC机就可以),那么多出一层windml导致的效率损失是全部可以忽略不计的。 首先总体详 解一下,俺运用运用的是Tornado2.2+vxworks5.5+windml3.0+ugl3.4,硬件运用运用风河自带的simpc。色彩转换采用ugl+ucgui都支持的RGB565编码。 下面正式详 解移植流程: LCD显示屏的移植 Ucgui中,对显示屏的支持只需要填写有限的几个函数即可: LCD_L0_Init LCD_L0_ReInit LCD_L0_Off LCD_L0_On LCD_L0_DrawBitmap LCD_L0_DrawHLine LCD_L0_DrawVLine LCD_L0_FillRect LCD_L0_SetPixelIndex LCD_L0_XorPixel LCD_L0_Init中研究的是显示屏的初始化,移植时在此填入ugl的初始化函数即可,另外俺把ugl input的初始化操作也放在里面。 int LCD_L0_Init(void) { int x,y; /* Initialize UGL */ if (uglInitialize() == UGL_STATUS_ERROR) return; /* Obtain display device identifier */ g_uglDevId = (UGL_DEVICE_ID)uglRegistryFind (UGL_DISPLAY_TYPE, 0, 0,0)-gt;id; /* obtain the input service identifier. */ g_uglInputServiceId = (UGL_INPUT_SERVICE_ID)uglRegistryFind (UGL_INPUT_SERVICE_TYPE, 0, 0,0)-gt;id; g_uglGc = uglGcCreate(g_uglDevId); for (y = 0; y lt; LCD_YSIZE; y++) { LCD_L0_DrawHLine(0, LCD_XSIZE-1, BKCOLORINDEX); } return 0; } ReInit俺没有用到,所以这里是空的。 On+Off函数同样也没有用到。 DrawBitMap函数中不涉+硬件操作,最终它会调用SetPixelIndex函数,所以直接把demo中的函数研究复制过来即可。 DrawVLine+DrawHLine函数,ugl中+之对应的是uglLine,所以直接映射过去即可。 void LCD_L0_DrawHLine (int x0, int y, int x1) { if (GUI_Context.DrawMode LCD_DRAWMODE_XOR) { for (;x0 lt;= x1; x0++) { LCD_L0_XorPixel(x0, y); } } else { uglForegroundColorSet(g_uglGc, LCD_GetColorIndex()); uglLine(g_uglGc, x0, y, x1, y); } } FillRect函数最终也是映射到DrawVLine或DrawHLine操作。 SetPixelIndex,这是最基本的绘图函数,这里由 于俺运用运用RGB565编码,所以直接把Index值传到ugl函数即可。 void LCD_L0_SetPixelIndex(int x, int y, int Index) { uglPixelSet(g_uglGc, x, y, Index0xffff); } XorPixel,对指定点的色彩进行异或操作,俺的研究办法是这样: void LCD_L0_XorPixel(int x, int y) { unsigned int Index = COLO2INDEX(LCD_L0_GetPixelIndex(x,y)); LCD_L0_SetPixelIndex(x, y, ~Index); }

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档