Files
luban-lite-t3e-pro/doc/topics/sdk/lvgl/lvgl_design_guide.html
2025-01-23 16:37:00 +08:00

315 lines
44 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn" data-whc_version="26.0">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="description" content="代码目录 luban-lite/packages/artinchip/lvgl-ui ├── aic_demo // aic lvgl demo ├── lv_driver // lvgl 显示和 2D 加速对接 ├── lvgl // lvgl 库 ├── aic_ui.c // aic demo 入口 ├── aic_ui.h // aic demo 头文件 ├── lv_conf.h // ..."/><meta name="DC.rights.owner" content="(C) 版权 2025"/><meta name="copyright" content="(C) 版权 2025"/><meta name="generator" content="DITA-OT"/><meta name="DC.type" content="topic"/><meta name="DC.relation" content="../../../topics/sdk/lvgl/lvgl_introduction.html"/><meta name="DC.relation" content="../../../topics/sdk/lvgl/lvgl_test_guide.html"/><meta name="DC.relation" content="../../../topics/sdk/lvgl/lvgl-connecting-display.html"/><meta name="DC.relation" content="../../../topics/sdk/lvgl/lvgl-connecting-display.html"/><meta name="DC.relation" content="../../../topics/sdk/lvgl/lvgl-hw-decoder.html"/><meta name="DC.relation" content="../../../topics/sdk/lvgl/lvgl-freetype.html"/><meta name="DC.relation" content="../../../topics/sdk/lvgl/lvgl-demo.html"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.contributor" content="yan.wang"/><meta name="DC.date.modified" content="2024-01-15"/><meta name="DC.format" content="HTML5"/><meta name="DC.identifier" content="id"/><meta name="DC.language" content="zh-CN"/><title>设计说明</title><!-- Build number 2023110923. --><meta name="wh-path2root" content="../../../"/><meta name="wh-toc-id" content="id-d5856e4772"/><meta name="wh-source-relpath" content="topics/sdk/lvgl/lvgl_design_guide.dita"/><meta name="wh-out-relpath" content="topics/sdk/lvgl/lvgl_design_guide.html"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/commons.css?buildId=2023110923"/>
<link rel="stylesheet" type="text/css" href="../../../webhelp/app/topic.css?buildId=2023110923"/>
<script src="../../../webhelp/app/options/properties.js?buildId=20250121171154"></script>
<script src="../../../webhelp/app/localization/strings.js?buildId=2023110923"></script>
<script src="../../../webhelp/app/search/index/keywords.js?buildId=20250121171154"></script>
<script defer="defer" src="../../../webhelp/app/commons.js?buildId=2023110923"></script>
<script defer="defer" src="../../../webhelp/app/topic.js?buildId=2023110923"></script>
<link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-styles-web.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/notes.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-common.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-images.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/footnote.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/aic-web-watermark.css?buildId=2023110923"/><link rel="stylesheet" type="text/css" href="../../../webhelp/template/topic-body-list.css?buildId=2023110923"/></head>
<body id="id" class="wh_topic_page frmBody">
<a href="#wh_topic_body" class="sr-only sr-only-focusable">
跳转到主要内容
</a>
<header class="navbar navbar-default wh_header">
<div class="container-fluid">
<div class="wh_header_flex_container navbar-nav navbar-expand-md navbar-dark">
<div class="wh_logo_and_publication_title_container">
<div class="wh_logo_and_publication_title">
<a href="http://www.artinchip.com" class=" wh_logo d-none d-sm-block "><img src="../../../company-logo-white.png" alt="RTOS SDK 使用指南SDK 指南文件"/></a>
<div class=" wh_publication_title "><a href="../../../index.html"><span class="booktitle"><span class="ph mainbooktitle">RTOS SDK 使用指南</span><span class="ph booktitlealt">SDK 指南文件</span></span></a></div>
</div>
</div>
<div class="wh_top_menu_and_indexterms_link collapse navbar-collapse" id="wh_top_menu_and_indexterms_link">
</div>
</div>
</div>
</header>
<div class=" wh_search_input navbar-form wh_topic_page_search search " role="form">
<form id="searchForm" method="get" role="search" action="../../../search.html"><div><input type="search" placeholder="搜索 " class="wh_search_textfield" id="textToSearch" name="searchQuery" aria-label="搜索查询" required="required"/><button type="submit" class="wh_search_button" aria-label="搜索"><span class="search_input_text">搜索</span></button></div></form>
</div>
<div class="container-fluid" id="wh_topic_container">
<div class="row">
<nav class="wh_tools d-print-none navbar-expand-md" aria-label="Tools">
<div data-tooltip-position="bottom" class=" wh_breadcrumb "><ol class="d-print-none"><li><span class="home"><a href="../../../index.html"><span>主页</span></a></span></li><li><div class="topicref" data-id="id"><div class="title"><a href="../../../topics/sdk/chapter-advanced-app.html">高级应用</a><div class="wh-tooltip"><p class="shortdesc">系统、存储、多媒体、接口、安全等模块的详细配置和设计说明。</p></div></div></div></li><li><div class="topicref" data-id="concept_mcc_32s_nbc"><div class="title"><a href="../../../topics/chapter-title/chapter-multi-media-sdk.html">多媒体</a><div class="wh-tooltip"><p class="shortdesc">GE、VE、Display、DVP、MPP、MPP 播放器等多媒体模块的介绍和使用说明。</p></div></div></div></li><li><div class="topicref" data-id="id"><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_introduction.html">LVGL 使用指南</a></div></div></li><li class="active"><div class="topicref" data-id="id"><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_design_guide.html">设计说明</a></div></div></li></ol></div>
<div class="wh_right_tools">
<button class="wh_hide_highlight" aria-label="切换搜索突出显示" title="切换搜索突出显示"></button>
<button class="webhelp_expand_collapse_sections" data-next-state="collapsed" aria-label="折叠截面" title="折叠截面"></button>
<div class=" wh_navigation_links "><span id="topic_navigation_links" class="navheader">
<span class="navprev"><a class="- topic/link link" href="../../../topics/sdk/lvgl/lvgl_test_guide.html" title="测试指南" aria-label="上一主题: 测试指南" rel="prev"></a></span>
<span class="navnext"><a class="- topic/link link" href="../../../topics/sdk/lvgl/lvgl-connecting-display.html" title="显示对接" aria-label="下一主题: 显示对接" rel="next"></a></span> </span></div>
<div class=" wh_print_link print d-none d-md-inline-block "><button onClick="window.print()" title="打印此页" aria-label="打印此页"></button></div>
<button type="button" id="wh_toc_button" class="custom-toggler navbar-toggler collapsed wh_toggle_button navbar-light" aria-expanded="false" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
</div>
<div class="wh_content_area">
<div class="row">
<nav id="wh_publication_toc" class="col-lg-3 col-md-3 col-sm-12 d-md-block d-none d-print-none" aria-label="Table of Contents Container">
<div id="wh_publication_toc_content">
<div class=" wh_publication_toc " data-tooltip-position="right"><span class="expand-button-action-labels"><span id="button-expand-action" role="button" aria-label="Expand"></span><span id="button-collapse-action" role="button" aria-label="Collapse"></span><span id="button-pending-action" role="button" aria-label="Pending"></span></span><ul role="tree" aria-label="Table of Contents"><li role="treeitem"><div data-tocid="revinfo_linux-d5856e989" class="topicref" data-id="revinfo_linux" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/revinfo/revinfo_rtos.html" id="revinfo_linux-d5856e989-link">修订记录</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e1003" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e1003-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/env/sdk-compile.html" id="id-d5856e1003-link">SDK 编译</a><div class="wh-tooltip"><p class="shortdesc">介绍不同编译环境下 SDK 的详细编译流程。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e1152" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e1152-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/advanced/sdk-usage.html" id="id-d5856e1152-link">使用指南</a><div class="wh-tooltip"><p class="shortdesc">系统镜像、编译选项、开发板、应用等相关的详细使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_rcx_czh_pzb-d5856e1416" class="topicref" data-id="concept_rcx_czh_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_rcx_czh_pzb-d5856e1416-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-app.html" id="concept_rcx_czh_pzb-d5856e1416-link">应用场景</a><div class="wh-tooltip"><p class="shortdesc">描述了 SDK 在不同应用场景中的配置和使用包括系统更新、OTA、安全方案等。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e2119" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e2119-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/peripheral/peripheral-intro.html" id="id-d5856e2119-link">外设移植</a><div class="wh-tooltip"><p class="shortdesc"><span class="ph">CTP、U 盘、SD 卡、有线和无线网络</span>等外设的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e2244" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e2244-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/bringup/chapter-bringup.html" id="id-d5856e2244-link">BringUp</a><div class="wh-tooltip"><p class="shortdesc">在硬件上电后快速初始化系统,为操作系统的启动准备好必要的硬件环境。</p></div></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="id-d5856e2345" class="topicref" data-id="id" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action id-d5856e2345-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/chapter-advanced-app.html" id="id-d5856e2345-link">高级应用</a><div class="wh-tooltip"><p class="shortdesc">系统、存储、多媒体、接口、安全等模块的详细配置和设计说明。</p></div></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem" aria-expanded="false"><div data-tocid="_0-d5856e2360" class="topicref" data-id="_0" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action _0-d5856e2360-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/boot/lite_boot_direct.html" id="_0-d5856e2360-link">启动引导</a><div class="wh-tooltip"><p class="shortdesc">启动引导程序 Bootloader 可以实现加载启动应用程序、 烧录和升级功能。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-system-d5856e2435" class="topicref" data-id="chapter-system" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-system-d5856e2435-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-system.html" id="chapter-system-d5856e2435-link">系统</a><div class="wh-tooltip"><p class="shortdesc"></p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-memory-d5856e3357" class="topicref" data-id="chapter-memory" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-memory-d5856e3357-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-memory-sdk.html" id="chapter-memory-d5856e3357-link">存储</a><div class="wh-tooltip"><p class="shortdesc">SDMC、SPI NAND、SPI NOR<span class="ph"> 以及文件系统</span> 等存储模块的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="concept_mcc_32s_nbc-d5856e3639" class="topicref" data-id="concept_mcc_32s_nbc" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action concept_mcc_32s_nbc-d5856e3639-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-multi-media-sdk.html" id="concept_mcc_32s_nbc-d5856e3639-link">多媒体</a><div class="wh-tooltip"><p class="shortdesc">GE、VE、Display、DVP、MPP、MPP 播放器等多媒体模块的介绍和使用说明。</p></div></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e3654" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e3654-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/audio/audio_user_guide.html" id="id-d5856e3654-link">Audio 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e3714" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e3714-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/display/display_user_guide_2.html" id="id-d5856e3714-link">Display 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_h4d_fwt_tzb-d5856e3955" class="topicref" data-id="concept_h4d_fwt_tzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_h4d_fwt_tzb-d5856e3955-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/dvp/dvp_user_guide_2.html" id="concept_h4d_fwt_tzb-d5856e3955-link">DVP 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="ge-d5856e4075" class="topicref" data-id="ge" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action ge-d5856e4075-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/ge/ge_user_guide_2.html" id="ge-d5856e4075-link">GE 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="i2s-d5856e4195" class="topicref" data-id="i2s" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action i2s-d5856e4195-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/i2s/i2s_user_guide_2.html" id="i2s-d5856e4195-link">I2S 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="ve-d5856e4303" class="topicref" data-id="ve" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action ve-d5856e4303-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/ve/ve-user-guide_2.html" id="ve-d5856e4303-link">VE 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="mpp-d5856e4363" class="topicref" data-id="mpp" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action mpp-d5856e4363-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/mpp/mpp_user_guide_2.html" id="mpp-d5856e4363-link">MPP 使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="mpp_0-d5856e4495" class="topicref" data-id="mpp_0" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action mpp_0-d5856e4495-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/mpp/mpp_player_user_guide_2.html" id="mpp_0-d5856e4495-link">MPP 播放器使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e4579" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e4579-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/mpp/mpp_recorder_user_guide.html" id="id-d5856e4579-link">MPP 录像使用指南</a></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="id-d5856e4651" class="topicref" data-id="id" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action id-d5856e4651-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/mpp/mini_audio_player_user_guide.html" id="id-d5856e4651-link">MPP 音频播放器使用指南</a></div></div></li><li role="treeitem" aria-expanded="true"><div data-tocid="id-d5856e4724" class="topicref" data-id="id" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action id-d5856e4724-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_introduction.html" id="id-d5856e4724-link">LVGL 使用指南</a></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem"><div data-tocid="id-d5856e4736" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_configure.html" id="id-d5856e4736-link">参数配置</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e4748" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_debug_guide.html" id="id-d5856e4748-link">调试指南</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e4760" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_test_guide.html" id="id-d5856e4760-link">测试指南</a></div></div></li><li role="treeitem" aria-expanded="true" class="active"><div data-tocid="id-d5856e4772" class="topicref" data-id="id" data-state="expanded"><span role="button" tabindex="0" aria-labelledby="button-collapse-action id-d5856e4772-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_design_guide.html" id="id-d5856e4772-link">设计说明</a></div></div><ul role="group" class="navbar-nav nav-list"><li role="treeitem"><div data-tocid="lvgl-connecting-display-d5856e4784" class="topicref" data-id="lvgl-connecting-display" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl-connecting-display.html" id="lvgl-connecting-display-d5856e4784-link">显示对接</a></div></div></li><li role="treeitem"><div data-tocid="lvgl-hw-decoder-d5856e4796" class="topicref" data-id="lvgl-hw-decoder" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl-hw-decoder.html" id="lvgl-hw-decoder-d5856e4796-link">硬件解码对接</a></div></div></li><li role="treeitem"><div data-tocid="lvgl-freetype-d5856e4808" class="topicref" data-id="lvgl-freetype" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl-freetype.html" id="lvgl-freetype-d5856e4808-link">第三方 FreeType 库支持</a></div></div></li><li role="treeitem"><div data-tocid="lvgl-demo-d5856e4820" class="topicref" data-id="lvgl-demo" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl-demo.html" id="lvgl-demo-d5856e4820-link">LVGL Demo</a></div></div></li></ul></li><li role="treeitem"><div data-tocid="id-d5856e4832" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_add_app.html" id="id-d5856e4832-link">添加应用</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e4844" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_special_func.html" id="id-d5856e4844-link">屏幕旋转</a></div></div></li><li role="treeitem"><div data-tocid="id-d5856e4856" class="topicref" data-id="id" data-state="leaf"><span role="button" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/sdk/lvgl/lvgl_faq.html" id="id-d5856e4856-link">常见问题</a></div></div></li></ul></li></ul></li><li role="treeitem" aria-expanded="false"><div data-tocid="concept_nww_hzh_pzb-d5856e4868" class="topicref" data-id="concept_nww_hzh_pzb" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action concept_nww_hzh_pzb-d5856e4868-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-interface-sdk.html" id="concept_nww_hzh_pzb-d5856e4868-link">接口</a><div class="wh-tooltip"><p class="shortdesc">CAN<span class="ph">、CAP</span>、CIR、GPAI、GPIO、I2C、PSADC、PWM 等接口模块的介绍和使用说明。</p></div></div></div></li><li role="treeitem" aria-expanded="false"><div data-tocid="chapter-safety-d5856e6083" class="topicref" data-id="chapter-safety" data-state="not-ready"><span role="button" tabindex="0" aria-labelledby="button-expand-action chapter-safety-d5856e6083-link" class="wh-expand-btn"></span><div class="title"><a href="../../../topics/chapter-title/chapter-safety-sdk.html" id="chapter-safety-d5856e6083-link">安全</a><div class="wh-tooltip"><p class="shortdesc">SPI ENC、CE、eFuse 等安全模块的介绍和使用说明。</p></div></div></div></li></ul></li></ul></div>
</div>
</nav>
<div class="col-lg-7 col-md-9 col-sm-12" id="wh_topic_body">
<button id="wh_close_publication_toc_button" class="close-toc-button d-none" aria-label="Toggle publishing table of content" aria-controls="wh_publication_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<button id="wh_close_topic_toc_button" class="close-toc-button d-none" aria-label="Toggle topic table of content" aria-controls="wh_topic_toc" aria-expanded="true">
<span class="close-toc-icon-container">
<span class="close-toc-icon"></span>
</span>
</button>
<div class=" wh_topic_content body "><main role="main"><article class="- topic/topic topic" role="article" aria-labelledby="ariaid-title1"><span class="edit-link" style="font-size:12px; opacity:0.6; text-align:right; vertical-align:middle"><a target="_blank" href="http://172.16.35.88/tasks/jdssno1uvvbf2mltu9kb9v3if05d5gopuakboe8hlud18rma/edit/F:/aicdita/aicdita-cn/topics/sdk/lvgl/lvgl_design_guide.dita">Edit online</a></span><h1 class="- topic/title title topictitle1" id="ariaid-title1">设计说明</h1><div class="date inPage">15 Jan 2024</div><div style="color: gray;">
Read time: 3 minute(s)
</div><div class="- topic/body body"><div class="- topic/div div section" id="id__id2">
<strong class="+ topic/ph hi-d/b ph b">代码目录</strong>
<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="id__codeblock_szg_1zf_fdc" data-ofbid="id__codeblock_szg_1zf_fdc">luban-lite/packages/artinchip/lvgl-ui
├── aic_demo <em class="hl-comment">// aic lvgl demo</em>
├── lv_driver <em class="hl-comment">// lvgl 显示和 2D 加速对接</em>
├── lvgl <em class="hl-comment">// lvgl 库</em>
├── aic_ui.c <em class="hl-comment">// aic demo 入口</em>
├── aic_ui.h <em class="hl-comment">// aic demo 头文件</em>
├── lv_conf.h <em class="hl-comment">// lvgl 配置文件</em>
├── lv_demo.c <em class="hl-comment">// lvgl demo 入口函数</em>
└── SConscript
</pre></div><section class="- topic/section section" id="id__section_w32_hpf_fdc" data-ofbid="id__section_w32_hpf_fdc"><h2 class="- topic/title title sectiontitle">LVGL 整体流程</h2>
<div class="- topic/p p" data-ofbid="d268060e31__20250121171736">LVGL 的运行基于定时器 (Timer),系统需要给 LVGL 一个“心跳”,即定时调用 <span class="+ topic/keyword pr-d/apiname keyword apiname">lv_tick_get()</span>
函数来获取当前时间才能正常运转。LVGL 运行流程中涉及以下关键函数:<ul class="- topic/ul ul simple" id="id__ul_uzg_1zf_fdc" data-ofbid="id__ul_uzg_1zf_fdc"><li class="- topic/li li" data-ofbid="d268060e37__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e39__20250121171736"><span class="+ topic/keyword pr-d/apiname keyword apiname">lv_tick_get()</span>:获取以毫秒为单位的 tick 时间。</p>
</li><li class="- topic/li li" data-ofbid="d268060e44__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e46__20250121171736"><span class="+ topic/keyword pr-d/apiname keyword apiname">lv_timer_handler()</span>:在 while 循环中的基于定时器的任务处理</p>
<p class="- topic/p p" data-ofbid="d268060e51__20250121171736">函数 <span class="+ topic/keyword pr-d/apiname keyword apiname">lv_task_handler()</span> 会调用
<span class="+ topic/keyword pr-d/apiname keyword apiname">lv_timer_handler()</span><span class="+ topic/keyword pr-d/apiname keyword apiname">lv_tick_get()</span>
决定了 <span class="+ topic/keyword pr-d/apiname keyword apiname">lv_timer_handler()</span> 基于定时器的任务处理的时间的准确性。</p>
</li></ul></div>
<figure class="- topic/fig fig fignone" id="id__id11" data-ofbid="id__id11"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_tzg_1zf_fdc" src="../../../images/lvgl/key_process.png" alt="key_process1"/></div><br/><figcaption data-caption-side="bottom" class="- topic/title title figcapcenter"><span class="figtitleprefix fig--title-label"><span class="fig--title-label-number"> 1</span><span class="fig--title-label-punctuation">. </span></span><span class="fig--title">整体流程</span></figcaption></figure>
<div class="- topic/div div"><strong class="+ topic/ph hi-d/b ph b"><span class="+ topic/keyword pr-d/apiname keyword apiname">lv_tick_get()</span> 的实现代码</strong><div class="- topic/p p" data-ofbid="d268060e81__20250121171736">在文件
<span class="+ topic/ph sw-d/filepath ph filepath">lv_hal_tick.c</span> 中的 <span class="+ topic/keyword pr-d/apiname keyword apiname">lv_tick_get()</span>
的实现代码如下:<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="id__codeblock_j5q_czf_fdc" data-ofbid="id__codeblock_j5q_czf_fdc">uint32_t lv_tick_get(<strong class="hl-keyword">void</strong>)
{
#<strong class="hl-keyword">if</strong> LV_TICK_CUSTOM == <span class="hl-number">0</span>
<em class="hl-comment">/*If `lv_tick_inc` is called from an interrupt while `sys_time` is read
*the result might be corrupted.
*This loop detects if `lv_tick_inc` was called while reading `sys_time`.
*If `tick_irq_flag` was cleared in `lv_tick_inc` try to read again
*until `tick_irq_flag` remains `1`.*/</em>
uint32_t result;
<strong class="hl-keyword">do</strong> {
tick_irq_flag = <span class="hl-number">1</span>;
result = sys_time;
} <strong class="hl-keyword">while</strong>(!tick_irq_flag); <em class="hl-comment">/*Continue until see a non interrupted cycle*/</em>
<strong class="hl-keyword">return</strong> result;
#<strong class="hl-keyword">else</strong>
<strong class="hl-keyword">return</strong> LV_TICK_CUSTOM_SYS_TIME_EXPR;
#endif
}</pre></div><div class="- topic/p p" data-ofbid="d268060e91__20250121171736">在头文件 <span class="+ topic/ph sw-d/filepath ph filepath">lv_rt_thread_conf.h</span> 中定义了上述函数中的
LV_TICK_CUSTOM_SYS_TIME_EXPR<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="id__codeblock_y4x_czf_fdc" data-ofbid="id__codeblock_y4x_czf_fdc">#<span class="hl-directive">define</span> LV_TICK_CUSTOM <span class="hl-number">1</span>
#<span class="hl-directive">define</span> LV_TICK_CUSTOM_INCLUDE LV_RTTHREAD_INCLUDE
#<span class="hl-directive">define</span> LV_TICK_CUSTOM_SYS_TIME_EXPR (rt_tick_get_millisecond()) <em class="hl-comment">/*Expression evaluating to current system time in ms*/</em></pre></div><div class="- topic/p p" data-ofbid="d268060e98__20250121171736">创建
LVGL
线程的代码如下所示:<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="id__codeblock_yj3_dzf_fdc" data-ofbid="id__codeblock_yj3_dzf_fdc"><strong class="hl-keyword">static</strong> <strong class="hl-keyword">void</strong> lvgl_thread_entry(<strong class="hl-keyword">void</strong> *parameter)
{
#<strong class="hl-keyword">if</strong> LV_USE_LOG
lv_log_register_print_cb(lv_rt_log);
#endif <em class="hl-comment">/* LV_USE_LOG */</em>
lv_init();
lv_port_disp_init();
lv_port_indev_init();
lv_user_gui_init();
<em class="hl-comment">/* handle the tasks of LVGL */</em>
<strong class="hl-keyword">while</strong>(<span class="hl-number">1</span>)
{
lv_task_handler();
rt_thread_mdelay(SLEEP_PERIOD);
}
}
<strong class="hl-keyword">int</strong> lvgl_thread_init(<strong class="hl-keyword">void</strong>)
{
rt_err_t err;
err = rt_thread_init(&amp;lvgl_thread, <span class="hl-string">"LVGL"</span>, lvgl_thread_entry, RT_NULL,
&amp;lvgl_thread_stack[<span class="hl-number">0</span>], <strong class="hl-keyword">sizeof</strong>(lvgl_thread_stack), LPKG_LVGL_THREAD_PRIO, <span class="hl-number">0</span>);
<strong class="hl-keyword">if</strong>(err != RT_EOK)
{
LOG_E(<span class="hl-string">"Failed to create LVGL thread"</span>);
<strong class="hl-keyword">return</strong> -<span class="hl-number">1</span>;
}
rt_thread_startup(&amp;lvgl_thread);
<strong class="hl-keyword">return</strong> <span class="hl-number">0</span>;
}</pre></div><div class="- topic/p p" data-ofbid="d268060e102__20250121171736">LVGL 通过定时器机制来驱动其内部任务处理,用户只需实现下列显示、输入设备和 UI
界面相关的初始化函数,即可快速构建嵌入式系统的图形界面:<ul class="- topic/ul ul simple" id="id__ul_vzg_1zf_fdc" data-ofbid="id__ul_vzg_1zf_fdc"><li class="- topic/li li" data-ofbid="d268060e105__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e107__20250121171736"><span class="+ topic/keyword pr-d/apiname keyword apiname">lv_port_disp_init()</span>:实现显示接口的对接以及硬件 2D 加速的对接</p>
</li><li class="- topic/li li" data-ofbid="d268060e112__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e114__20250121171736"><span class="+ topic/keyword pr-d/apiname keyword apiname">lv_port_indev_init()</span>:实现触摸屏的对接</p>
</li><li class="- topic/li li" data-ofbid="d268060e119__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e121__20250121171736"><span class="+ topic/keyword pr-d/apiname keyword apiname"> lv_user_gui_init()</span>:适配不同 UI 界面的初始化</p>
</li></ul></div></div>
</section><section class="- topic/section section" id="id__section_xbw_fzf_fdc" data-ofbid="id__section_xbw_fzf_fdc"><h2 class="- topic/title title sectiontitle">LVGL 层次结构</h2>
<div class="- topic/p p" data-ofbid="d268060e133__20250121171736">
<figure class="- topic/fig fig fignone" id="id__id12" data-ofbid="id__id12"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_wzg_1zf_fdc" src="../../../images/lvgl/struct.png" alt="struct1.png"/></div><br/><figcaption data-caption-side="bottom" class="- topic/title title figcapcenter"><span class="figtitleprefix fig--title-label"><span class="fig--title-label-number"> 2</span><span class="fig--title-label-punctuation">. </span></span><span class="fig--title">LVGL 层次结构</span></figcaption></figure>
</div>
<div class="- topic/p p" data-ofbid="d268060e143__20250121171736">LVGL 层次结构主要包括以下几个部分:<ul class="- topic/ul ul simple" id="id__ul_xzg_1zf_fdc" data-ofbid="id__ul_xzg_1zf_fdc"><li class="- topic/li li" data-ofbid="d268060e146__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e148__20250121171736">Display显示设备是对显示驱动的封装和抽象。</p>
</li><li class="- topic/li li" data-ofbid="d268060e151__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e153__20250121171736">Screen屏幕对象表示不同的界面。</p>
</li><li class="- topic/li li" data-ofbid="d268060e156__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e158__20250121171736">Layer图层表示屏幕上的不同绘制区域。</p>
</li><li class="- topic/li li" data-ofbid="d268060e161__20250121171736">
<div class="- topic/p p" data-ofbid="d268060e163__20250121171736">一个 display 包含多个 screen每个 screen 又包含多个 layer。layer
按照层级关系叠加在一起,形成最终的显示效果。具体来说:<ul class="- topic/ul ul" id="id__ul_kjv_vqg_fdc" data-ofbid="id__ul_kjv_vqg_fdc"><li class="- topic/li li" data-ofbid="d268060e166__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e168__20250121171736">Active Screen当前活动的屏幕承载主要的应用程序界面是所有操作的主要界面处于最底层。</p>
<p class="- topic/p p" data-ofbid="d268060e171__20250121171736">一般在 Active Screen 实现不同的 app 界面,用户可以创建多个 screen但只能有一个 screen
设置为 Active Screen</p>
</li><li class="- topic/li li" data-ofbid="d268060e174__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e176__20250121171736">Top layer位于 Active Screen 之上的图层,通常用来创建弹出窗口。</p>
<p class="- topic/p p" data-ofbid="d268060e179__20250121171736">Top layer 永远在 Active Screen 之上。</p>
</li><li class="- topic/li li" data-ofbid="d268060e182__20250121171736">
<p class="- topic/p p" data-ofbid="d268060e184__20250121171736">System layer位于最顶层通常用于显示系统级别的信息比如鼠标可以在 System
layer永远不会被遮挡</p>
</li></ul></div>
</li></ul></div>
<div class="- topic/p p" data-ofbid="d268060e189__20250121171736">为了更好地理解 LVGL 的层次结构,可以参考以下图层叠加的示意图:<figure class="- topic/fig fig fignone" id="id__id13" data-ofbid="id__id13"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_yzg_1zf_fdc" src="../../../images/lvgl/layer.png" alt="layer1"/></div><br/><figcaption data-caption-side="bottom" class="- topic/title title figcapcenter"><span class="figtitleprefix fig--title-label"><span class="fig--title-label-number"> 3</span><span class="fig--title-label-punctuation">. </span></span><span class="fig--title">图层叠加</span></figcaption></figure></div>
</section><section class="- topic/section section" id="id__section_hmp_fzf_fdc" data-ofbid="id__section_hmp_fzf_fdc"><h2 class="- topic/title title sectiontitle">父子结构</h2>
<div class="- topic/p p" data-ofbid="d268060e203__20250121171736">父子结构的设计是 LVGL 面向对象的核心设计之一,使得图形界面的层次关系和布局管理变得非常直观和灵活。父子结构的特点如下所示:<ul class="- topic/ul ul" id="id__ul_stx_nrg_fdc" data-ofbid="id__ul_stx_nrg_fdc"><li class="- topic/li li" data-ofbid="d268060e206__20250121171736">每一个对象都包含一个父对象screen 对象除外。</li><li class="- topic/li li" data-ofbid="d268060e208__20250121171736">一个父对象可以包含任意数量的子对象。</li><li class="- topic/li li" data-ofbid="d268060e210__20250121171736">创建对象时需要传入父对象的指针,如果父对象为 NULL则表示创建的是 screen
对象。<pre class="+ topic/pre pr-d/codeblock pre codeblock language-c" id="id__codeblock_wvl_f1g_fdc" data-ofbid="id__codeblock_wvl_f1g_fdc">lv_obj_create(NULL);</pre></li><li class="- topic/li li" data-ofbid="d268060e214__20250121171736">父对象和子对象一起移动。<div class="- topic/div div section" id="id__id5">
<strong class="+ topic/ph hi-d/b ph b"> 父子对象一起移动</strong>
<figure class="- topic/fig fig fignone" id="id__id14" data-ofbid="id__id14"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_zzg_1zf_fdc" src="../../../images/lvgl/move.png" alt="move1"/></div><br/><figcaption data-caption-side="bottom" class="- topic/title title figcapcenter"><span class="figtitleprefix fig--title-label"><span class="fig--title-label-number"> 4</span><span class="fig--title-label-punctuation">. </span></span><span class="fig--title">父子对象移动</span></figcaption></figure>
</div></li><li class="- topic/li li" data-ofbid="d268060e228__20250121171736">子对象超出父对象部分不可见。<figure class="- topic/fig fig fignone" id="id__id15" data-ofbid="id__id15"><br/><div class="imagecenter"><img class="- topic/image image imagecenter" id="id__image_a1h_1zf_fdc" src="../../../images/lvgl/outside1.png" alt="outside1"/></div><br/><figcaption data-caption-side="bottom" class="- topic/title title figcapcenter"><span class="figtitleprefix fig--title-label"><span class="fig--title-label-number"> 5</span><span class="fig--title-label-punctuation">. </span></span><span class="fig--title">子对象可见区域</span></figcaption></figure></li></ul></div>
</section></div></article></main></div>
<div class=" wh_child_links d-print-none "><nav aria-label="Child Links" role="navigation" class="- topic/related-links related-links"><ul class="ullinks"><li class="- topic/link link ulchildlink"><strong><a href="../../../topics/sdk/lvgl/lvgl-connecting-display.html">显示对接</a></strong></li><li class="- topic/link link ulchildlink"><strong><a href="../../../topics/sdk/lvgl/lvgl-hw-decoder.html">硬件解码对接</a></strong></li><li class="- topic/link link ulchildlink"><strong><a href="../../../topics/sdk/lvgl/lvgl-freetype.html">第三方 FreeType 库支持</a></strong></li><li class="- topic/link link ulchildlink"><strong><a href="../../../topics/sdk/lvgl/lvgl-demo.html">LVGL Demo</a></strong></li></ul></nav></div>
</div>
<nav role="navigation" id="wh_topic_toc" aria-label="On this page" class="col-lg-2 d-none d-lg-block navbar d-print-none">
<div id="wh_topic_toc_content">
<div class=" wh_topic_toc "><div class="wh_topic_label">在本页上</div><ul><li class="section-item"><div class="section-title"><a href="#id__section_w32_hpf_fdc" data-tocid="id__section_w32_hpf_fdc">LVGL 整体流程</a></div></li><li class="section-item"><div class="section-title"><a href="#id__section_xbw_fzf_fdc" data-tocid="id__section_xbw_fzf_fdc">LVGL 层次结构</a></div></li><li class="section-item"><div class="section-title"><a href="#id__section_hmp_fzf_fdc" data-tocid="id__section_hmp_fzf_fdc">父子结构</a></div></li></ul></div>
</div>
</nav>
</div>
</div>
</div>
<footer class="navbar navbar-default wh_footer">
<div class=" footer-container mx-auto ">
<title>footer def</title>
<style><!--
.p1 {
font-family: FangZhengShuSong, Times, serif;
}
.p2 {
font-family: Arial, Helvetica, sans-serif;
}
.p3 {
font-family: "Lucida Console", "Courier New", monospace;
}
--></style>
<div class="webhelp.fragment.footer">
<p class="p1">Copyright © 2019-2024 广东匠芯创科技有限公司. All rights reserved.</p>
</div><div>
<div class="generation_time">
Update Time: 2025-01-21
</div>
</div>
</div>
</footer>
<div id="go2top" class="d-print-none">
<span class="oxy-icon oxy-icon-up"></span>
</div>
<div id="modal_img_large" class="modal">
<span class="close oxy-icon oxy-icon-remove"></span>
<div id="modal_img_container"></div>
<div id="caption"></div>
</div>
<script src="${pd}/publishing/publishing-styles-AIC-template/js/custom.js" defer="defer"></script>
</body>
</html>