跳转到内容

UDS -> C 代码

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

UDS 代码生成

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

code1

然后用户可以添加模板配置。 每个模板配置包含两个字段:

  • 模板路径:用户可以从本地文件系统中选择模板文件。
  • 生成路径:用户可以指定生成代码的保存路径。

支持多个模板配置。 用户可以根据需要添加或删除模板配置,每个模板都支持运行时预览功能。

特殊属性

启用 UDS 代码生成时,每个服务都支持添加用户定义的特殊属性以用于 代码生成code2

属性以键值对格式定义。

要求:

  • 键不能重复
  • 值必须是字符串

模板

UDS 代码生成系统基于 Handlebars.js 模板引擎,并通过大量自定义辅助方法进行增强,以提供强大的代码生成能力。

模板系统概述

模板使用 Handlebars 语法,双花括号 `{{ }}` 用于表达式,`{{# }}{{/ }}` 用于块辅助方法。 系统提供对 UDS 服务数据、配置属性以及丰富的辅助函数集的访问。

可用数据上下文

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

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

自定义辅助方法

数学运算

  • {{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}} - 转换为驼峰命名法
  • {{capitalize str}} - 首字母大写
  • {{uppercase str}} - 转换为大写
  • {{lowercase str}} - 转换为小写
  • {{dashcase str}} - 转换为短横线命名法
  • {{snakecase str}} - 转换为蛇形命名法
  • {{dotcase str}} - 转换为点分命名法
  • {{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 示例。