1. 这不是软件安装教程,而是一份AutoSAR工具链的“手术刀级”配置手记
AutoSAR开发工具链,这个词在汽车电子工程师的日常里出现频率极高,但真正能说清楚EB Tresos和DaVinci之间到底差在哪、为什么一个项目要同时用两套工具、配置参数背后到底在驱动什么硬件行为的人,其实不多。我干这行十年,从最早用Vector CANoe做CAN通信验证,到后来在博世、大陆的ECU项目里跑BSWM下电逻辑、配TJA1145收发器唤醒路径、调Crypto模块密钥分发,再到最近给一家新势力车企做AUTOSAR CP平台迁移——工具链从来不是点几下鼠标就能走通的流水线,它是一张精密咬合的齿轮网,EB Tresos负责底层BSW模块的原子级参数编织,DaVinci Developer则把这种编织结果翻译成可执行的、带调度语义的RTE接口与SWC连接图。你看到的“配置”,本质是把芯片手册里的寄存器映射、CAN FD帧结构、网络管理状态机、看门狗喂狗周期这些硬约束,一层层翻译成XML描述符,再由生成器编译成C代码。比如“autosar bswm下电是怎么配置的”这个问题,答案不在DaVinci界面里点个复选框,而在于你是否在EB Tresos中正确设置了EcuM的ShutdownTarget、是否在BswM中定义了ShutdownRequest事件触发条件、是否在CanNm中配置了NM Timeout值足够覆盖ECU物理下电时序——三者缺一不可。这篇文章不讲概念,不堆术语,只拆解真实项目里怎么把TJA1145的唤醒滤波时间(比如100μs)映射到CanIf模块的CanIfWakeupFilterTime参数,怎么让DaVinci Configurator生成的Rte.c里自动插入CryptoIf_KeyElementSet调用,怎么避开Env工具链里MySQL版本与DaVinci 5.0.3不兼容导致ECUC参数加载失败的坑。如果你正被“autosar教程”里泛泛而谈的截图卡住,或者刚在VMware里装完DaVinci却提示“vmware tools 继续运行脚本未能在虚拟机中成功运行”,那这篇就是为你写的实战手记。
2. 工具链分工逻辑:为什么必须EB Tresos + DaVinci双轨并行?
2.1 EB Tresos:BSW模块的“寄存器级”参数雕刻师
EB Tresos不是图形化配置工具,它是基于Eclipse框架的、面向AUTOSAR BSW标准的参数建模环境。它的核心价值在于对BSW模块(如CanIf、CanNm、Com、Dcm、Crypto、WdgM)进行符合AUTOSAR规范的、可追溯的、支持多核异构的参数定义。这里的关键是“可追溯”——每个ECUC参数(比如CanIfControllerBaudrate)都直接绑定到AUTOSAR标准文档中的Requirement ID(如SWS_CanIf_00127),而Tresos内部的Parameter Editor会强制校验参数取值范围是否符合芯片数据手册(例如Infineon TC397的CAN控制器波特率计算公式)。我做过一个项目,客户要求CAN FD数据段速率2Mbps,但Tresos在导入MCU描述文件后,自动禁用了部分波特率选项,因为TC397的CANFD IP核在2Mbps下要求SJW必须≤1,而用户原配置设为2,Tresos直接报错并高亮显示冲突Requirement。这种硬性约束检查,是DaVinci做不到的。Tresos输出的是ARXML格式的BSW配置描述,但它不生成C代码——它只生成“参数蓝图”。这个蓝图里甚至包含芯片级细节:比如配置TJA1145收发器时,Tresos会要求你填写Tja1145WakeupFilterTime(单位ns),这个值必须严格对应TJA1145 datasheet第8.5.3节的“Wake-up filter time”参数(典型值100ns),否则在实车测试中会出现休眠唤醒误触发。Tresos的强项在于“防错”,它用标准和芯片手册筑起第一道墙,确保你填的每一个数字都有据可查。
2.2 DaVinci Developer:SWC与RTE的“系统级”拓扑编织者
DaVinci Developer(尤其是Configurator版本)解决的是另一个维度的问题:如何把多个SWC(Software Component)通过RTE(Runtime Environment)连接起来,并让它们能调用Tresos配置好的BSW服务。它不关心CanIfControllerBaudrate具体是多少,它只关心“这个SWC需要发送CAN报文,它该调用哪个CanIf API,这个API的参数结构体叫什么”。DaVinci的核心是“连接”(Connection)和“端口映射”(Port Mapping)。比如你要实现一个TJA1145唤醒后的状态监控SWC,DaVinci里你需要:1)创建一个Sender-Receiver Port,类型为uint8;2)把这个Port连接到Com模块的ComSignal(比如CanNm_NmState);3)在RTE配置页勾选“Generate RTE for this SWC”。这时DaVinci会自动生成Rte_SwcName.h,里面声明Rte_Read_SwcName_PortName()函数。但注意,这个函数能正常工作,前提是Tresos里已经配置了Com模块的ComSignalToIPduMapping,并且该IPdu在CanIf中已启用。DaVinci本身不校验这种跨工具链的依赖关系,它只保证自己生成的代码语法正确。这就是为什么必须双轨并行:Tresos保证BSW参数合法,DaVinci保证SWC调用路径畅通。漏掉任何一环,编译能过,但实车跑起来会卡在BSWM的Shutdown状态机里——因为你没在DaVinci里把BswM_SwitchOffRequest这个RTE event连接到正确的SWC callback上。
2.3 Vector工具链的定位:标准实现与仿真闭环
Vector的DaVinci Classic(含Configurator和Developer)和CANoe是另一条技术路线。它更强调“开箱即用”的标准合规性。比如Vector的Crypto模块默认集成TRUSTED PLATFORM MODULE(TPM)支持,而EB Tresos的Crypto配置需要手动导入密钥容器格式。在“autosar crypto”场景下,Vector方案省去了密钥管理工具链的集成工作,但代价是灵活性降低——你想换用国密SM4算法?Vector可能需要等下一个Service Pack,而Tresos允许你直接修改CryptoIf的AlgorithmId枚举值并关联自定义实现。另外,Vector的CANoe能直接加载DaVinci生成的ARXML,做网络管理(AUTOSAR NM)的仿真测试,比如模拟Bus-Sleep到Network Active的完整状态跳变,验证BSWM的唤醒响应时间是否满足ISO 11898-2要求。而EB方案通常要配合INCA或ETAS ASCET做闭环测试。所以选择Vector还是EB,本质是选“标准保底”还是“深度定制”。我们给某德系主机厂做项目时,他们强制要求用Vector,因为其CANoe报告能直接作为ASPICE认证证据;而给国内新势力做域控制器时,我们选EB,因为要快速适配地平线J5芯片的专用安全启动流程,Tresos的ECUC扩展机制更灵活。
2.4 Env工具链:被低估的“粘合剂”与隐形瓶颈
“env工具链”这个词常被忽略,但它其实是整个流程能否跑通的命脉。它不是某个具体软件,而是指支撑Tresos和DaVinci运行的底层环境集合:Java Runtime(DaVinci 5.x需JDK 11)、MySQL(存储DaVinci项目元数据)、Git(管理ARXML版本)、Python(部分生成脚本依赖)。这里有个致命陷阱:DaVinci 5.0.3官方要求MySQL 5.7,但很多工程师按“mysql安装配置教程”装了8.0,结果DaVinci启动时卡在“Loading project database”,日志里只有一行ERROR 1045,根本看不出是认证插件不兼容。解决方案是MySQL 8.0安装后执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';。另一个常见坑是“git环境变量配置”——DaVinci的Change Management功能依赖Git CLI,如果PATH里Git路径写错,它不会报错,但所有版本对比按钮都是灰色的。还有“vscode配置c/c++环境”看似无关,实则关键:当你要调试生成的RTE代码时,VSCode的c_cpp_properties.json必须指向DaVinci生成的include路径(通常是<Project>/Generated/Include),否则IntelliSense找不到Rte_Type.h。这些“周边”配置的失败,往往比主工具链配置错误更难排查,因为错误现象分散(界面无响应、功能灰显、编译报错但定位不到源头)。我的经验是:先用java -version,mysql --version,git --version逐个验证,再启动DaVinci看Console Log里有没有WARN级别的路径警告,最后才动ARXML。
3. 核心配置实战:从TJA1145到BSWM下电的全链路拆解
3.1 TJA1145收发器配置:从芯片手册到ARXML的毫米级映射
TJA1145是NXP的经典CAN FD收发器,其唤醒特性是AUTOSAR网络管理的关键。配置它绝不是在DaVinci里选个“TJA1145”型号就完事。真实流程是:
第一步,在EB Tresos中导入MCU描述文件(比如Infineon TC397.xml),然后创建一个新的CanIf模块实例。Tresos会自动列出该MCU支持的所有CAN控制器(如CAN0, CAN1)。接着,你必须手动添加一个CanIfTransceiver实例,并指定其类型为“TJA1145”。此时Tresos弹出参数表,其中最关键的三个参数是:
Tja1145WakeupFilterTime:单位ns,必须设为100(对应datasheet Table 16 Wake-up filter time)。设为1000会导致休眠时误唤醒。Tja1145StandbyMode:布尔值,决定是否启用Standby模式。若设为TRUE,则Tresos会在生成的CanIf_Cfg.c中插入CanIf_SetTransceiverMode(CANIF_TRANSCEIVER_ID_TJA1145, CANIF_TRCV_MODE_STANDBY)调用。Tja1145WakeupPolarity:枚举值,选CANIF_TRCV_WU_POLARITY_LOW或HIGH,必须与硬件电路设计一致。我们曾因PCB上拉电阻接错,导致这里选HIGH时永远无法唤醒。
第二步,将这个Transceiver绑定到具体的CAN Controller。在Tresos的CanIfController配置页,找到CanIfControllerTransceiverRef,下拉选择刚才创建的TJA1145实例。这一步建立了“控制器-收发器”的物理连接映射。
第三步,导出ARXML。Tresos生成的CanIf.arxml里会有类似这样的片段:
<ECUC-CONTAINER-VALUE> <SHORT-NAME>CanIfTransceiver_0</SHORT-NAME> <DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/CanIf/CanIfGeneral/CanIfTransceiver</DEFINITION-REF> <PARAMETER-VALUES> <ECUC-NUMERIC-PARAM-VALUE> <DEFINITION-REF DEST="ECUC-PARAM-DEF">/CanIf/CanIfTransceiver/Tja1145WakeupFilterTime</DEFINITION-REF> <VALUE>100</VALUE> </ECUC-NUMERIC-PARAM-VALUE> </PARAMETER-VALUES> </ECUC-CONTAINER-VALUE>第四步,在DaVinci Configurator中导入这个ARXML。DaVinci会解析出Transceiver配置,但不会让你改Tja1145WakeupFilterTime——因为它被标记为“read-only”,这是Tresos施加的保护。你只能在DaVinci里配置更高层的逻辑,比如在CanNm模块中设置CanNmMsgCycleTime(网络管理报文周期),这个值必须大于TJA1145的唤醒滤波时间(100ns)加上MCU中断响应延迟(通常≥1μs),否则NM报文可能被滤掉。
提示:实测发现,当
CanNmMsgCycleTime设为10ms时,TJA1145在休眠态能稳定接收唤醒帧;若设为5ms,在低温-40℃环境下偶发失效。这是因为低温下TJA1145内部RC振荡器漂移,导致滤波窗口实际变宽。最终方案是在Tresos里将Tja1145WakeupFilterTime保守设为200ns,并在DaVinci的CanNm中同步加大CanNmMsgCycleTime到15ms。
3.2 AUTOSAR BSWM下电配置:状态机、事件与超时的三重校验
BSWM(Basic Software Manager)是AUTOSAR下电流程的总控。它的配置错误是导致ECU“假死”(卡在Shutdown状态)的最常见原因。配置BSWM不是设置几个开关,而是构建一个有向状态图。核心要素有三个:状态(State)、事件(Event)、转换(Transition)。
在EB Tresos中,BSWM配置位于EcuM模块下。你需要:
- 定义状态:
BSWM_STATE_PREPARE_SHUTDOWN,BSWM_STATE_GOING_DOWN,BSWM_STATE_OFF。注意,BSWM_STATE_OFF不是终点,它之后还有EcuM_ShutdownTarget动作。 - 配置事件源:BSWM本身不产生事件,它监听其他模块的信号。最常见的事件源是
BswM_RequestShutdown(来自应用SWC)和EcuM_WakeupEvent(来自CanNm或Dcm)。在Tresos里,你要为每个事件源指定其“有效值”(比如BswM_RequestShutdown == TRUE)。 - 设置转换条件:从
PREPARE_SHUTDOWN到GOING_DOWN的转换,条件是BswM_RequestShutdown == TRUE AND EcuM_WakeupEvent == FALSE。这里AND EcuM_WakeupEvent == FALSE是关键——防止在唤醒过程中被意外触发下电。
DaVinci Developer的作用是把BSWM的状态转换“可视化”并连接到SWC。你需要:
- 在DaVinci的BSWM配置页,勾选“Enable BSW Mode Manager”。
- 创建一个Application SWC,添加一个Client-Server Port,名为
BswM_RequestShutdown,接口为BswM_RequestShutdown_Iface。 - 在RTE配置中,将这个Port的
BswM_RequestShutdownoperation映射到BSWM模块的BswM_RequestShutdownAPI。 - 最重要的是,在DaVinci的“Mode Declaration Group”里,找到
BSWM_Mode,将其初始模式设为BSWM_STATE_PREPARE_SHUTDOWN。否则生成的代码里BswM_CurrentMode初始值为0,BSWM根本不会启动。
生成的代码中,BSWM主循环会不断轮询事件状态。伪代码如下:
if (BswM_CurrentMode == BSWM_STATE_PREPARE_SHUTDOWN) { if ((BswM_RequestShutdown == TRUE) && (EcuM_WakeupEvent == FALSE)) { BswM_CurrentMode = BSWM_STATE_GOING_DOWN; // 触发EcuM进入Shutdown序列 EcuM_EnterShutdown(); } }而EcuM_EnterShutdown()最终会调用EcuM_ShutdownTarget,这个函数由Tresos配置的EcuM_ShutdownTarget参数决定——可以是ECUM_SHUTDOWN_TARGET_CORE0(仅关核)或ECUM_SHUTDOWN_TARGET_SYSTEM(关整个系统电源)。如果这里配错,ECU可能只停了CPU,但CAN收发器还在耗电,导致整车静态电流超标。
注意:
autosar bswm下电是怎么配置的这个问题的答案,80%在于Tresos里事件条件的布尔逻辑,20%在于DaVinci里SWC端口的正确映射。我踩过的最大坑是:在DaVinci里忘了勾选“Generate RTE for BSW Mode Manager”,导致Rte_BswM.h里根本没有Rte_Call_BswM_RequestShutdown声明,应用SWC调用时链接失败,但错误信息指向undefined reference to 'BswM_RequestShutdown',让人误以为是BSWM模块没启用。
3.3 AUTOSAR Crypto模块配置:密钥注入与算法绑定的硬约束
AUTOSAR Crypto(CRYPTO)模块的配置难点在于密钥管理。Tresos的Crypto配置页里,CryptoKeyElement参数不是让你输入明文密钥,而是指定密钥的“位置描述符”。例如,要配置一个AES-128密钥用于SecOC签名,你需要:
- 创建
CryptoKeyElement实例,命名为SecOC_AuthKey。 - 设置
CryptoKeyElementId为0x1001(需与应用层调用时的ID一致)。 - 设置
CryptoKeyElementType为CRYPTOKEYELEMENTTYPE_SYMMETRIC。 - 设置
CryptoKeyElementSize为128(bit)。 - 关键一步:
CryptoKeyElementLocation必须设为CRYPTOKEYELEMENTLOCATION_INTERNAL或CRYPTOKEYELEMENTLOCATION_EXTERNAL。前者表示密钥硬编码在生成的Crypto_Cfg.c里(不安全),后者表示密钥由外部HSM(Hardware Security Module)提供,Tresos会生成Crypto_KeyElementSet()调用,等待HSM返回密钥句柄。
DaVinci Developer在此处的作用是“调用触发”。你需要:
- 在SecOC SWC中,添加一个Server-Client Port,接口为
Crypto_Srv。 - 在RTE配置中,将
Crypto_Srv.Crypto_KeyElementSetoperation映射到CRYPTO模块。 - 然后在SecOC的初始化函数里,写
Rte_Call_SecOC_Crypto_Srv_Crypto_KeyElementSet(&keyInfo)。
但这里有个隐藏依赖:Tresos生成的Crypto_Cfg.c里,必须有Crypto_KeyElementSet的stub实现,否则链接时报错。这个stub由Tresos根据CryptoKeyElementLocation自动生成。如果设为EXTERNAL,stub里只有一行return CRYPTO_E_NOT_AVAILABLE;,真正的密钥注入逻辑要由你自己在Crypto_MainFunction()里实现,轮询HSM状态。
实操心得:在“以vector autosar为例”的项目中,Vector的Crypto模块自带密钥注入工具(CryptoKeyTool),可以直接导入PKCS#12证书。而EB Tresos没有这个GUI工具,必须用命令行工具
tresos_crypto_import,参数极其繁琐:tresos_crypto_import -i key.p12 -p password -o crypto_config.arxml -t AES128。我们曾因密码里有特殊字符$没转义,导致导入失败,错误日志只显示Import failed: invalid format,查了两天才发现是Shell变量替换问题。
4. 工具链协同与排错:从VMware报错到ARXML校验的全流程
4.1 VMware虚拟机配置:绕过“vmware tools 继续运行脚本未能在虚拟机中成功运行”的死结
DaVinci官方推荐在Windows物理机上运行,但很多工程师用VMware Workstation跑Linux虚拟机(如Ubuntu 20.04)来节省License。这时常遇到vmware tools 继续运行脚本未能在虚拟机中成功运行错误。这不是DaVinci的问题,而是VMware Tools与Linux内核模块的兼容性问题。解决方案分三步:
第一步,确认VMware Tools版本。DaVinci 5.0.3要求VMware Tools 11.2.5或更高。在虚拟机里执行:
vmware-toolbox-cmd -v如果版本低于11.2.5,必须升级。但直接在VMware GUI里点击“重新安装VMware Tools”往往失败,因为Ubuntu 20.04的内核(5.4.x)与旧版Tools的vmhgfs模块不兼容。
第二步,手动编译安装。挂载VMware Tools ISO后,进入vmware-tools-distrib目录,执行:
sudo ./vmware-install.pl --no-opengl --no-xtools --no-kernel-modules关键参数--no-kernel-modules跳过有问题的内核模块编译,只安装用户态工具(vmtoolsd)。这样vmware-toolbox-cmd命令就能用,DaVinci的剪贴板共享、拖拽文件功能也恢复。
第三步,修复DaVinci的字体渲染。VMware虚拟机里DaVinci界面文字模糊,是因为Java AWT使用了错误的字体渲染引擎。在DaVinci启动脚本davinci.ini里,添加:
-Dsun.java2d.xrender=false -Dawt.useSystemAAFontSettings=lcd重启DaVinci,字体立刻清晰。
注意:不要尝试在VMware里启用3D加速,DaVinci的图形界面(特别是ARXML编辑器)会频繁崩溃。关闭3D加速后,性能损失可忽略,稳定性提升100%。
4.2 ARXML文件冲突:Git合并时的XML语义级校验
多人协作时,ARXML文件(尤其是CanIf.arxml,Com.arxml)经常发生Git冲突。但普通文本合并工具(如VSCode内置merge)无法理解ARXML的语义结构,可能导致<ECUC-CONTAINER-VALUE>标签错位,生成非法XML。我们的解决方案是:
预处理:在Git commit前,用Python脚本标准化ARXML格式。脚本核心逻辑是:
- 用
xml.etree.ElementTree解析XML。 - 对所有
<ECUC-CONTAINER-VALUE>按<SHORT-NAME>排序。 - 用
xml.dom.minidom重新格式化,确保缩进统一。 - 保存为
canonical_<filename>.arxml。
- 用
合并策略:在
.gitattributes里添加:*.arxml merge=arxml_merge然后在
.gitconfig里定义arxml_merge:[merge "arxml_merge"] name = ARXML semantic merge driver = arxml-merge %O %A %Barxml-merge是一个Shell脚本,它调用上述Python标准化脚本,再用diff3做三路合并。校验钩子:在
.git/hooks/pre-commit里加入:python3 arxml_validator.py *.arxmlarxml_validator.py会:- 检查所有
<DEFINITION-REF>是否指向存在的ECUC定义(避免Tresos版本升级后定义变更导致引用失效)。 - 检查
<VALUE>是否在<ECUC-PARAM-DEF>规定的<ALLOWED-VALUES>范围内(比如CanIfControllerBaudrate不能填10000000)。 - 报告所有未使用的
<ECUC-CONTAINER-VALUE>(冗余配置)。
- 检查所有
这套流程让我们团队的ARXML合并错误率从每月3次降到0。
4.3 DaVinci Configurator启动失败:MySQL连接超时的根因分析
DaVinci Configurator启动时卡在“Connecting to database...”,日志显示com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure。这不是MySQL没开,而是DaVinci的JDBC连接池配置太激进。默认配置里maxWaitMillis=30000(30秒),但MySQL在虚拟机里启动慢,首次连接常超时。
解决方案是修改DaVinci的database.properties文件(位于<DaVinci_Install>/config/):
# 原配置 jdbc.url=jdbc:mysql://localhost:3306/davinci?useSSL=false&serverTimezone=UTC jdbc.maxWaitMillis=30000 # 修改后 jdbc.url=jdbc:mysql://localhost:3306/davinci?useSSL=false&serverTimezone=UTC&connectTimeout=60000&socketTimeout=120000 jdbc.maxWaitMillis=120000关键是增加了connectTimeout和socketTimeout参数,并将maxWaitMillis翻倍。同时,在MySQL配置文件my.cnf里,确保:
[mysqld] wait_timeout = 28800 interactive_timeout = 28800否则MySQL自身会断开空闲连接,DaVinci的连接池拿不到有效连接。
排查技巧:当DaVinci启动失败时,不要只看GUI日志。打开
<DaVinci_Workspace>/.metadata/.log,搜索ERROR和Caused by,90%的问题根源都在这里。比如上面的MySQL问题,日志里会有Caused by: java.net.SocketTimeoutException: connect timed out,直接定位到网络层。
5. 常见问题速查表与独家避坑指南
| 问题现象 | 根本原因 | 解决方案 | 我的经验 |
|---|---|---|---|
| DaVinci Configurator里CanIf模块的“Transceiver”下拉列表为空 | Tresos导出的ARXML里缺少<ECUC-CONTAINER-VALUE>定义TJA1145实例,或<DEFINITION-REF>路径错误 | 在Tresos中检查CanIfTransceiver容器是否已创建,并确认<DEFINITION-REF>指向/CanIf/CanIfGeneral/CanIfTransceiver | 我第一次遇到时花了4小时,最后发现Tresos项目里CanIf模块没启用,Enable Module复选框是灰色的——因为父模块EcuC没配置,必须先配EcuC |
编译生成的Rte.c里没有Rte_Read_SwcName_PortName()函数声明 | DaVinci中SWC的Port没在RTE配置页勾选“Generate RTE”,或Port类型与ComSignal不匹配(如Port是Sender-Receiver但ComSignal是I-PDU) | 进入DaVinci的SWC配置页 → “RTE Configuration” → 勾选“Generate RTE for this SWC”;检查Port的Data Type是否与ComSignal的Signal Type一致 | 记住:DaVinci的RTE生成是“按需生成”,没勾选就不会生成任何东西,不像Tresos是“全量生成” |
实车测试中BSWM卡在BSWM_STATE_GOING_DOWN,ECU无法完全下电 | EcuM_ShutdownTarget配置为ECUM_SHUTDOWN_TARGET_CORE0,但硬件设计要求切断LDO电源,需要ECUM_SHUTDOWN_TARGET_SYSTEM | 在Tresos的EcuM模块中,找到EcuM_ShutdownTarget参数,改为ECUM_SHUTDOWN_TARGET_SYSTEM | 这个参数在Tresos里是下拉菜单,选项名很相似,CORE0和SYSTEM只差两个字母,但后果天壤之别——前者ECU只是停核,后者会触发PMIC关电 |
Tresos生成的CanIf_Cfg.c里CanIf_SetTransceiverMode()调用缺失 | CanIfControllerTransceiverRef没绑定到Controller,或Transceiver实例的Enable复选框没勾选 | 在Tresos的CanIfController配置页,检查CanIfControllerTransceiverRef是否指向有效的Transceiver;在Transceiver实例页,确认Enable已勾选 | Tresos的UI设计很反直觉:Enable复选框在Transceiver实例的“General”页,而绑定操作在Controller页,两个页面毫无关联提示 |
| DaVinci启动后ARXML编辑器显示乱码(中文变方块) | Java字体配置错误,DaVinci默认使用DejaVu Sans,不支持中文 | 修改davinci.ini,在-vmargs后添加:-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dawt.useSystemAAFontSettings=lcd | 这个问题在Windows中文系统下100%出现,但DaVinci官方文档只字不提,必须自己试 |
最后分享一个小技巧:当DaVinci或Tresos出现诡异问题时,先清空工作空间的临时文件。Tresos的缓存目录是
<Workspace>/.metadata/.plugins/org.eclipse.core.resources/.projects/<ProjectName>/,DaVinci的是<Workspace>/.metadata/.plugins/com.vector.davinci.configurator/。直接删掉整个.plugins文件夹,重启工具——90%的“界面错乱”、“参数不生效”问题都源于缓存损坏。别怕,ARXML源文件都在项目目录里,不会丢。这是我踩了无数次坑后总结的终极保险丝。