新闻详情

新闻详情

首页 / 资讯中心 / 详情

F´ Autocoder 组件字典解析:以 stress 测试的 TestCommand 组件为例

发布时间:2026/9/25 2:39:18来源:尧图网络
F´ Autocoder 组件字典解析:以 stress 测试的 TestCommand 组件为例
嵌入式系统编程【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址https://gitcode.com/gh_mirrors/fpri/fprime点击查看免费下载导读本文以 F´ 框架 Autocoders/Python 测试套件中的 stress 测试组件为实例系统讲解 F´Flight Software Framework中组件字典Component Dictionary的生成机制、内容结构与地址编码规则。你将掌握如何从 XML 模型自动生成命令Command、遥测Telemetry与事件Event三类字典表如何通过 AcConstants.ini 中的基址配置推导每个条目的最终 ID以及生成后的组件字典如何与 C 实现和单元测试代码一一对应。组件字典是什么F´ Autocoder 的自动化产物在 F´ 框架中组件字典是一份由 Autocoder 自动生成的、描述组件对外接口命令、遥测、事件的权威清单。它既是地面系统Ground System与飞行软件通信的契约也是开发者核对 ID 分配、参数类型的参考手册。本文对应的字典文档为 TestCommand.md它由 Autocoder 从组件的 XML 模型文件 TestComponentAi.xml 生成。该组件名为StressTest::TestCommandkind 为active主动组件注释中直接写明其用途是 A stressfull component——即用于对 Autocoder 生成能力进行压力测试覆盖同步/异步命令、枚举参数、自定义序列化类型、多参数事件等多种语法形态。组件字典包含三张核心表格Command List命令列表组件可接收的遥控指令Telemetry Channel List遥测通道列表组件对外发布的遥测量Event List事件列表组件上报的日志事件。命令列表TEST_CMD_1 与 TEST_CMD_2字典文档的命令表完整收录了两条命令MnemonicID说明参数类型注释TEST_CMD_1272 (0x110)A test commandarg1I32The I32 command argumentarg2SomeEnumThe ENUM argumentTEST_CMD_2273 (0x111)A test commandarg1I32The I32 command argumentarg2F32A float argument从 XML 模型看命令定义这两条命令在 TestComponentAi.xml 中定义。TEST_CMD_1 是异步命令kindasyncpriority 为 1TEST_CMD_2 是同步命令kindsynccommands opcode_base$comp_opcode_base command kindasync opcode0x100 mnemonicTEST_CMD_1 priority1 commentA test command/comment args arg namearg1 typeI32 commentThe I32 command argument/comment /arg arg namearg2 typeENUM enum nameSomeEnum item nameMEMB1/ item nameMEMB2 value7 commentThis member is important/ item nameMEMB3 value15/ /enum commentThe ENUM argument/comment /arg /args /command command kindsync opcode0x101 mnemonicTEST_CMD_2 commentA test command/comment args arg namearg1 typeI32.../arg arg namearg2 typeF32.../arg /args /command /commands几点值得注意枚举参数 SomeEnumMEMB1未指定 value 默认从 0 开始MEMB2显式赋值为 7MEMB3为 15。这种显式赋值在 F´ 中用于保持枚举值与地面系统/既有协议的兼容性避免因成员增删导致数值漂移。kind 属性async命令通过组件队列排队执行sync命令在执行线程内直接同步处理。这直接影响组件基类生成TEST_CMD_1_cmdHandler与TEST_CMD_2_cmdHandler的处理时机。命令 ID 的合成规则opcode_base XML opcode字典表中 272 (0x110) 并非直接写在 XML 里而是由基址与偏移相加得到。配置文件 AcConstants.ini 定义了[Component] max_aports 3 comp_opcode_base 0x10 comp_telemetry_base 0x20 comp_event_base 0x30 comp_parameter_base 0x40因此TEST_CMD_1 comp_opcode_base(0x10) 0x100 0x110 272TEST_CMD_2 comp_opcode_base(0x10) 0x101 0x111 273这种基址 偏移的编码方式允许不同组件使用相同的偏移值如 0x100而不会产生全局冲突——每个组件在系统集成时通过 instances.fpp / topology 配置 分配各自的基址区间。C 实现中的命令处理Autocoder 从 XML 生成基类StressTest::TestCommandComponentBase开发者在其派生类 TestCommandImpl.hpp 中覆写命令处理器。注意处理器签名完全由字典参数类型推导而来void TEST_CMD_1_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, I32 arg1, StressTest::TestCommandComponentBase::SomeEnum arg2); void TEST_CMD_2_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, I32 arg1, F32 arg2);对应的实现 TestCommandImpl.cpp 中对枚举参数做了逐一映射并在处理完毕后通过cmdResponse_out上报Fw::CmdResponse::OK状态void TestCommand1Impl::TEST_CMD_1_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, I32 arg1, StressTest::TestCommandComponentBase::SomeEnum arg2) { const char *enum_str unknown; switch (arg2) { case MEMB1: enum_str MEMB1; break; case MEMB2: enum_str MEMB2; break; case MEMB3: enum_str MEMB3; break; default: enum_str INV; break; } printf(Got command args: %d %s\n, arg1, enum_str); this-cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK); }遥测通道列表基础类型与自定义序列化类型并存字典文档的遥测表包含两条通道Channel NameIDTypeDescriptionsomechan132 (0x84)U32A test channelAQuat133 (0x85)Ref::Gnc::QuaternionA test channel对应的 XML 定义在 TestComponentAi.xmltelemetry telemetry_base$comp_telemetry_base channel id100 namesomechan data_typeU32.../channel channel id101 nameAQuat data_typeRef::Gnc::Quaternion.../channel /telemetryID 同样由基址合成0x20 100 0x84 132、0x20 101 0x85 133。这里最值得关注的是AQuat 使用了自定义序列化类型。该类型定义于 QuaternionSerializableAi.xml命名空间Ref::Gnc由 4 个 F32 成员组成serializable namespaceRef::Gnc nameQuaternion members member nameQ1 typeF32/ member nameQ2 typeF32/ member nameQ3 typeF32/ member nameQ4 typeF32/ /members /serializable这证明 F´ 的字典体系不仅支持 U32、I32、F32、U8 等基础类型还能容纳任意自定义序列化类型——遥测、事件、参数均可复用同一类型定义。组件 XML 中通过import_serializable_type引入该类型见 TestComponentAi.xml。在 C 侧遥测写入通过基类生成的方法完成。实现 TestCommandImpl.cpp 展示了如何将四元数对象写入通道void TestCommand1Impl::genTlm(Ref::Gnc::Quaternion val) { this-tlmWrite_AQuat(val); }事件列表多参数与格式化字符串字典文档的事件表包含两条事件Event NameIDDescriptionArg1Arg2Arg3SomeEvent148 (0x94)A test eventI32F32U8AnotherEvent149 (0x95)A test eventI32F32Ref::Gnc::QuaternionXML 源定义在 TestComponentAi.xml。两条事件分别携带格式化字符串与严重级别event id100 nameSomeEvent severityACTIVITY_LO format_stringMy Event %d %f %c args arg namearg1 typeI32.../arg arg namearg2 typeF32.../arg arg namearg3 typeU8.../arg /args /event event id101 nameAnotherEvent severityWARNING_HI format_stringAnother Event %d %f %s args arg namearg1 typeI32.../arg arg namearg2 typeF32.../arg arg namearg3 typeRef::Gnc::Quaternion.../arg /args /eventID 合成0x30 100 0x94 148、0x30 101 0x95 149。另外注意字典中 AnotherEvent 的 arg3 注释沿用了 The U8 command argument源于 XML 中的注释实际类型却是四元数——这也是该测试刻意保留的压力测试痕迹提示读者应以类型列为准。事件发送在 TestCommandImpl.cpp 中实现调用 Autocoder 生成的log_ACTIVITY_LO_SomeEvent方法void TestCommand1Impl::sendEvent(I32 arg1, F32 arg2, U8 arg3) { printf(Sending event args %d, %f, %d\n, arg1, arg2, arg3); this-log_ACTIVITY_LO_SomeEvent(arg1, arg2, arg3); }事件的严重级别ACTIVITY_LO/WARNING_HI同样会写入字典供地面系统按级别过滤展示。字典背后的完整闭环从模型到测试组件字典并非孤立文档它与整个 stress 测试工程构成闭环。测试主程序 main.cpp 演示了字典中每类条目的实际运转命令注册与派发testImpl.regCommands()将 TEST_CMD_1 / TEST_CMD_2 注册到命令分发端口cmdSrc.test_TEST_CMD_1(10, 7)模拟地面发送命令。命令源的压力测试TestCommandSourceImpl.cpp 针对 TEST_CMD_1 依次发送正常参数、错误枚举值、多余参数、缺少参数四种序列化形态用来验证命令解码器对参数数量与取值边界的行为正常路径返回Fw::CmdResponse::OK异常路径应产生FORMAT_ERROR/VALIDATION_ERROR等状态。遥测与事件触发genTlm写入 AQuat 通道sendEvent触发 SomeEvent 事件分别由 TestTelemRecvImpl 与 TestLogRecvImpl 接收。构建与测试集成CMakeLists.txt 将全部 XML 模型与手写 C 源文件登记为 Autocoder 输入并通过register_fprime_module()/register_fprime_ut()纳入 F´ 构建体系同时把 ac.ini 复制到二进制目录供 Autocoder 运行时读取。实战指南如何读懂与核对一份组件字典结合本文实例核对任意 F´ 组件字典时可按以下步骤进行确认基址在组件的AcConstants.ini或.fpp配置中找到comp_opcode_base、comp_telemetry_base、comp_event_base、comp_parameter_base还原偏移用字典 ID 减去对应基址得到 XML 模型中的原始偏移如 0x110 − 0x10 0x100反向定位到模型文件的对应条目检查参数类型对自定义类型如Ref::Gnc::Quaternion继续追溯其序列化模型文件确认成员构成与字节序对照实现在组件派生类的头文件中查找*_cmdHandler、tlmWrite_*、log_*方法确认签名与字典完全一致验证测试覆盖在组件的test/或test/ut/目录中核对是否对每条命令、通道、事件都有对应的触发与断言。F´ 的 Autocoder 把模型即文档落到实处只要 XML 模型与基址配置正确组件字典、C 基类、序列化/反序列化代码便会同步生成保证地面系统与飞行软件始终基于同一份接口契约工作。赞分享嵌入式系统编程【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址https://gitcode.com/gh_mirrors/fpri/fprime点击查看免费下载相关推荐F´ 组件字典Component Dictionary深度解读以 comp_diff_namespace 测试组件的 TestCommand 为例F´ 组件字典Component Dictionary深度解读以 comp_diff_namespace 测试组件的 TestCommand 为例 导读嵌入式系统编程深入解读 F´ 组件字典Component Dictionary以 TestCommand 应力测试组件为例深入解读 F´ 组件字典Component Dictionary以 TestCommand 应力测试组件为例 导读 组件字典Component Dict嵌入式系统编程F´ 命令组件字典解析以 TestCommand 为例看命令定义、参数与测试验证F´ 命令组件字典解析以 TestCommand 为例看命令定义、参数与测试验证 本指南以 F´F Prime飞行软件与嵌入式系统框架仓库中 TestCo嵌入式系统编程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

