经过几天的努力终于移植成功了,现把遇到的问题记录下来。
一步一步来,
1、先做通硬件,和驱动,自己动手找到一块旧板子,把GT32L32焊接到板子上,连接到主板的spi2端口上。安装网上的步骤把驱动字库移植过来。先运 行一下,看会不会出汉字呢?。。。。。。自然不可能,期望值太高了。接下来开始找问题,发现字库芯片的地址计算有问题。赶紧修正,再次测试,读出了字库信 息。为了验证读出的是否正确,手工将数据翻译成二进制码,在字模上点出来,哇!居然正确,不可思议。
2、将驱动移到到ucgui上。先ucgui上先显示一下试试,不要异想天开,路需要自己走出来,山需要自己劈开。下面开始查找问题,经过检查,发现字显 示的位置不对,x=-139了,如果改x=10,汉字就显示出来了,说明坐标不对。坐标又是从哪里来呢?经过仔细检查,找到了函数
最关键语句 GUICharP.c 中 int GUIPROP_GetCharDistX(U16P c) { const GUI_FONT_PROP GUI_UNI_PTR * pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c); return (pProp) ? (pProp->paCharInfo + (c-pProp->First))->XSize * GUI_Context.pAFont->XMag : 0; }
有这个(c-pProp->First)。
所以需要把移植的字库
GUI_FLASH const GUI_CHARINFO GUI_FontHZ16_CharInfo[] = { }数组里复制93个。
再次运行,美丽的汉字显示出来了! 大功告成,哈哈哈,大笑一下。
外部字库移植成功后,发现一个缺点,在使用外部字库里的 ASC字符的时候,出现一个上一个下,歪歪扭扭。后分析可能是需要在字体库里定义GUI_CHARINFO的宽度吧,也可能不是。
决定采用系统里的字库,
GUI_FLASH const GUI_FONT_PROP GUI_FontHZ16_Prop0020= { 0x0020, 0x007f, &GUI_CharInfo_Font16ASCII[0], // 对于ASC码字符,采用系统内的16号字。不用芯片上的。 (void *)&GUI_FontHZ16_Propa1a1 };
在第三个参数是指向系统的字库信息索引。
并且定义了粗体字。字库移植完成。
以后有空打算加上拼音输入法:初步构想是:
在软件里定义一个数组 pyArr{‘a’,字库的地址,a拼音的字数},。。。{‘ai’,字库的地址,ai拼音的字数}。。。
在字库中自定义a拼音的汉字区位码,ai的区位码......所有汉字的区位码保存在字库的一个空间中。
在软件中输入一个拼音,比如:‘bo’的时候,在数组pyArr中找到拼音的 记录,根据字库地址和拼音字数,取出这一系列的汉字区位码放到数组 GB[]中,这样得到区位码后,再通过系统显示汉字。