添加应用
20 Dec 2024
Read time: 3 minute(s)
GT911 电容屏测试程序是一个硬件与软件结合的复杂项目,主要用于测试和验证电容触摸屏的性能和功能。
本节以 GT911 电容屏测试程序为例,演示添加应用的步骤和编译流程。
添加源码
在 bsp 目录下执行下列命令,可查看 GT911
电容屏测试程序的目录结构:
tree
输出示例如下:
.
├── Kconfig # 编译配置文件
...
├── SConscript # 固定模板
└── examples
├── SConscript # 固定模板
...
├── test-ctp
│ ├── test_gt911.c # 源代码
│ └── SConscript # 源码结构文件
...
- Kconfig 文件:负责编译配置,定义了需要被编译进最终操作系统镜像中的文件,允许根据需求开启或关闭特定功能,从而提供灵活性并减少不必要的资源占用。
- SConscript 文件:负责指导编译系统编译源码的脚本文件,定义了构建过程的规则,例如依赖关系、编译顺序等。
- examples 文件:包含实际测试程序源码和主要功能实现代码的示例文件。
详细配置流程如下所示:
-
在 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 n:AIC_TP_DRV_TEST 设为默认关闭。
- depends on
AIC_TOUCH_PANEL_GT911:配置项依赖于
AIC_TOUCH_PANEL_GT911
。
- 在 SConscript 文件中导入必要的模块 AIC_ROOT 和
PRJ_KERNEL。
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
组,以便将其加入到构建过程中。
- 使用宏定义将应用程序添加到 $(SDK)/bsp/test/test-touch/gt911_sample.c
的初始化函数列表中,确保系统启动时能被调用:
... static void gt911_sample(void *parameter) { ... } MSH_CMD_EXPORT(gt911_sample, gt911 sample);
使用 RT-Thread 宏定义导入应用程序时,推荐使用
INIT_APP_EXPORT(fn)
和MSH_CMD_EXPORT(fn)
宏定义。关于宏定义的详细说明,可查看宏接口优先级及描述。值得关注的是文件最后的导出命令 MSH_CMD_EXPORT,在系统启动之后,通过命令 gt911_sample 运行。
编译
-
执行 scons --menuconfig 或 me(OneStep 命令),进入配置界面,按照以下步骤操作:
Drivers options ---> Drivers examples ---> [*] Enable touch panel driver test command
-
保存配置并退出。
-
运行 scons 命令或 m(OneStep 命令)开始编译。
编译结束后会生成镜像文件。将生成的镜像文件烧录到目标设备上。
验证
烧录镜像并运行系统后,使用 Tab 键查看应用命令是否添加成功。
-
烧录镜像并运行系统,系统输出示例如下:
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
-
使用 Tab 键查看应用命令是否添加成功:
<tab> # 单击 Tab 键
-
系统罗列出可用命令列表。
如果命令列表中出现test_gt911
,说明添加成功,输出示例如下RT-Thread shell commands: ... test_gt911 - test gt911 sample ...
宏接口优先级及描述
RT-Thread 有一套启动优先级设置的宏,可根据不同的软件模块分类设置。具体接口及描述如下:
宏接口 | 描述 |
---|---|
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 命令;通过手动方式运行; |