如何给MHY_Scanner添加新游戏支持?扫码登录器平台接入实战教程 2026/9/25 5:45:37

如何给MHY_Scanner添加新游戏支持?扫码登录器平台接入实战教程

如何给MHY_Scanner添加新游戏支持?扫码登录器平台接入实战教程 【免费下载链接】MHY_Scanner MHY扫码登录器,支持从直播流抢码。 项目地址: https://gitcode.com/gh_mirrors/mh/MHY_Scanner MHY_Scanner 是一个免费的米哈游扫码登录器&#xff0c…

阅读更多 →
自建CRM系统实战:从Excel迁移到Docker部署的完整指南 2026/9/25 5:45:36

自建CRM系统实战:从Excel迁移到Docker部署的完整指南

DeskcommCRM 是我们自己搭的一套客户管理系统,从决定自建到正式上线用了差不多三周时间。写这篇东西的原因很简单:我在配置系统、拉团队使用、处理数据迁移的过程中,看到太多人在“免费CRM”和“自建系统”之间来回纠结,也收到过不…

阅读更多 →
Skill Recorder到底采集什么数据:按下Record前必须读透的隐私边界完整清单 2026/9/25 5:45:36

Skill Recorder到底采集什么数据:按下Record前必须读透的隐私边界完整清单

