C代码脚本¶
1. 环境配置¶
1.1 动态表盘工程¶
1.1.1 概述¶
工具中的 C 代码编译依赖于 solution 生成的动态表盘工程。工具随 solution 发布时会携带一个动态表盘工程用于编译;但如果用户想要在工具中调用新的 solution 函数接口,就需要更新动态表盘工程。
1.1.2 生成动态表盘工程¶
首先打开 SIFLI Butterfli,选择要使用的代码工程,并对工程进行完整编译。

等工程完整编译完成后,右键动态表盘工程,点击“备份编译环境”,用于生成最小工程。

生成完成后,可在 solution 根目录中看到与代码工程名相对应的动态表盘工程。

1.1.3 注意事项¶
确保在完整编译工程时勾选了 C 应用,并且预置了 C 表盘。否则生成的动态表盘工程中不会包含
module_name.h。报错信息如下图所示:

1.2 路径配置¶
在使用工具编译 C 代码时,需要配置两个路径:一个是动态表盘工程路径,另一个是编译工具路径。

2. 代码编写¶
2.1 文件创建¶
点击“脚本” > “CMiniApp”,在工程中创建一个 C 代码文件。目前每个工程只会创建一个文件,代码格式固定。此处以 app_test.c 为例。

2.2 添加事件代码¶
首先在控件
button_18的事件行为中添加一个执行 C 代码的事件。添加事件后,可以看到控件后方出现一个黄色的特殊标记,该标记是调用 C 代码控件的专有标识;


然后点击 “Add Code”,此时会在
app_test.c中自动添加对应代码块;点击 “Add All” 则会为当前工程中所有配置了调用 C 代码的控件生成对应代码块;


同时,在框架函数
void {APP_ID}_init(void)与void {APP_ID}_deinit(void)中,还会添加对应的注册与注销代码。这部分代码请勿修改。

用户可按需在对应函数中添加逻辑代码;如有需要,也可像编写普通 C 代码一样添加全局变量和函数调用。
当删除控件时,工具会同步删除对应的注册和注销代码。
2.3 编译运行¶
连接固件后点击串口烧录,此时会连带 C 代码一起进行编译。如果编译报错,会弹出 log 文件显示错误信息。
3. 死机问题整理¶
3.1 not find obj¶

通过函数 lv_obj_t *sfat_get_obj_by_uid(sfat_theme_t *theme, uint32_t uid) 查找控件时,如果填写的 UID 在工程中不存在,或者该 UID 对应的控件尚未创建,就会导致死机。
当出现此类死机时,首先确认代码调用的 UID 是否在工程中存在;然后确认设置的 UID 是否属于当前页面,因为非当前显示页面的控件不会被创建。