🔧 自定义代码¶
除了拖拽设计界面,您有时还需要补充自己的 C / MicroPython 逻辑。工具提供两种方式,请根据习惯选择,不要在同一处重复写相同代码。
⚖️ 一、两种方式有什么区别?¶
| 对比项 | 设计器内自定义代码 | 外部 IDE 修改生成文件 |
|---|---|---|
| 在哪里写 | 设计器属性面板、事件编辑器 | Keil、VS Code 等,打开 beken_generated 目录 |
| 保存在哪 | 工程文件(随项目一起保存) | 磁盘上的 .c / .h 文件 |
| 重新生成后 | 自动从工程写回 | 仅 BEKEN_USER_CODE 注释里面的代码会保留 |
| 适合谁 | 快速试逻辑、MicroPython 项目 | C 固件开发、对接 SDK、写复杂业务 |
设计器内包含三种入口,本质相同(都保存在工程里):
- 页面自定义代码 — 页面加载时执行
- 事件 → 自定义代码 — 点击、值变化等交互时执行
- 事件 → 调用函数 — 在
custom_func.c写实现,多处复用
外部 IDE 则直接改导出目录里的生成文件,但只能改注释标记内的区域:
/* BEKEN_USER_CODE_BEGIN implementation */
// 您的代码写在这里
/* BEKEN_USER_CODE_END implementation */
提示:设计器 代码编辑器 里,生成文件只能查看;可编辑的是
custom_func.c和custom/目录。带BEKEN_USER_CODE的文件请用外部 IDE 打开。
🎨 二、设计器内怎么写?¶
1. 页面自定义代码¶
页面打开时需要额外初始化时使用。
- 选中页面(Screen)
- 属性面板 → 「自定义代码」 → 添加 / 编辑
- 填写 #include 和变量(写入
page_*_init.c的BEKEN_USER_CODE includes内)、功能实现(写入init_page_xxx()的BEKEN_USER_CODE implementation内)
提示:C 语言下,页面自定义代码与外部 IDE 追加代码共用同一对
BEKEN_USER_CODE注释;设计器内容在重新生成时自动更新,其后手写内容会保留。提示:支持 C 语言 与 MicroPython 两个标签页。
2. 事件自定义代码¶
某个按钮点击、控件变化时需要执行逻辑时使用。
- 选中组件 → 属性面板 「事件」
- 添加事件,动作选 「自定义代码」
- 填写 #include 和变量 / 功能实现
- 点击 确认 保存
提示:事件的 #include 和变量 写在 marker 外的
// custom event code处;功能实现 写在对应xxx_event_cb()回调内。
3. 调用函数¶
多个组件共用同一函数时使用。
- 事件中动作选 「调用函数」,填写函数名(如
handleButtonClick) - 在
custom_func.c中实现该函数
提示:
custom_func.c和custom/目录重新生成时不会覆盖,可自由添加文件。
💻 三、外部 IDE 怎么写?¶
适用于 C 项目:用 Keil、VS Code 等打开 beken_generated(或项目设置里配置的导出目录)。
使用步骤¶
- 找到文件中的
BEKEN_USER_CODE_BEGIN/BEKEN_USER_CODE_END - 只在两者之间写代码,保存文件
- 回到设计器,执行 生成代码 或 生成+编译+运行
注意事项¶
- 注释外面的内容是工具生成的,重新生成会被覆盖
- 改完
beken_generated后,模拟器需执行 生成+编译+运行 才会用到最新代码(仅点「编译」不够) - 在
page_*_init.c的 marker 内追加代码时,请写在页面属性自定义代码之后,建议中间留一行空行
各文件可编辑区域¶
重新生成时,BEKEN_USER_CODE 注释里面的手写 C 代码会保留;外面由工具生成并覆盖。
| 文件 | 标记区域 | 适合写什么 |
|---|---|---|
page_*_init.c |
includes、implementation、file_tail |
页面级头文件/变量;init_page_xxx() 内追加逻辑;文件末尾追加代码 |
beken_ui.c |
includes、implementation、file_tail |
beken_ui_init() 内扩展;文件末尾追加代码 |
beken_ui.h |
includes |
头文件引用、对外声明 |
event_runtime.c |
includes、navigate_hook、switch_locale_hook、file_tail |
跳转/切语言 hook;文件末尾追加代码 |
event_runtime.h |
includes |
头文件引用、对外声明 |
lv_i18n.c |
includes、init_hook、set_locale_hook、file_tail |
多语言扩展;文件末尾追加代码(启用多语言时生成) |
lv_i18n.h |
includes |
头文件引用、对外声明 |
basic_callback.c |
includes、file_tail |
头文件/变量;文件末尾追加代码 |
此外,以下路径整文件由用户维护,重新生成不覆盖:
custom_func.c/custom_func.h— 「调用函数」事件实现custom/目录 — 用户自建的.c/.h
以下文件请勿手动修改(每次重新生成会完整覆盖):
fonts/*.c、basic_callback.c- marker 外的组件初始化、事件框架、设计器内自定义代码对应区段
提示:在文件中搜索
BEKEN_USER_CODE可快速定位可保留的手写区域。