Skill Recorder到底采集什么数据:按下Record前必须读透的隐私边界完整清单 【免费下载链接】skill-recorder Desktop app that records your on-screen work session and uses the GitHub Copilot CLI to reconstruct it as an intent ordered steps, then builds …

阅读更多 →
如何用MindSpeed LLM YaRN扩展上下文:长文本训练技巧详解 2026/9/25 5:45:30

如何用MindSpeed LLM YaRN扩展上下文:长文本训练技巧详解

如何用MindSpeed LLM YaRN扩展上下文:长文本训练技巧详解 【免费下载链接】MindSpeed-LLM 昇腾LLM分布式训练框架 项目地址: https://gitcode.com/Ascend/MindSpeed-LLM MindSpeed-LLM 是昇腾 LLM 分布式训练框架,内置 YaRN 上下文扩展能力&#…

阅读更多 →
让失效的 Flash 网页重新播放:Ruffle 浏览器扩展实战指南 2026/9/25 5:45:30

让失效的 Flash 网页重新播放:Ruffle 浏览器扩展实战指南

让失效的 Flash 网页重新播放:Ruffle 浏览器扩展实战指南 【免费下载链接】ruffle A Flash Player emulator written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle 打开一个老网页,原本放游戏或视频的地方只剩一块灰底和&qu…

阅读更多 →
F´ 框架事件自动编码实战:从 XML 事件定义到 Event Dictionary 生成与收发解析 2026/9/25 5:45:24

F´ 框架事件自动编码实战:从 XML 事件定义到 Event Dictionary 生成与收发解析

嵌入式系统编程 【免费下载链接】fprime F - A flight software and embedded systems framework 项目地址: https://gitcode.com/gh_mirrors/fpri/fprime 点击查看 免费下载 导读 本文围绕 F(F Prime)飞行软件框架中**事件(Eve…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