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

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

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

640.png

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

640.png

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

640.png

640.png

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

640.png

1、排坑找错

640.png

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

640.png

640.png

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

640.png

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

640.jpg

640.jpg

最终显示正常。

2、核心原因

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

3、正确做法

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

640.png

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

往期精彩

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


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


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


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


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

目录
相关文章
|
存储 缓存 安全
10款轻量型的嵌入式GUI库分享
10款轻量型的嵌入式GUI库分享
1974 1
|
存储 传感器 Linux
Linux应用开发基础知识——I2C应用编程(十二)
Linux应用开发基础知识——I2C应用编程(十二)
1039 0
Linux应用开发基础知识——I2C应用编程(十二)
|
缓存 Java C语言
嵌入式 LVGL移植到STM32F4
嵌入式 LVGL移植到STM32F4
|
存储 安全 算法
【BLE】 BLE配对绑定保姆级介绍
实现蓝牙通信安全,除了paring/bonding这种底层方式,用户也可以在应用层去实现相同功能,两者从功能上和安全性上没有本质区别,只不过应用层自己实现的话,需要自己选择密码算法,密钥生成,密钥交换等,如果你不是这方面的专家,你的应用就有可能会存在安全漏洞。设备跟手机绑定成功后,手机再次重连这个设备时,就会自动跳过service discovery过程,换句话说,配对的时候手机会把设备所有服务和characteristic的handle保存下来,二次重连的时候,直接用以前保存的handle值去操作设备。
5901 1
【BLE】 BLE配对绑定保姆级介绍
|
NoSQL 网络协议 Linux
OpenOCD(二):Jim-Tcl&运行&OpenOCD项目设置
OpenOCD(二):Jim-Tcl&运行&OpenOCD项目设置
896 1
|
7月前
|
传感器 数据采集 算法
STM32的SPI双机通信实现
STM32的SPI双机通信实现
868 0
|
9月前
|
负载均衡 网络协议 Linux
网络ping不通到底有多少原因?一文搞明白!
网络ping不通是网络中出现频率最高的故障之一,同时也是最让人抓狂的故障,谁没遇到过?今天就和你细说下ping不通的原因,看看能不能和你遇到的情况对上号。
8315 0
|
6月前
|
开发工具 Windows
dotnet-sdk-10.0.100-win-x64.exe 怎么安装?Win10/Win11 安装步骤教程
本文介绍了在64位Windows系统上安装.NET SDK 10.0.100的完整步骤。首先下载安装包,双击运行并同意许可协议,按提示完成安装。可选自定义安装路径或使用默认设置。安装后可通过“Win+R”输入cmd,执行`dotnet --version`命令验证是否成功安装,显示版本号即表示安装成功。
1343 0
【LVGL快速入门】LVGL开源框架入门教程之框架使用(三)
【LVGL快速入门】LVGL开源框架入门教程之框架使用(三)
1195 1
【LVGL快速入门】LVGL开源框架入门教程之框架使用(三)
|
C语言 图形学 芯片
【LVGL快速入门】LVGL开源框架入门教程之框架移植(一)
LVGL开源框架入门教程之框架移植(一)
2109 2