Edit online

添加应用

4 Dec 2024
Read time: 3 minute(s)

GT911 电容屏测试程序是一个硬件与软件结合的复杂项目,主要用于测试和验证电容触摸屏的性能和功能。

本节以 GT911 电容屏测试程序为例,演示添加应用的步骤和编译流程。

添加源码

GT911 电容屏测试程序相关的源文件及结构如下:
bsp$ tree
.

├── Kconfig                     # 编译配置文件
...
├── SConscript                  # 固定模板
└── examples
    ├── SConscript              # 固定模板
    ...
    ├── test-ctp
    │   ├── test_gt911.c        # 源代码
    │   └── SConscript          # 源码结构文件
    ...
  • Kconfig 文件:负责编译配置,定义了需要被编译进最终操作系统镜像中的文件,允许根据需求开启或关闭特定功能,从而提供灵活性并减少不必要的资源占用。
  • SConscript 文件:负责指导编译系统编译源码的脚本文件,定义了构建过程的规则,例如依赖关系、编译顺序等。
  • examples 文件:包含实际测试程序源码和主要功能实现代码的示例文件。
详细配置流程如下所示:
  1. Kconfig 配置文件中,添加一个新的配置项。例如,添加AIC_TP_DRV_TEST,用于启用或禁用触摸面板驱动程序测试功能:
    ...
    config AIC_TP_DRV_TEST
        bool "Enable touch panel driver test command"
        default n
        depends on AIC_TOUCH_PANEL_GT911
    ...
    • AIC_TP_DRV_TEST:新的配置项名称
    • bool "Enable touch panel driver test command":用于启用或禁用触摸面板驱动程序测试功能。
    • default nAIC_TP_DRV_TEST 设为默认关闭。
    • depends on AIC_TOUCH_PANEL_GT911:配置项依赖于AIC_TOUCH_PANEL_GT911
  2. SConscript 文件中导入必要的模块。

    SConscript 文件决定参与编译的文件、目录等相关信息,具体语法请参考 SConstruct

    本例程 SConscript 源码如下:
    Import('AIC_ROOT')
    Import('PRJ_KERNEL')
    from building import *
    
    cwd = GetCurrentDir()
    CPPPATH = []
    src = []
    if GetDepend('AIC_TP_DRV_TEST'):
        src = Glob('*.c')
    
    group = DefineGroup('test-touch', src, depend = [''], CPPPATH = CPPPATH)
    
    Return('group')
    • Import('AIC_ROOT')Import('PRJ_KERNEL')为导入的必要模块。
    • 根据需要设置编译选项,例如 CPPPATH 等。
    • 使用 Glob('*.c') 获取所有源代码文件,并将其添加到一个名为 test-touch的组中。

    • 返回 test-touch 组,以便将其加入到构建过程中。
  3. 初始化应用,在 $(SDK)/bsp/test/test-touch/gt911_sample.c 中添加宏定义。
    ...
    static void gt911_sample(void *parameter)
    {
    ...
    }
    
    MSH_CMD_EXPORT(gt911_sample, gt911 sample);

    在初始化应用之前,需要使用宏定义将应用程序添加到初始化函数列表中,确保系统启动时能被调用。使用 Baremetal SDK 添加应用时,推荐使用 RT-Thread 宏定义导入应用程序。

    应用程序通常选择使用 INIT_APP_EXPORT(fn)MSH_CMD_EXPORT(fn) 宏定义。关于宏定义的详细说明,可查看宏接口和描述

    值得关注的是文件最后的导出命令 MSH_CMD_EXPORT,在系统启动之后,通过命令 gt911_sample 运行。

    RT-Thread 有一套启动优先级设置的宏,可根据不同的软件模块分类设置。具体接口及描述如下:
    1. 宏接口和描述
    宏接口 描述
    INIT_BOARD_EXPORT(fn) 非常早期的初始化,此时调度器还未启动; 使用该宏后,fn 将属于 “board init functions”
    INIT_PREV_EXPORT(fn) 主要是用于纯软件的初始化、没有太多依赖的函数;使用该宏后,fn 将属于 “pre-initialization functions”
    INIT_DEVICE_EXPORT(fn) 外设驱动初始化相关,比如网卡设备;使用该宏后,fn 将属于 “device init functions”
    INIT_COMPONENT_EXPORT(fn) 组件初始化,比如文件系统或者 LWIP;使用该宏后,fn 将属于 “components init functions”
    INIT_ENV_EXPORT(fn) 系统环境初始化,比如挂载文件系统;使用该宏后,fn 将属于 “enviroment init functions”
    INIT_APP_EXPORT(fn) 应用初始化,比如 GUI 应用使用该宏后,fn 将属于 “application init functions”
    MSH_CMD_EXPORT(fn) 将应用程序导出为 Msh 命令;通过手动方式运行;

编译

  1. 执行 scons --menuconfigme(OneStep 命令),进入配置界面,按照以下步骤操作:
    Drivers options  --->
        Drivers examples  --->
            [*] Enable touch panel driver test command
  2. 保存配置并退出。

  3. 运行 scons 命令或 m(OneStep 命令)开始编译。

    编译结束后会生成镜像文件。将生成的镜像文件烧录到目标设备上。

验证

烧录镜像并运行系统后,使用 Tab 键查看应用命令是否添加成功。如果命令列表中出现 test_gt911,说明添加成功。

Startup reason: Power-On-Reset
Startup time: 0.601 sec (from Power-On-Reset)
os  : system memory alloc 320 bytes
flsh: UFFS consume spare data size 36
os  : system memory alloc 84480 bytes
os  : system memory alloc 53200 bytes
os  : system memory alloc 7168 bytes
tree: DIR 1, FILE 1, DATA 22
info.bits_per_pixel: 32
info.width: 1024, info.height: 600
lv_draw_aic_ctx_init:1024, 600
id = GT911
range_x = 1024
range_y = 600
point_num = 1
aic />
aic /> <tab>                    # 单击 Tab 键,系统罗列出可用命令列表,
RT-Thread shell commands:
...
test_gt911     - test gt911 sample      # 添加的 test_gt911 命令已在列表中
...