dirty 发表于 2024-8-31 22:49

【匠芯创D133CBS】--6.LVGL界面移植

<div class='showpostmsg'> 本帖最后由 dirty 于 2024-8-31 23:30 编辑

<p>&nbsp; &nbsp; &nbsp; 本篇梳理讲述SDK LVGL框架功能,并移植自定义LVGL demo界面功能。</p>

<p>&nbsp;</p>

<p><strong><span style="color:#0000ff;">一.系统框架LVGL</span></strong></p>

<p>&nbsp; &nbsp; &nbsp; RTOS SDK已经移植了LVGL,其库如下图所示框架部分。</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图1:LVGL库框架</div>

<p>&nbsp; &nbsp; &nbsp; 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>&nbsp;</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下,如下图所示。&nbsp; <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 &lt;unistd.h&gt;
#include &lt;time.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/time.h&gt;
#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(&amp;guider_ui);

    events_init(&amp;guider_ui);

    custom_init(&amp;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>&nbsp; &nbsp; &nbsp; 自此,用户自定义LVGL Demo界面移植基本完成。</p>

<p>&nbsp;</p>

<p><strong><span style="color:#0000ff;">三.测验</span></strong></p>

<p>&nbsp; &nbsp; &nbsp; 编译烧录后,开机后界面如下,成功植入自定义LVGL demo界面,且后面也很方面根据需要局部替换生成代码即可。</p>

<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<p>&nbsp; &nbsp; &nbsp; 效果视频如下</p>

<p>92faeee7ddd752b1288eabad996f3dab<br />
&nbsp;</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>

yangjiaxu 发表于 2024-10-13 20:41

<p>大佬您好,这个SRAM_S0溢出报错,这时配置到PSRAM即可,这里一般怎么配置呀?</p>

dirty 发表于 2024-10-14 19:43

yangjiaxu 发表于 2024-10-13 20:41
大佬您好,这个SRAM_S0溢出报错,这时配置到PSRAM即可,这里一般怎么配置呀?

<p>都选psram,配置命令里可以找到</p>

yangjiaxu 发表于 2024-10-15 09:00

dirty 发表于 2024-10-14 19:43
都选psram,配置命令里可以找到

<p>你好,大佬,我昨晚试了一下在meconfig中没找到,能大致说说me配置,关于PSRAM路径吗?还是因为工程的不一样导致的?我用的是官方例程11.d13x demo88-nor rt-thread helloworld</p>

dirty 发表于 2024-10-15 11:42

yangjiaxu 发表于 2024-10-15 09:00
你好,大佬,我昨晚试了一下在meconfig中没找到,能大致说说me配置,关于PSRAM路径吗?还是因为工程的不 ...

<p> &nbsp;</p>

yangjiaxu 发表于 2024-10-15 11:55

dirty 发表于 2024-10-15 11:42
&nbsp;

<p>强,搞定了,感谢大佬,哈哈,解惑了</p>

new_learner 发表于 2024-11-20 15:08

yangjiaxu 发表于 2024-10-15 11:55
强,搞定了,感谢大佬,哈哈,解惑了

<p>多谢大佬!</p>
页: [1]
查看完整版本: 【匠芯创D133CBS】--6.LVGL界面移植