添加应用
GT911 电容屏测试程序是一个硬件与软件结合的复杂项目,主要用于测试和验证电容触摸屏的性能和功能。
本节以 GT911 电容屏测试程序为例,演示添加应用的步骤和编译流程。
添加源码
bsp$ 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
文件中导入必要的模块。
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);
在初始化应用之前,需要使用宏定义将应用程序添加到初始化函数列表中,确保系统启动时能被调用。使用 Luban-Lite 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 命令;通过手动方式运行;
编译
-
执行 scons --menuconfig 或 me(OneStep 命令),进入配置界面,按照以下步骤操作:
Drivers options ---> Drivers examples ---> [*] Enable touch panel driver test command
-
保存配置并退出。
-
运行 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 命令已在列表中
...