LVGL V8.2字符串显示在Keil MDK上需要注意的事项(以小熊派为例)

点击上方“嵌入式应用研究院”,选择“置顶/星标公众号

干货福利,第一时间送达!

来源 | 嵌入式应用研究院

整理&排版 | 嵌入式应用研究院

之前在LVGL模拟器CodeBlock上写了一个多语言的demo,用于学习LVGL多国语言的应用,如下所示:

9e959f3c690be1f19b0805830d1ce015.png

后来我将其移植到小熊派开发板以后,结果就成了这样,连控件显示的位置都变了(控件移位的具体原因不详,待后续分析LVGL源代码):

ced0c7aa5433caa04b487351df0a12f0.png

这一看就是编码问题。按以往的经验,直接在工程目录下找到有中文字符串的这个文件,用notepad++将其转成utf-8,然后直接保存再重新打开Keil MDK就可以了,那么试试吧:

7c6be0b5d32753d6995624a00ec7b585.png

baff3e6b0fd70e77593ed11dc3463104.png

接下来打开MDK工程,重新编译,出现了6个Error:

d6ea3eb9219b62aeba0c87d259eba74a.png

1、排坑找错

71bb5cd9df6996e4299c6def00a08108.png

错误原因显示的是调用宏的参数过多,但实际上这就只是传了一个参数呀...不应该,我开始怀疑编译器是否支持宽字符显示的问题,因此搜索Keil MDK帮助手册看到了这一项:

014744008b1ce09083abe038ee0d84f8.png

f301203c135b8dac48b58f174b536e6c.png

按照文档的指示,我在Misc Controls这个配置项上添加了--no-multibyte-chars,然后重新编译工程:

926a4795bcea16f31afc85d64a71f9d0.png

接下来再将其下载到开发板上:

df9d3d05069b0c431001c37cba811d86.png

2f158da829c1f412c89d379fb5b8b5c2.png

最终显示正常。

2、核心原因

通过STM32CubeMX生成的程序源文件的编码格式并不是UTF-8或者UTF16,因此如果在某些文件下写中文以及一些特殊国家语言字符则需要手动对该文件进行转换。如果源文件编码为 UTF-8 或 UTF-16,并且文件以字节顺序标记开头,则编译器将忽略 --locale 和 --[no_]multibyte_chars 选项并将文件解释为 UTF-8 或 UTF- 16。

3、正确做法

通常做多语言显示,我们需要将每个不同国家的语言需要单独拧到不同的文件中,然后将其单独进行转码,以方便进行统一管理,例如3D打印机固件Marlin代码,就是这么做的:

ea9af527622fbe832f8cd53336fa6e30.png

而一些模拟显示软件,编码环境较为完善,很多坑其实已经帮我们提前排除了,因此在面对一些编码环境没有那么完善的平台来说,了解环境配置以及一些编码规则则更有利于我们定位问题。如果你有更好的方法,欢迎评论区留言,一起交流LVGL应用技术。目前应用例程还在修改中,后续将会共享到Github或者Gitee,地址将在评论区给出。下期将分享如何将按键模拟旋转编码器来实现键盘输入。

往期精彩

Keil MDK软件包(pack)下载的几种方法

手把手教你在Keil MDK中使用GCC编译器工具链

分享一个在Keil开发环境中配置代码格式化工具Astyle(美化代码风格)

Keil MDK 将升级为 Keil Studio,你想要的黑色主题来了,附手把手使用教程

Keil MDK的一些推荐功能(编码格式、自动保存、代码提示、动态语法检查、多核编译)

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Engineer-Bruce_Yang

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值