里飞网

标题: [求助]使用LvglFontTool V0.4工具生成XBF的外部bin文件读取异常 [打印本页]

作者: KAMYZHAO    时间: 2024-1-18 11:31
标题: [求助]使用LvglFontTool V0.4工具生成XBF的外部bin文件读取异常
现象描述:
  使用LvglFontTool V0.4工具生成指定的字符集的bin文件,然后烧录到外部flash进行读取,发现有些许字符没有显示出来,而且是固定的字符,但我用工具生成那个C文件数组进行测试,是正常显示。感觉像是那个字符显示数据生成有问题似的,由于我的指定字符集含有中日俄法西班牙等,不清楚是否有影响?


指定字符集是:

蓄电池启动充数据语言关于类型测试中普通液态标准选择容量设置状前后良好失败重更换健康寿命内阻值额定引擎转速开始如果成功按键继续退出正常压偏高低纹波有无负载请增加至并保持秒然输入查看记录备品牌商编号软硬件版本性能过是否法打印纸张已尽没时间发机慢检侦文移除浮头照灯例。?!,
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ΩÜüä“öíóéú¿¡ÉÀÈ«»àバッテリ一クランキグ電デタ語についてのイプレギュフド吸収ガスマトゲルセ強化規格を選択するコアツ工業日ヨロパ国際委員会米自動車技術船舶用理事設ヘ部ジ圧測力シ番態後再しくださ交換がぎま続けかワエ敗た検れ分間あり回転ら「」押場合は終了な時行せん度上げ、残少め刷でき紙確認記録ブモソウェョハРУ́СКИЙÇÃÚÍÁАМЛЯТОБПВЫНЕЗДЩГ°ЬЖХШЧЦÓестпульацийбвгдЁёжзІікмнорЎўФфхчшыЭэЮюяÊÑñÂËÎÏÔÖÙیƀâèêîïôùûçœæ表面荷取とえばオぁぃぅうぇぉおぐこござじずぜそぞちぢっづどぬねぱひびぴふぶぷへべぺほぼぽみむもゃやゅゆょよろゎわゐゑァィゥォカケゴサザズゼゾダチヂヅナニヌネノヒビピベペホボポミムメャヤユヮヰヱヲヴヵヶ






作者: 阿里兄    时间: 2024-1-18 11:41
C数组的正常,那这里很可能是你的读取不正确了。
作者: KAMYZHAO    时间: 2024-1-18 12:44
阿里兄 发表于 2024-1-18 11:41
C数组的正常,那这里很可能是你的读取不正确了。

一般是什么原因呢,第一张图三个地方是固定的字符(y)呢
作者: KAMYZHAO    时间: 2024-1-18 14:20
阿里兄 发表于 2024-1-18 11:41
C数组的正常,那这里很可能是你的读取不正确了。

调试追踪发现,函数碰到这个字符压根就没读直接越过去读下一个字符去了,这是编码的问题吗
作者: 阿里兄    时间: 2024-1-18 14:22
KAMYZHAO 发表于 2024-1-18 14:20
调试追踪发现,函数碰到这个字符压根就没读直接越过去读下一个字符去了,这是编码的问题吗 ...

这里可能是你的BIN存到FLASH出错,或是读到的数据出错。
作者: KAMYZHAO    时间: 2024-1-18 14:32
本帖最后由 KAMYZHAO 于 2024-1-18 15:54 编辑
阿里兄 发表于 2024-1-18 14:22
这里可能是你的BIN存到FLASH出错,或是读到的数据出错。

我重新看了下,是有做读取操作,但是只操作了__user_font_get_glyph_dsc函数,没有执行__user_font_get_bitmap函数,请问这是什么原因呢,我读了下该字符的bin数据,是没问题(跟生成C数组的数据一致)。
作者: 阿里兄    时间: 2024-1-18 15:59
KAMYZHAO 发表于 2024-1-18 14:32
我重新看了下,是有做读取操作,但是只操作了__user_font_get_glyph_dsc函数,没有执行__user_font_get_bi ...

BIN转成C数组试试吧,或是换内部大数组,文字少点,内部大数组和BIN格式没有区别了。
作者: KAMYZHAO    时间: 2024-1-18 17:00
阿里兄 发表于 2024-1-18 15:59
BIN转成C数组试试吧,或是换内部大数组,文字少点,内部大数组和BIN格式没有区别了。 ...

我试了用内部大数组,可以正常显示。
然后我之前追踪了一下代码发现在这里出现异常:
---------------------lv_draw_letter函数---------------------------------
  int32_t pos_x = pos_p->x + g.ofs_x;
    int32_t pos_y = pos_p->y + (font_p->line_height - font_p->base_line) - g.box_h - g.ofs_y;

    /*If the letter is completely out of mask don't draw it */
    if(pos_x + g.box_w < clip_area->x1 ||
       pos_x > clip_area->x2 ||
       pos_y + g.box_h < clip_area->y1 ||
       pos_y > clip_area->y2)  {
                                 #include "stdio.h"
                                printf("OOOOOOOOOOOOOO!\r\n");//这里跳出了!!!!!!!
        return;
    }

    const uint8_t * map_p = lv_font_get_glyph_bitmap(font_p, letter);
    if(map_p == NULL) {
        LV_LOG_WARN("lv_draw_letter: character's bitmap not found");
        return;
    }
-----------------------------------
是上面函数内跳出导致没有往下执行lv_font_get_glyph_bitmap  ,所以就没显示出来.这就无语了!!!
作者: KAMYZHAO    时间: 2024-1-19 10:36
找到原因了,过来结贴

是数据类型转换引起的。在函数内加强转类型就OK了
作者: 阿里兄    时间: 2024-1-19 10:42
KAMYZHAO 发表于 2024-1-19 10:36
找到原因了,过来结贴

是数据类型转换引起的。在函数内加强转类型就OK了 ...

解决了就好,感谢告知




欢迎光临 里飞网 (http://dz.lfly.xyz/) Powered by Discuz! X3.3