Files
luban-lite-t3e-pro/packages/third-party/awtk-ui
2025-09-30 11:56:06 +08:00
..
2025-09-30 11:56:06 +08:00
2025-09-30 11:56:06 +08:00
2025-09-30 11:56:06 +08:00
2025-09-30 11:56:06 +08:00
2025-09-30 11:56:06 +08:00
2025-09-30 11:56:06 +08:00

AWTK 简要说明

本项目的编译工具是scons依托AIC SDK进行编译。配置AWTK 参数需要在AIC SDK 根目录使用命令。需要额外注意的是luban-lite SDK目前仅支持RTOS平台。

scons--menuconfig 进入可视化界面进行配置。

1 配置说明

配置所在路径在AIC SDK 根目录使用命令scons--menuconfig 进入可视化界面选择AWTK GUI

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            AWTK common function config -->
            AWTK cropping config -->
            AWTK Select a demo -->
            AWTK thread config -->
            AWTK input device config -->

配置可以分为五块:

  • AWTK common function config配置AWTK 关键功能包括G2D、图片解码、APP_RES配置、AWTK 开机自启动、LCD 刷新模式选择
  • AWTK cropping config裁剪AWTK 配置,以便裁剪掉不需要的功能
  • AWTK Select a demo选择运行AWTK示例目前提供两个官方的示例
  • AWTK thread config配置AWTK 相关线程,可根据自己的应用调整线程栈大小避免溢出
  • AWTK input device config配置触摸设备目前仅支持GT911 设备输入

除了配置1.2资源配置中资源配置路径需要改。一般而言,使用默认配置即可不需要修改里面的配置。如果需要修改相关配置说明可以参考awtk/docs/porting_common.md 和AWTK 官方文档

1.2 资源配置

注意:在配置使用了文件系统,需要配置读取资源路径,这样应用才能正常启动在默认配置中文件系统选项默认开启。建议使用将资源文件下载到板子的方式目前从外部SD卡读取文件速度较慢。

安装资源文件到板子配置:资源文件默认安装到板子/rodata 目录。

Application options -->
    [*] Using File System Image 0 -->
        (packages/third-party/awtk-ui/user_apps/awtk-demo-chart/rtos_res/)

如果是从SD 卡读取资源文件,就不需要将资源文件安装到板子:

Application options -->
    [] Using File System Image 0 -->

AWTK 资源读取路径配置:

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            AWTK common function config -->
                (/rodata/res) Set app resource root

AWTK 资源读取路径配置:从 SD卡读取资源文件配置SD卡默认挂载到 /sdcard 目录下

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            AWTK common function config -->
                (/sdcard/offical-demo/res) Set app resource root

D13x 在默认配置下/rodata 区域最大空间是6M,因此可以适当将资源文件进行裁剪。例如提供的 chart demortos_res 安装的资源仅仅留下默认主题文件default\rawimage文件夹也仅仅留下xx分辨率的图片image/xx然后将其全部打包进板子中。

1.3 内存配置

在D13x 平台上共有6M 内存可供用户使用。如果实在分配不出更多的内存,可以参考 "./user_apps/awtk-demo-chart/src/application.c" 中设置图片缓冲大小函数 image_manager_set_max_mem_size_of_cached_images(image_manager(), 1366430)。图片缓冲区大小对速度的影响很大,需要根据需要评估需要设置多大的缓冲区。如果缓冲区设置过小,便会频繁的读取,释放资源,速度将受到极大的影响。

在D21x 平台上面可以去配置使用的更大的CMA内存以供分配更多内存给到AWTK 图片缓冲区:

配置CMA 内存

Board options -->
    Mem Options  --->
    (0x2000000) CMA mem size

特别需要注意的是在AIC D13x 平台上内存资源受限比较紧张默认不适用窗口动画缓存。如果是D21 x平台内存充足可以选择打开。

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            AWTK cropping config -->
                 Don't use window animation cache and default open don't use dialog hightlighter

1.4 额外配置说明

1.4.1 LCD 刷新模式选择

目前支持三种刷新模式默认使用swap ex模式也推荐使用这个模式。它们的区别如下

LCD 模式 LCD 旋转功能 脏机制 高效旋转
flush 支持 支持 不支持
swap 支持 不支持 不支持
swap ex 支持 支持 不支持

高效旋转目前不支持主要原因是g2d_rotate_image_ex() 和 g2d_blend_image_rotate() 接口还没进行对接。启用文件系统情况下,不要定义宏 WITH_FAST_LCD_PORTRAIT 即可。关于高效旋转更多请看文档:./awtk/docs/how_to_use_fast_lcd_portrait.md。

