ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

F´ Fw::Log 与 Fw::LogText 端口详解:事件日志的序列化传输与文本输出

F´ Fw::Log 与 Fw::LogText 端口详解:事件日志的序列化传输与文本输出 嵌入式系统编程【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址https://gitcode.com/gh_mirrors/fpri/fprime点击查看免费下载Fw::Log与Fw::LogText是 F´F Prime飞行软件框架中用于传递 ISF Event事件的两个核心端口。前者以序列化二进制形式传递事件数据后者以可打印文本形式输出事件描述二者配合构成框架事件日志系统的两条数据通路。通过本文你将完整掌握这两个端口的参数语义、7 级事件严重度定义、底层序列化缓冲实现Fw::LogBuffer与Fw::LogStringArg以及它们与Svc::ActiveLogger、Fw::LogPacket等组件在实际拓扑中的衔接方式。1. 端口定位与适用场景在 F´ 的事件日志链路中事件由组件产生后需要通过端口发送给日志消费者典型如Svc::ActiveLogger。Fw::Log端口负责传递事件的结构化序列化表示便于数据记录、下传与后续解析Fw::LogText端口则负责传递事件的可读文本表示主要用于地面系统显示与开发调试。两个端口在 FPP 中的正式定义位于 Fw/Log/Log.fppmodule Fw { type LogBuffer type TextLogString Enum representing event severity enum LogSeverity { FATAL 1 A fatal non-recoverable event WARNING_HI 2 A serious but recoverable event WARNING_LO 3 A less serious but recoverable event COMMAND 4 An activity related to commanding ACTIVITY_HI 5 Important informational events ACTIVITY_LO 6 Less important informational events DIAGNOSTIC 7 Software diagnostic events } Event log port port Log( $id: FwEventIdType Log ID ref timeTag: Fw.Time Time Tag $severity: LogSeverity The severity argument ref args: LogBuffer Buffer containing serialized log entry ) Text event log port Use for development and debugging, turn off for flight port LogText( $id: FwEventIdType Log ID ref timeTag: Fw.Time Time Tag $severity: LogSeverity The severity argument ref $text: Fw.TextLogString Text of log message ) }架构示意文档 Fw/Log/docs/img/LogBDD.jpg 给出了Fw::Log与Fw::LogText端口的框图展示事件源、日志端口与日志接收方之间的连接关系。Fw::Log / Fw::LogText 端口框图值得注意从源码结构看LogText端口的 FPP 注释明确写着Use for development and debugging, turn off for flight——即文本日志端口是为开发与调试阶段设计的飞行部署时可关闭以节省资源对应配置宏FW_ENABLE_TEXT_LOGGING见下文第 4 节。2.Fw::Log端口参数语义Fw::Log端口用于传递事件的序列化形式共 4 个参数参数类型说明idFwEventIdType事件标识符Event identifiertimeTagFw.Time引用事件发生时的系统时间severityLogSeverity事件严重度枚举值含义见下表argsLogBuffer引用事件参数的序列化缓冲其中severity是Fw::LogSeverity枚举共 7 级严重度含义LOG_FATAL遇到使软件无法继续运行的条件LOG_WARNING_HI遇到严重故障但软件仍可继续运行LOG_WARNING_LO遇到故障但软件基本不受影响LOG_COMMAND发生了与命令处理相关的活动LOG_ACTIVITY_HI发生了重要的正常事件LOG_ACTIVITY_LO发生了不重要的正常事件是某个重要事件的一部分LOG_DIAGNOSTIC某一活动中通常无需查看的详细事件列表用于调试这 7 级严重度与 FPP 定义一一对应FATAL1、WARNING_HI2、WARNING_LO3、COMMAND4、ACTIVITY_HI5、ACTIVITY_LO6、DIAGNOSTIC7见 Fw/Log/Log.fpp。3.Fw::LogText端口参数语义Fw::LogText端口用于传递事件的可打印文本表示参数结构与Fw::Log几乎一致仅最后一个参数由序列化缓冲换成文本字符串参数类型说明idFwEventIdType事件标识符timeTagFw.Time引用事件发生时的系统时间severityLogSeverity事件严重度TEXT_LOG_*前缀枚举含义与上表相同textFw.TextLogString引用事件的文本版本文本端口的严重度枚举以TEXT_LOG_为前缀语义与LOG_*完全一致TEXT_LOG_FATAL、TEXT_LOG_WARNING_HI、TEXT_LOG_WARNING_LO、TEXT_LOG_COMMAND、TEXT_LOG_ACTIVITY_HI、TEXT_LOG_ACTIVITY_LO、TEXT_LOG_DIAGNOSTIC。文本形式面向人读地面终端、控制台序列化形式面向机读数据记录、遥测下传。4. 底层支撑类型LogBuffer 与 LogStringArg4.1Fw::LogBuffer序列化事件参数缓冲Fw::LogBuffer表示用于存储序列化参数值的缓冲是Fw::Log端口args参数的实际类型。从源码看它继承自Fw::SerializeBufferBaseFw/Log/LogBuffer.hpp内部持有一个固定大小的字节数组class LogBuffer : public SerializeBufferBase { enum { SERIALIZED_TYPE_ID FW_TYPEID_LOG_BUFF, SERIALIZED_SIZE FW_LOG_BUFFER_MAX_SIZE sizeof(FwBuffSizeType) }; ... U8 m_bufferData[FW_LOG_BUFFER_MAX_SIZE]; };其缓冲区容量由配置宏FW_LOG_BUFFER_MAX_SIZE决定定义于 config/FpConfig.hpp// Specifies the size of the buffer that contains the serialized log arguments. #ifndef FW_LOG_BUFFER_MAX_SIZE #define FW_LOG_BUFFER_MAX_SIZE (FW_COM_BUFFER_MAX_SIZE - sizeof(FwEventIdType) - sizeof(FwPacketDescriptorType)) #endif即默认情况下日志参数缓冲容量 通信包最大尺寸FW_COM_BUFFER_MAX_SIZE默认 128 字节减去事件 ID 与包描述符所占空间。LogBuffer提供拷贝构造、赋值运算符与getBuffCapacity()/getBuffAddr()等接口Fw/Log/LogBuffer.cpp并对序列化失败使用FW_ASSERT断言保证事件参数写入的健壮性。4.2Fw::LogStringArg事件字符串参数类型Fw::LogStringArg由日志 autocoder 在事件声明中出现字符串参数时自动生成使用。它同样继承自Fw::StringBaseFw/Log/LogString.hppclass LogStringArg : public Fw::StringBase { enum { SERIALIZED_TYPE_ID FW_TYPEID_LOG_STR, SERIALIZED_SIZE FW_LOG_STRING_MAX_SIZE sizeof(FwBuffSizeType) }; ... char m_buf[FW_LOG_STRING_MAX_SIZE]; };其内部字符数组大小由宏FW_LOG_STRING_MAX_SIZE决定默认值为100字符config/FpConfig.hpp// Specifies the maximum size of a string in a log event #ifndef FW_LOG_STRING_MAX_SIZE #define FW_LOG_STRING_MAX_SIZE 100 //! Max size of log string parameter type #endif该类重写了serialize/deserialize/toChar/getCapacity等接口支持带长度上限的序列化确保字符串参数在事件序列化流中的安全编码。4.3Fw::TextLogString文本日志字符串Fw::TextLogString是Fw::LogText端口text参数的实际类型Fw/Log/TextLogString.hpp同样继承自Fw::StringBase内部缓冲大小为FW_LOG_TEXT_BUFFER_SIZE默认256字节config/FpConfig.hpp// Define the size of the text log string buffer. Should be large enough for format string and arguments #ifndef FW_LOG_TEXT_BUFFER_SIZE #define FW_LOG_TEXT_BUFFER_SIZE 256 //! Max size of string for text log message #endif该配置的注释强调256 字节应足够容纳格式字符串及其参数这也解释了文本日志与二进制日志在容量配置上的差异。5. 与事件日志消费组件的衔接Fw::Log/Fw::LogText端口在框架中的典型消费端是Svc::ActiveLogger主动日志组件。从 Svc/ActiveLogger/ActiveLogger.fpp 的端口声明可见其衔接关系组件通过event port Log与text event port LogText发送事件提供sync input port LogRecv: Fw.Log接收Fw::Log端口传来的序列化事件数据内部定义了FilterSeverity枚举用于按严重度过滤日志并提供了设置过滤级别、转储过滤状态等命令如severity activity low、severity warning high等与LogSeverity的层级体系相对应。此外Fw::LogPacketFw/Log/LogPacket.hpp将id、timeTag、logBuffer封装为一个可序列化/反序列化的包用于把事件日志打包成通信包下传Fw::AmpcsEvrLogPacketFw/Log/AmpcsEvrLogPacket.hpp则提供 CCSDS AMPCS EVR 格式的事件记录包。这些类型共同支撑了事件日志从组件内产生 → 端口传递 → 消费组件处理 → 打包下传的完整链路。6. 事件日志链路的工作流程小结综合端口定义与仓库实现一条事件日志的典型流转路径可概括为组件内产生事件autocoder 生成事件发送代码构造事件 ID、时间戳、严重度与序列化参数序列化形式通过Fw::Log端口args: Fw::LogBuffer发送文本形式若启用文本日志通过Fw::LogText端口text: Fw.TextLogString发送Svc::ActiveLogger等消费组件通过LogRecv输入端口接收依据FilterSeverity过滤后分发或记录需要下传时由Fw::LogPacket/Fw::AmpcsEvrLogPacket等打包为通信包经遥测或下行链路送抵地面系统。文本日志能力可通过 config/FpConfig.hpp 中的FW_ENABLE_TEXT_LOGGING宏控制默认开启// enables text logging of events as well as data logging. Adds a second logging port for text output. #ifndef FW_ENABLE_TEXT_LOGGING #define FW_ENABLE_TEXT_LOGGING 1 //! Indicates whether text logging is turned on #endif该宏与FW_SERIALIZABLE_TO_STRINGserializable 的toString()方法开关见 config/FpConfig.hpp存在依赖关系若开启文本日志toString()方法必须保持开启因为文本日志的生成依赖序列化类型的字符串化能力。这也印证了文档中文本端口用于开发与调试、飞行时关闭的设计意图——关闭FW_ENABLE_TEXT_LOGGING可以省去文本输出端口及其字符串常量节省代码空间。7. 变更记录文档中记录了本设计文件的变更历史日期说明9/3/2015Fw::LogBuffer初始版本9/16/2015Fw::LogStringArg初始版本对应文件 Fw/Log/docs/sdd.md 中的 Change Log 小节。赞分享嵌入式系统编程【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址https://gitcode.com/gh_mirrors/fpri/fprime点击查看免费下载相关推荐F´ (F Prime) 事件日志端口深度解析Fw::Log 与 Fw::LogText 端口的设计、序列化与使用指南F´ F Prime 事件日志端口深度解析Fw::Log 与 Fw::LogText 端口的设计、序列化与使用指南 导读 本文聚焦 F´F Prime飞行嵌入式系统编程F´ 事件日志端口深度解析Fw::Log 与 Fw::LogText 的设计与使用指南F´ 事件日志端口深度解析Fw::Log 与 Fw::LogText 的设计与使用指南 事件Event是 F´F Prime飞行软件与嵌入式系统中面向嵌入式系统编程F´ 命令体系详解Fw::Cmd / Fw::CmdResponse / Fw::CmdReg 端口设计、序列化与配置指南F´ 命令体系详解Fw::Cmd / Fw::CmdResponse / Fw::CmdReg 端口设计、序列化与配置指南 本篇技术指南以 F´F Prim嵌入式系统编程上一篇Hermes Agent 网络优化指南让 API 调用更快、实时推送不卡顿下一篇Kibana EUI 浮层组件无障碍命名规范EuiModal、EuiFlyout 与 EuiPopover 的 aria-labelledby 正确接线创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表