【匠芯创D133CBS】--6.LVGL界面移植
<div class='showpostmsg'> 本帖最后由 dirty 于 2024-8-31 23:30 编辑<p> 本篇梳理讲述SDK LVGL框架功能,并移植自定义LVGL demo界面功能。</p>
<p> </p>
<p><strong><span style="color:#0000ff;">一.系统框架LVGL</span></strong></p>
<p> RTOS SDK已经移植了LVGL,其库如下图所示框架部分。</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图1:LVGL库框架</div>
<p> LVGL的入口为lvgl_thread_init,其被RT-Thread系统初始化导入。在任务lvgl_thread_entry里实现了LVGL显示触摸初始化:函数 lv_port_disp_init()中实现显示接口的对接以及硬件 2D 加速的对接;函数 lv_port_indev_init()中实现触摸屏的对接;函数 aic_dec_create()注册硬件解码器。lv_timer_handler(),lv_tick_get()给了LVGL一个心跳。lv_task_handler()处理LVGL任务。关于LVGL库,SDK是移植配套好了。<span style="color:#0000ff;">用户LVGL应用在aic_ui_init里实现。</span></p>
<p> </p>
<p><strong><span style="color:#0000ff;">二.移植自定义LVGL</span></strong></p>
<p>1.GUI-Guider工具界面配置如下,注意适配屏幕分辨率1024*600,色深16bit。这里用现成的模板稍作修改,使用Simulator仿真模式。</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图2:GUI-Guider配置</div>
<p>2.稍作修改,生成C界面源码,操作如下</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图3:生成界面源码</div>
<p>3.取需要使用源码如下,移入到SDK aci_demo路径下,这里放在自建app_user_ui下,如下图所示。 <span style="color:#0000ff;">后面以模板化编写</span>,后面界面更改变动基本只需将如下图所示部分替换即可。</p>
<div style="text-align: center;">
<div style="text-align: center;"></div>
<div style="text-align: center;">图4:界面C源代码部分植入工程</div>
</div>
<p>4.创建app_user_ui.c/.h文件,编写用户统一界面代码接口函数如下</p>
<pre>
<code>/*
packages/artinchip/lvgl-ui/aic_demo/app_user_ui/app_user_ui.c
*/
#include <unistd.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include "lvgl.h"
#include "aic_ui.h"
#include "lv_port_disp.h"
#include "mpp_fb.h"
#include "app_user_ui.h"
#include "gui_guider.h"
lv_ui guider_ui;
void app_user_ui_init()
{
/* 用户APP 入口 */
setup_ui(&guider_ui);
events_init(&guider_ui);
custom_init(&guider_ui);
}
</code></pre>
<p>5.在LVGL界面用户接口函数aic_ui_init添加如下自定义用户界面代码。这里铺展使用命令宏形式进行灵活选择配置。</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图5:添加用户界面</div>
<p>6,脚本编写。这里涉及到第3步源码植入脚本路径及宏的加入,另一部分是可配置命令脚本。</p>
<p>(1)源码植入脚本SConscript 。这里可以从其他示例界面工程拷贝,然后修改依赖宏,如下图所示。然后将此SConscript脚本拷贝到app_user_ui文件夹下每个子文件夹下。</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图6:修改脚本并在设计界面目录下拷贝</div>
<p>(2)在路径application/Kconfig文件里添加如下:</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图7:修改添加工程命令配置脚本</div>
<p>7.使用scons --menuconfig命令到LVGL,<strong><span style="color:#e67e22;">可以看到自创的界面配置单,可以选择使用自定义界面,非常方面灵活。</span></strong></p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图8:自定义界面配置</div>
<p>8.这时自定义界面代码基本植入完成,可以开始编译。这个<span style="color:#ff33cc;">会出现一些编译不过问题。</span>一个是LVGL API函数不匹配报错,一般替换SDK LVGL的API即可。另一个是SRAM_S0溢出报错如下,这时配置到PSRAM即可。</p>
<div style="text-align: center;"></div>
<div style="text-align: center;">图9:SRAM_S0溢出报错</div>
<p> 自此,用户自定义LVGL Demo界面移植基本完成。</p>
<p> </p>
<p><strong><span style="color:#0000ff;">三.测验</span></strong></p>
<p> 编译烧录后,开机后界面如下,成功植入自定义LVGL demo界面,且后面也很方面根据需要局部替换生成代码即可。</p>
<div style="text-align: center;"></div>
<div style="text-align: center;"></div>
<p> 效果视频如下</p>
<p>92faeee7ddd752b1288eabad996f3dab<br />
</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>大佬您好,这个SRAM_S0溢出报错,这时配置到PSRAM即可,这里一般怎么配置呀?</p>
yangjiaxu 发表于 2024-10-13 20:41
大佬您好,这个SRAM_S0溢出报错,这时配置到PSRAM即可,这里一般怎么配置呀?
<p>都选psram,配置命令里可以找到</p>
dirty 发表于 2024-10-14 19:43
都选psram,配置命令里可以找到
<p>你好,大佬,我昨晚试了一下在meconfig中没找到,能大致说说me配置,关于PSRAM路径吗?还是因为工程的不一样导致的?我用的是官方例程11.d13x demo88-nor rt-thread helloworld</p>
yangjiaxu 发表于 2024-10-15 09:00
你好,大佬,我昨晚试了一下在meconfig中没找到,能大致说说me配置,关于PSRAM路径吗?还是因为工程的不 ...
<p> </p>
dirty 发表于 2024-10-15 11:42
<p>强,搞定了,感谢大佬,哈哈,解惑了</p>
yangjiaxu 发表于 2024-10-15 11:55
强,搞定了,感谢大佬,哈哈,解惑了
<p>多谢大佬!</p>
页:
[1]