选择LCD 刷新模式:

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            AWTK common function config -->
                Select lcd refresh mode (swap_ex mode)  --->

1.4.2 开机自启动

如果需要开机自启动,需要选择 “Self start funcion upon startup”。如果不需要开机自启动那需要在命令行输入命令 test_awtk手动执行应用。

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            AWTK common function config -->
                [*] Self start funcion upon startup

如果需要修改执行命令,参考 "awtk-rtos/awtk-port/rk_run.c" 文件。

#ifdef AWTK_START_UP
INIT_APP_EXPORT(awtk_init); /* 开机启动后执行 awtk_init函数 */
#else
MSH_CMD_EXPORT_ALIAS(awtk_init, test_awtk, awtk chart demo); /* test_awtk 是命令, 后面是说明  */
#endif

1.4.3 硬件图片解码格式支持

关于格式描述方式AWTK和AIC的格式的字节序都是小端但是格式名称描述不一样比如AIC 格式描述为ABGR_8888 对应 AWTK 格式描述为RGBA8888。本文档和配置文件均按照AIC 的格式描述进行描述。

在D21x 平台上PNG格式不支持硬件解码为RGB565格式JPEG格式仅支持硬件解码为YUV格式。在D13x 平台上PNG格式不支持硬件解码为RGB565格式。

D21x 平台:

图片格式 RGB565 RGB888/ARGB8888
PNG 不支持 支持
JEPG/JPG 不支持 不支持

D13x 平台:

图片格式 RGB565 RGB888/ARGB8888
PNG 不支持 支持
JEPG/JPG 支持 支持

使用图片注意点: PNG 格式:

  • 原图是什么格式将解码成什么格式。如果想要减少内存的使用可以将使用原来PNG 24位的图片转换为16位图片
  • PNG 图片使用图片格式为16位图片将默认解码为RGB888。开启动画则会将RGB888转换为RGB565。硬件不支持解码为RGB565必须进行转化为RGB565 AWTK才支持动画。

JGP/JGEG 格式:

  • D13x 平台默认默认解码成RGB565 格式。关闭动画则解码为RGB888 格式。D21x 解码为YUV 格式然后将YUV 格式转换为RGB 格式以供AWTK 使用。
  • D13x 平台如果没有关闭动画功能由于动画功能格式不支持RGB888将会对原图格式为RGB888 的图片进行一次转换转换为RGB565格式。D13x 平台如果没有图片透明度推荐使用JPEG格式。

推荐图片使用:在默认配置,动画功能打开的情况下。如果关闭了动画功能或者内存比较紧张的情况下,请参考上面解码支持和图片使用注意点自行选择。

D21x平台 推荐使用32位 PNG图片这样解码效率最高

D13x平台 JPEG/JPG格式或者32位 PNG图片这样解码效率最高

1.4.4 demo 选择

目前支持的两个demo一个是 chart demo 一个是official demo

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            Select a demo (Use the official demo)  --->
                (X) Use the chart demo
                ( ) Use the official demo

chart demo : 资源文件比较小,可以放在板子中。资源在:./awtk/user_apps/awtk-demo-chart/rtos_res/ official demo: 资源文件比较大不建议在D13x 运行此Demo。资源在./awtk/user_apps/offical-demo/res/建议将资源文件放到SD卡进行运行。 D13x 运行official demo 效果非常差,主要是因为内存不够。

1.4.5 日志等级选择

可以选择不同的日志等级以方便调试。目前支持info 等级和debug 等级默认为info等级。

Local packages options -->
    Third-party packages options-->
    [*] AWTK GUI -->
            AWTK cropping config  --->
                Choice log level (log level debug)  --->
                    ( ) log level debug
                    (X) log level info

2 编译说明

编译用到的宏定义一部分定义在 ./SConscript中一部分在Kconfig 在可视化界面中进行配置。配置由相关脚本进行解析,得到全局的编译的宏。

相关宏的说明可以参考awtk/docs/porting_common.md 参与编译的文件可以参考awtk/docs/porting_common.md 和 ./SConscript

如果需要编译自己的 app需要修改SConsript。AWTK Designed 生成的资源文件也需要做出一些调整,将不需要的文件可以删掉,只留下需要的,参考 rtos/res路径下的资源文件。参考代码

