跳转到内容

UDS -> C 代码

用户可以基于其已配置的 UDS 服务生成 C 代码。代码格式由用户定义的模板决定。 code

UDS 代码生成

首先,需要在 UDS Tester 中启用 UDS 代码生成功能。

code1

然后可以添加模板配置(Template Configurations)。每个模板包含两项:

  • Template Path:从本地文件系统选择模板文件
  • Generate Path:指定生成代码的保存路径

支持多个模板配置。可按需添加或移除,每个模板均支持运行时预览。

特殊属性(Special Properties)

启用 UDS 代码生成功能后,每个服务都支持为code generation添加用户自定义的特殊属性。 code2

属性以 Key-Value 形式定义。

要求:

  • Key 不可重复
  • Value 必须为字符串

模板(Template)

UDS 代码生成系统基于 Handlebars.js 模板引擎,并增强了大量自定义 helper 方法,以提供强大的代码生成功能。

模板系统概览

模板采用 Handlebars 语法,表达式使用 `{{ }}`,块级 helper 使用 `{{# }}{{/ }}`。系统可访问 UDS 服务数据、配置属性以及丰富的 helper 函数。

可用数据上下文

生成代码时,模板可访问:

  • tester:TesterInfo:所有已配置的 UDS 服务及其属性
  • project:ProjectInfo:项目信息,类型如下:
ts
export interface ProjectInfo {
  name: string
  path: string
}

自定义 Helper 方法

数学运算

* `{{add a b}}` - 加法 * `{{subtract a b}}` - 减法 * `{{multiply a b}}` - 乘法 * `{{divide a b}}` - 除法 * `{{abs num}}` - 绝对值 * `{{ceil num}}` - 向上取整 * `{{floor num}}` - 向下取整 * `{{modulo a b}}` - 取余 * `{{avg array}}` - 平均值 * `{{sum array}}` - 求和

字符串处理

* `{{camelcase str}}` - 转为 camelCase * `{{capitalize str}}` - 首字母大写 * `{{uppercase str}}` - 转为大写 * `{{lowercase str}}` - 转为小写 * `{{dashcase str}}` - 转为 dash-case * `{{snakecase str}}` - 转为 snake_case * `{{dotcase str}}` - 转为 dot.case * `{{append str suffix}}` - 追加后缀 * `{{prepend str prefix}}` - 前置前缀 * `{{trim str}}` - 移除空白 * `{{replace str old new}}` - 文本替换

数组操作

* `{{first array n}}` - 取前 n 项 * `{{last array n}}` - 取后 n 项 * `{{after array n}}` - 取索引 n 之后的项目 * `{{before array n}}` - 取索引 n 之前的项目 * `{{join array separator}}` - 连接数组元素 * `{{arrayify value}}` - 转为数组 * `{{#forEach array}}...{{/forEach}}` - 遍历数组 * `{{#eachIndex array}}...{{/eachIndex}}` - 带索引遍历

比较与逻辑

* `{{eq a b}}` - 等于 * `{{ne a b}}` - 不等于 * `{{gt a b}}` - 大于 * `{{lt a b}}` - 小于 * `{{gte a b}}` - 大于等于 * `{{lte a b}}` - 小于等于 * `{{isString val}}` - 是否字符串 * `{{isNumber val}}` - 是否数字 * `{{isArray val}}` - 是否数组 * `{{isDefined val}}` - 是否已定义 * `{{isUndefined val}}` - 是否未定义

实用函数

* `{{setVar name value}}` - 设置变量 * `{{jsonParse str}}` - 解析 JSON 字符串 * `{{jsonStringify obj}}` - 转为 JSON * `{{times n}}...{{/times}}` - 重复 n 次 * `{{range start end}}...{{/range}}` - 从 start 到 end 循环 * `{{logFile message}}` - 调试输出 * `{{error message}}` - 抛出错误

模板示例

handlebars
/* Generated UDS Code */
#include <stdint.h>

{{#forEach services}}
// Service: {{name}}
{{#if (isDefined description)}}
/* {{description}} */
{{/if}}

#define {{uppercase (snakecase name)}}_ID 0x{{serviceId}}

{{#if specialProperties}}
/* Special Properties */
{{#each specialProperties}}
#define {{uppercase (snakecase @key)}} "{{this}}"
{{/each}}
{{/if}}

{{/forEach}}

更复杂的示例

参见示例 uds_generate_code