# GetDepend 是从Kconfig获取相关宏
if GetDepend('LPKG_AWTK_USING_DEMOS_CHART'):
    awtk_demo_cwd = cwd + '/user_apps/'
    # add user 3rd
    src += find_sources(awtk_demo_cwd + 'awtk-demo-chart/3rd/awtk-widget-chart-view/src/')
    src += find_sources(awtk_demo_cwd + 'awtk-demo-chart/3rd/awtk-widget-chart-view/src/base/')
    src += find_sources(awtk_demo_cwd + 'awtk-demo-chart/3rd/awtk-widget-chart-view/src/chart_view/')
    src += find_sources(awtk_demo_cwd + 'awtk-demo-chart/3rd/awtk-widget-chart-view/src/pie_slice/')

    # add user src
    src += find_sources(awtk_demo_cwd + 'awtk-demo-chart/src/')
    src += find_sources(awtk_demo_cwd + 'awtk-demo-chart/src/pages/')
    src += find_sources(awtk_demo_cwd + 'awtk-demo-chart/src/common/')

    # install needed res
    if GetDepend('WITH_FS_RES'):
        Mkdir(awtk_demo_cwd + 'awtk-demo-chart/rtos_res/res/assets/default/')
        Install(awtk_demo_cwd + 'awtk-demo-chart/rtos_res/res/assets/default/', awtk_demo_cwd + 'awtk-demo-chart/res/assets/default/raw')

3 优化建议

3.1 运行速度优化建议

  • 提前加载图片资源到内存中assets_manager_preload目前从文件系统读取数据较慢。
  • 将图片数据存放到 /rodata区从SD 卡读取数据较慢
  • 增大图片缓冲区。使用函数image_manager_set_max_mem_size_of_cached_images(image_manager(), 1366430),以增大缓冲区。

3.2 优化内存使用

  • 将frame buffer格式由RGB888/ARGB8888 改变为RGB565。如果需要开启动画AWTK 不支持RGB888 格式需要设置frame buffer 格式为ARGB8888 或者RGB565。
  • 使用image_manager_set_max_mem_size_of_cached_images(image_manager(), 1366430) 设置合理的缓冲区大小。
  • image_manager_unload_unused(image_manager(), 1); 配置从图片管理器中卸载指定时间内没有使用的图片。
  • 关闭窗口动画缓存,默认关闭。

关于图片资源内存的优化建议

  • 使用更低分辨率的图片
  • 如果不需要使用到透明度可以将32位图转换为24/16位图建议转换为16位图。
  • JPEG 格式相比PNG格式更省内存但没有透明度。
  • JPEG和PNG 格式选择,可以根据1.4.3 硬件图片解码格式进行选择

4 对接流程

除了图片解码的流程和AWTK 标准流程不一样其他流程都是按照AWTK 的软件流程进行对接的。可以参考AWTK 官方的移植文档和这里的对接源码。

对接源码结构:

    -> aic_g2d   # 加速和解码部分对接代码
        -> aic_dec_asset_frame.c # AIC 图片解码帧内存申请和图片头信息解析
        -> aic_dec_asset.c # AIC 硬件图片解码实现
        -> aic_g2d.c # AIC G2D和图片格式转换实现G2D 使用GE实现图片解码使用VE实现。
        -> aic_graphic_buffer.c # AIC graphic buffer实现AWTK 基于此结构体进行具体图片信息管理
        -> aic_rtos_mem.c # AIC G2D和解码需要用到的CMA 内存管理

    -> input_thread # 触摸对接代码
        -> touch_thread.c # 触摸模块代码,目前仅用到这个
        -> input_dispatcher.c # 触摸调试代码
        -> tslib_thread.c # 目前不支持tslib未实现

    -> lcd_rtos # lcd 对接代码
        -> fb_disp_info.h # 获取fb 信息实现
        -> lcd_disp.c # lcd 移植具体实现

    -> platform # 平台相关对接代码
        -> date_time.c # 获取时间代码,非必须
        -> fs_os.c # 文件系统接口实现
        -> platform.c # 内存,时钟实现

    -> run.c # AWTK 运行线程实现

图片解码流程做了一些调整因为硬件解码需要CMA 内存如果CMA 内存不够软件解码。关于CMA 内存也可以理解为资源的一部分,资源分配失败就返回。

AIC 图片硬件解码流程

获取资源 + 硬件解码 -> 图片格式转化 -> 加入管理器进行管理

AWTK 图片软件解码流程

获取资源 -> STB 软件解码 + 图片格式转化 -> 加入管理器进行管理

AIC 硬件解码和AWTK 软件解码的区别就是在获取资源函数的时候就进行硬件解码。如果解码失败则交由软件再次进行资源获取和进行下一步的调用STB库进行解码。