发布时间:2026/7/23 8:26:38
FlexRay控制器寄存器实战:同步帧、消息缓冲区与FIFO配置详解 1. FlexRay控制器寄存器从芯片手册到实战配置的深度解析如果你正在开发基于FlexRay的车载网络节点或者负责维护一个已有的FlexRay ECU电子控制单元那么你肯定和芯片手册里那些密密麻麻的寄存器打过交道。手册上的描述往往冰冷而抽象比如“ESID1寄存器在偶通信周期的NIT期间更新”但实际配置时我们更关心的是我到底该怎么配配错了会怎样怎么验证配对了这篇文章我就结合自己多年在汽车电子底层驱动开发中的踩坑经验带你深入TI德州仪器等厂商FlexRay通信控制器的几个核心寄存器组把手册上的位域描述翻译成你能直接写进代码的配置逻辑和避坑指南。我们将聚焦于同步帧管理、消息缓冲区Message Buffer的“房地产划分”以及FIFO先进先出队列的过滤机制这些都是构建一个稳定、高效FlexRay节点的基石。2. 同步帧管理网络心跳的捕获与发送在FlexRay网络中时间同步是命脉。所有节点都依赖于周期性的同步帧Sync Frame来对齐各自的本地时钟形成统一的全局时间。控制器中的Even/Odd Sync ID寄存器就是节点“聆听”和“宣告”网络心跳的耳朵与嘴巴。2.1 同步帧ID寄存器ESID/OSID工作原理Even Sync ID寄存器ESID1-ESID15和Odd Sync ID寄存器OSID1-OSID15各有15个分别用于偶通信周期和奇通信周期。它们的功能可以概括为自动排序的记录本。当节点作为非同步节点即只接收不发送同步帧时这些寄存器会在每个通信周期的网络空闲时间NIT自动更新。控制器会把在本周期内从总线上收到的所有同步帧的帧IDFrame ID抓取下来按照从小到大的顺序依次存入ESID1/OSID1存最小的ID、ESID2/OSID2……直到ESID15/OSID15。每个寄存器不仅存储帧ID低10位还通过RXEA/RXEB对于ESID或RXOA/RXOB对于OSID这两个标志位记录这个同步帧是从通道A还是通道B接收到的。这是一个非常巧妙的设计它让主机CPU无需实时监控总线只需在需要时例如诊断或网络管理任务读取这些寄存器就能知道当前网络中有哪些节点在发送同步帧以及它们通过哪个通道发送。当节点自身被配置为同步节点通过设置SUCC1.TXSY时事情变得更有趣。此时无论节点是否从总线收到其他同步帧它自己准备发送的同步帧的帧ID都会固定占据ESID1或OSID1的位置。这个ID来源于你为消息缓冲区0Message Buffer 0所配置的帧ID。这意味着ESID1/OSID1寄存器的内容是“网络听到的最小同步帧ID”与“本节点要发送的同步帧ID”的逻辑或结果。理解这一点对调试至关重要如果你发现ESID1的值与你配置的MB0的帧ID不符那说明总线上存在一个帧ID更小的同步帧节点。实操心得同步状态诊断不要仅仅依赖协议栈提供的抽象状态。在调试网络同步问题时直接读取ESID/OSID寄存器群是最底层、最可靠的手段。你可以写一个简单的诊断函数循环读取ESID1-ESID15和OSID1-OSID15观察其EID/OID字段和RXEA/RXEB等标志位。如果发现某个周期内所有寄存器的值都是0那很可能意味着节点没有成功接收到任何同步帧网络同步尚未建立。如果只有ESID1/OSID1有值且RXEA/RXEB为0而其他寄存器为0则表明本节点是冷启动主导者发送同步帧且尚未收到其他节点的同步帧。2.2 配置同步帧消息缓冲区同步帧的发送依赖于消息缓冲区0以及可选的缓冲区1。这里涉及到MRC寄存器后文详述中的一个关键位SPLMSync Frame Payload Multiplex。SPLM 0这是最常见的配置。消息缓冲区0用于发送同步帧并且通道A和通道B发送的载荷数据Payload Data完全相同。帧ID、载荷长度等配置都只针对MB0。这种模式适用于大多数双通道冗余需求确保两个通道上的同步帧内容一致。SPLM 1此模式下消息缓冲区0和消息缓冲区1都被锁定用于同步帧发送。MB0专用于通道AMB1专用于通道B。这意味着你可以为两个通道配置不同的载荷数据。这常用于一些高级调试或特殊应用场景比如在其中一个通道上携带额外的网络管理信息。注意事项通道过滤配置手册中特别强调当SPLM1时必须相应地配置MB0和MB1的通道过滤器。通常你需要将MB0的通道过滤设置为“仅通道A”将MB1的设置为“仅通道B”。如果配置错误例如都设置为双通道控制器行为将是未定义的可能导致发送失败或总线错误。3. 消息缓冲区配置规划你的通信“内存地产”FlexRay控制器的消息RAM是稀缺资源通常只有几十到几百个缓冲区。MRCMessage RAM Configuration寄存器就是这块内存的“城市规划图”它定义了三个关键边界FDB、FFB和LCB。3.1 关键参数解析与计算理解这三个参数的关系是正确配置FlexRay节点的核心。你可以把它们想象成对一块连续内存消息缓冲区0到N的两刀切分第一刀FDB(First Dynamic Buffer)定义第一个动态缓冲区的编号。作用FDB之前的缓冲区即MB0 到 MBFDB-1被划定为静态段专用缓冲区。这些缓冲区与特定的静态时槽Slot绑定用于发送或接收周期性的、确定性的消息。配置值0x00~0x7F。如果设置为0表示没有纯粹的静态缓冲区但MB0可能因同步帧被保留。如果设置为≥0x80表示不配置任何动态缓冲区。第二刀FFB(First buffer of FIFO)定义FIFO的第一个缓冲区的编号。作用从FFB开始到LCB结束的缓冲区区域被划定为FIFO缓冲区池。所有通过FIFO过滤器的动态段消息都会按顺序存入这个池子中的空闲缓冲区。配置值0x00~0x7F。如果设置为0表示所有消息缓冲区都分配给FIFO这通常不合理会挤占静态缓冲区。如果设置为≥0x80表示不配置FIFO。第三刀LCB(Last configured buffer)定义最后一个已配置缓冲区的编号。作用定义了当前使用的消息缓冲区总数为LCB 1。它必须大于等于FDB和FFB。配置值0x00~0x7F。如果设置为≥0x80则表示没有配置任何消息缓冲区异常状态。3.2 配置实例与内存布局假设我们有一个支持64个消息缓冲区的控制器需要规划如下通信需求10个静态段发送缓冲区包括用于同步帧的MB0。15个静态段接收缓冲区。20个动态段缓冲区用于事件触发的消息。剩余的缓冲区64 - 10 - 15 - 20 19个用于FIFO接收池。那么我们的配置计算如下静态缓冲区总数 发送(10) 接收(15) 25个。它们占据MB0到MB24。因此FDB 25(0x19)。这意味着MB0~MB24是静态缓冲区MB25是第一个动态缓冲区。动态缓冲区占用20个即MB25到MB44。FIFO缓冲区从MB45开始到最后一个缓冲区MB63。因此FFB 45(0x2D)。最后一个缓冲区是MB63。因此LCB 63(0x3F)。配置完成后内存布局如下表所示缓冲区范围类型说明MB0 ~ MB24静态段缓冲区与特定静态时槽绑定。MB0通常为同步帧保留。MB25 ~ MB44动态段缓冲区用于动态段的消息发送与接收非FIFO。MB45 ~ MB63FIFO缓冲区池用于存储通过过滤器的动态段消息以队列方式管理。对应的寄存器配置代码片段伪代码可能如下所示// 假设MRC寄存器地址为0xFFF8_0300 uint32 *pMRC (uint32*)0xFFF80300; // 配置值LCB63, FFB45, FDB25 // 注意位域LCB[23:16], FFB[15:8], FDB[7:0] uint32 mrc_value (63 16) | (45 8) | 25; // 在DEFAULT_CONFIG或CONFIG状态下写入MRC寄存器 *pMRC mrc_value;踩坑实录配置的有效性检查手册中明确警告通信控制器不会检查错误的配置这意味着如果你配置出FDB LCB或FFB LCB或FFB FDB等矛盾情况控制器可能会以无法预测的方式运行导致消息丢失、总线错误甚至节点挂死。因此在写入MRC寄存器之前必须在软件层进行严格的逻辑校验。一个健壮的驱动代码应该包含类似下面的检查if ((FDB LCB) || (FFB LCB) || (FFB FDB)) { // 报告配置错误并进入安全状态如HALT return CONFIG_ERROR; } if (LCB 128) { // 假设最大缓冲区数为128 return CONFIG_ERROR; }这是底层开发中“防御性编程”的典型体现能避免很多难以追踪的随机性故障。4. FIFO管理高效处理事件型消息动态段用于传输事件型消息而FIFO是处理这些消息的高效机制。它允许节点使用一组缓冲区来接收多个不同帧ID的消息而不是为每个可能的帧ID固定分配一个缓冲区。其核心是过滤机制由FRFFIFO Rejection Filter和FRFMFIFO Rejection Filter Mask寄存器控制。4.1 FIFO过滤逻辑详解过滤过程可以理解为一个比特位的匹配游戏。对于总线上收到的每一帧动态段消息控制器会提取其关键属性通道、帧ID、周期计数器并生成一个过滤关键字。然后将这个关键字与FRF寄存器中设定的过滤值进行比较但比较时受到FRFM寄存器中掩码位的影响。工作流程提取属性从接收到的帧中提取ChannelA/B、Frame ID11位、Cycle Counter7位信息。组合关键字将这些属性组合成一个比特串具体顺序取决于硬件实现通常帧ID在高位。掩码过滤使用FRFM寄存器。如果FRFM的某一位为1则意味着在比较时忽略FRF寄存器中对应位的值。只有FRFM位为0的位才需要严格匹配。决定动作如果经过掩码过滤后接收帧的关键字与FRF寄存器的值匹配则该帧被拒绝不存入FIFO。反之如果不匹配则接受并存入FIFO。关键字段解析RNF(Reject Null Frames): 置1则拒绝所有空帧无载荷的帧进入FIFO。通常建议开启以节省缓冲区空间。RSS(Reject in Static Segment): 置1则FIFO只用于动态段静态段消息即使匹配也不会进入FIFO。强烈建议置1因为静态段消息本应有其专属缓冲区。CYF(Cycle Counter Filter): 7位周期计数器过滤器。这是一个“周期集”过滤器。例如设置CYF 0x01可能意味着只在周期计数器最低位为1的周期即奇数周期应用帧ID和通道过滤。这可用于实现基于周期的消息过滤。FID(Frame ID Filter): 11位帧ID过滤器。这是过滤的核心。CH(Channel Filter): 2位通道过滤器。00双通道01仅B通道10仅A通道11无接收全部拒绝。MFID(Mask Frame ID Filter): 11位帧ID过滤掩码。对应FID的每一位。0该位需匹配1该位忽略。4.2 过滤配置实例假设我们想实现这样一个过滤策略只接收通道A上帧ID为0x101和0x103的消息到FIFO。帧ID 0x101 b0001 0000 0001帧ID 0x103 b0001 0000 0011观察这两个ID差异仅在最低位bit00x101的bit0是10x103的bit0是1等等0x101是10x103是3二进制0011所以bit0都是1bit1不同0x101的bit1是00x103的bit1是1。更准确地说它们在高9位bit10到bit2完全相同b0001 0000 00只有低2位bit1, bit0不同。策略我们可以设置FID匹配其公共的高位部分然后用MFID掩码掉低2位使其不参与比较。设置FID 0x101(b0001 0000 0001)。设置MFID使得bit1和bit0被忽略。即MFID的bit1和bit0置为1其余位置0。所以MFID 0x0003。设置CH 2(仅通道A)。设置RSS 1(拒绝静态段)。设置RNF 1(拒绝空帧)。CYF根据需求设置如果不需要周期过滤可设为0x00或0x7F取决于实现通常0x00表示全周期。这样任何来自通道A、帧ID高9位为b0001 0000 00即0x100~0x103范围的动态段消息都会被接受进入FIFO。而帧ID为0x100或0x102的消息如果存在也会被接收这取决于你是否需要它们。如果你只想接收0x101和0x103那么这个策略是合理的因为它覆盖了这两个ID。4.3 FIFO状态监控与水位控制配置好过滤规则后我们需要监控FIFO的运行状态这主要通过FSRFIFO Status Register和FCLFIFO Critical Level寄存器完成。RFFL(Receive FIFO Fill Level):最重要的状态位之一。它实时指示FIFO中已存储但尚未被主机读取的消息数量。主机软件必须定期例如在每次FIFO中断中读取FIFO数据并将消息从缓冲区中释放以防止RFFL持续增长。RFNE(Receive FIFO Not Empty): 当FIFO中有新消息时置1。通常用于触发中断通知主机有数据待处理。RFO(Receive FIFO Overrun):严重错误标志。当FIFO已满RFFL达到最大值即所有FIFO缓冲区都已占用而又有新消息需要存入时会发生溢出。此时控制器会覆盖最旧的一条消息并置位RFO标志。这意味着数据丢失。在调试阶段必须监控此位。RFCL(Receive FIFO Critical Level): 当RFFL达到或超过FCL.CL寄存器中设置的临界值时此位置1。这用于预警。主机可以在RFCL中断中加快处理速度以避免最终的溢出(RFO)。配置建议 将FCL.CL设置为一个小于FIFO总缓冲区数例如LCB - FFB 1的安全阈值比如总深度的70%。例如FIFO有20个缓冲区可设置CL 14。这样当FIFO填充到14条消息时就会触发RFCL中断给你留下6个缓冲区的处理时间窗避免溢出。5. 消息处理状态与调试MHDS、MHDF等状态寄存器实战当通信出现异常时MHDSMessage Handler Status和MHDFMessage Handler Constraints Flags寄存器是你的第一诊断工具。5.1 消息处理状态寄存器MHDS关键标志MBU(Message Buffer Updated): 指示最后一个被更新的消息缓冲区编号。当收到新消息时对应的NDATNew Data标志会置位同时MBU会记录是哪个缓冲区。这在调试接收问题时非常有用可以快速定位是哪个缓冲区的配置如帧ID过滤导致了消息被接收或拒绝。MBT(Message Buffer Transmitted): 指示最后一个成功发送的消息缓冲区编号。结合TXRQTransmission Request寄存器可以验证发送流程是否正确。例如你置位了MB10的TXRQ发送成功后应在MBT中看到10并且MB10的TXRQ位如果是单次发送模式应被自动清除。FMBD/FMB/MFMB(Faulty Message Buffer Detected):硬件错误指示。如果消息RAM或缓冲区访问出现奇偶校验错误FMBD会置1同时FMB会指示出错的缓冲区编号。如果在此期间检测到另一个缓冲区也出错MFMB会置1。一旦看到这些标志通常意味着严重的硬件或内存访问时序问题需要彻底检查PCB布线、电源完整性或软件访问冲突。PIBF/POBF/PMR/PTBF1/PTBF2: 分别指示输入缓冲区、输出缓冲区、消息RAM、瞬态缓冲区A/B的奇偶校验错误。这些错误也会置位EIR.PERR错误中断寄存器中的奇偶错误位。5.2 消息处理约束标志寄存器MHDF——性能与配置的“照妖镜”MHDF寄存器中的标志位揭示了消息处理器Message Handler是否因为过载或配置不当而未能完成任务。这些都是性能瓶颈或配置错误的直接证据。SNUA/SNUB(Status Not Updated): 消息处理器因过载未能更新通道A/B上某个消息缓冲区的状态MBS。这通常发生在消息流量过大或消息缓冲区数量过多导致消息处理器在一个静态或动态时槽内无法完成所有缓冲区的扫描和处理。解决方案是减少配置的缓冲区总数、优化消息ID分布、或者检查总线负载是否超过控制器处理能力。FNFA/FNFB(Find Sequence Not Finished): 消息处理器因过载未能为通道A/B完成一次“查找序列”即在消息RAM中扫描匹配的接收缓冲区。原因与SNUx类似都是处理能力不足。TBFA/TBFB(Transient Buffer Access Failure): 对瞬态缓冲区A/B的访问未能在规定时间内完成。这可能是因为VBUS时钟控制器内核时钟与FlexRay总线时钟的比率设置不当导致消息处理器没有足够的时钟周期来完成数据传输。必须严格按照芯片手册推荐的时钟比率进行配置。TNSA/TNSB(Transmission Not Started): 在配置的时槽动作点消息处理器未能启动通道A/B上的预定传输。这是非常严重的错误意味着该发送的消息没有发出去。除了上述过载原因还可能是因为对应的消息缓冲区没有正确配置为发送缓冲区或者TXRQ标志没有在正确的时间点被置位。WAHP(Write Attempt to Header Partition): 尝试写入消息RAM的头部分区。这几乎总是由于软件bug导致的消息缓冲区配置错误例如错误计算了数据指针DP使得写入操作的目标地址超出了数据区指向了头部区。需要立即检查配置消息缓冲区的代码逻辑。调试技巧如何利用MHDF在节点初始化并进入NORMAL_ACTIVE状态后不要仅仅检查通信是否“通”了。应该定期例如在诊断任务中读取MHDF寄存器。如果发现任何位被置1即使通信看似正常也意味着系统处于“亚健康”状态在极端负载下可能出现故障。特别是SNUx和FNFx它们是系统负载裕度的“晴雨表”。我个人的习惯是在产品测试阶段长时间运行高负载通信测试并监控MHDF寄存器确保所有标志位始终为0。6. 传输请求与新数据标志TXRQ与NDAT的批量操作TXRQ1-4和NDAT1-4寄存器以位图形式集中管理着所有128个消息缓冲区的传输请求和新数据标志。TXRQ(Transmission Request): 这是一个只读寄存器反映了每个消息缓冲区内部的TXR标志状态。对于发送缓冲区主机通过写入消息缓冲区命令寄存器来置位其内部的TXR标志从而请求发送。而TXRQ寄存器让主机可以一次性批量读取所有缓冲区的发送就绪状态对于监控发送队列很有用。NDAT(New Data): 同样是一个只读的位图寄存器。当某个接收缓冲区成功匹配并接收到一帧数据后其内部的ND标志会被置位。NDAT寄存器让主机可以快速扫描哪些缓冲区有新数据到达而不必逐个查询128个缓冲区的状态字。注意对于FIFO中的缓冲区只有接收到有效数据帧时ND才会置位对于非FIFO的静态/动态接收缓冲区接收到空帧也会置位ND。软件设计模式 高效的驱动软件通常会利用NDAT寄存器来实现“中断轮询”混合机制。在FIFO非空中断RFNE或接收中断中并不直接读取FIFO而是先读取NDAT寄存器找出具体是哪些非FIFO缓冲区收到了数据优先处理它们。然后再去处理FIFO中的数据。这样可以确保高优先级的、有专属缓冲区的消息得到及时响应。7. 核心配置流程与避坑总结最后我将一个典型的FlexRay控制器消息缓冲区初始化与配置流程梳理如下并附上关键注意事项进入配置状态确保控制器处于DEFAULT_CONFIG或CONFIG状态。这是配置MRC、FRF、FRFM、FCL等寄存器的唯一时机。规划缓冲区布局根据应用需求计算FDB、FFB、LCB的值并进行有效性校验。配置MRC寄存器写入计算好的FDB、FFB、LCB值。如果节点是同步节点根据需求配置SPLM位。配置FIFO过滤器根据动态段消息的接收需求设置FRF和FRFM寄存器通常开启RNF和RSS。合理设置FCL临界水位。逐个配置消息缓冲区静态缓冲区配置帧ID、通道、载荷长度、发送/接收方向、缓冲区类型静态等。特别注意同步帧缓冲区MB0/MB1的帧ID必须与节点ID等相关参数匹配。动态缓冲区非FIFO配置帧ID、通道、载荷长度、接收过滤条件等。FIFO缓冲区对于分配给FIFO的缓冲区FFB到LCB只需配置其数据区长度PLC和数据指针DP。其接收过滤完全由FRF/FRFM全局控制。这是很多新手容易犯错的地方试图为FIFO缓冲区单独配置帧ID是无效的。退出配置状态进入STARTUP/NORMAL配置完成后启动通信控制器开始时钟同步和通信。运行时处理发送更新发送缓冲区的数据区然后置位其传输请求通过命令寄存器非直接写TXRQ。接收非FIFO轮询或通过中断响应NDAT标志位读取对应缓冲区的数据然后清除其ND标志。接收FIFO响应RFNE中断从FIFO读取数据并注意监控RFFL和RFCL防止溢出。持续监控在诊断任务中定期读取MHDF、FSR等状态寄存器确保系统健康运行。FlexRay寄存器的配置就像在微观世界里进行城市规划每一个位域都影响着整个网络的通信确定性与可靠性。理解其背后的设计意图而不仅仅是记住地址和位宽才能让你在遇到棘手的通信问题时能够快速定位到寄存器层面找到真正的解决方案。希望这些从实战中总结出的细节和坑点能帮助你更从容地驾驭FlexRay网络开发。

相关新闻

2026/7/23 8:26:38

深入解析HWAG中断机制与N2HET协同:高精度角度跟踪的硬件实现

1. 项目概述:为什么需要硬件角度生成器? 在汽车发动机控制、工业电机驱动这类对实时性和精度要求极高的领域,系统需要知道一个旋转轴(比如曲轴或电机转子)在 此时此刻 的精确角度位置。这个位置信息直接决定了何时点…

2026/7/23 8:21:38

视频监控与实景三维融合技术解析与应用

1. 视频监控与实景三维融合的技术背景 在传统的安防监控领域,视频监控系统往往以二维平面图像的形式呈现,监控人员需要同时关注数十甚至上百个监控画面。这种工作模式存在几个明显的痛点:首先,监控人员难以快速定位事件发生的具体…

2026/7/23 8:21:38

[特殊字符] 龍魂 · 39关键词全量论文总表

好的,老大。全面搜刮——39个关键词,多路并行。 继续深挖——剩余关键词并行搜索: 继续搜刮剩余关键词: 最后补刀——桌面和论文治理目录: 最后补两处: 全量搜刮完毕。以下是 39关键字 全系统论文总表&…

2026/7/23 10:01:42

C++异常处理与RAII实战:避免程序崩溃与资源泄漏

1. 项目概述:当异常成为程序“刺客”在C的世界里,异常处理机制本应是守护程序稳定运行的“安全气囊”。然而,如果使用不当,这个气囊不仅可能无法弹出,甚至会直接引爆程序,导致进程无声无息地终止&#xff0…

2026/7/23 10:01:42

中学[我心道]导引术(Daoyin Technique)初稿

导引术(Daoyin Technique)初稿 在田间融入自然,双手举天,脚踏大地,仰天张口望日(月)玄门吐纳(Taoist Breath Regulation),低头闭嘴冥想腹部呼吸(Abdominal breathing). Immerse yourself in nature amid the fields, raise your hands toward the sky, stand firm on the earth…

2026/7/23 10:01:42

2026年AI平民化时代:开源大模型技术选型与本地部署实战指南

如果你是一名开发者,最近可能已经感受到了AI领域的暗流涌动。从去年开始,国内开源大模型如雨后春笋般涌现,而最新的评测数据显示,中国顶尖开源模型在多项关键指标上已经逼近甚至在某些细分领域超越了美国同类产品。 这不仅仅是技…

2026/7/23 10:01:42

免费AI配音工具!TTSMaker 文字转语音,一键生成

TTSMaker是一款在线AI文字配音工具,输入文字就能生成自然流畅的语音。支持50多种语言和300多种语音风格,可调整多种情绪,语音速度,音量,音调,还可以插入停顿标签,让生成的声音更自然&#xff0c…

2026/7/23 10:01:42

C++/QT项目实战:基于Visual Studio与Doxygen的自动化类图生成方案

1. 项目概述:为什么我们需要从代码生成类图? 在维护一个稍具规模的C项目,尤其是像QT这样集成了大量自有类和复杂信号槽机制的框架项目时,你是否经常有这样的困惑:面对动辄几十上百个类文件,它们之间的继承、…

2026/7/23 9:56:41

现代C: 程序如何与操作系统交互?

在上一讲中我曾提到,你可以将操作系统内核暴露的“系统调用”也作为 API 的一种具体表现形式,因为调用者可以通过这些接口来使用内核提供的某种能力,但是却无需了解它们的内部实现细节。在之前的课程中,我也多次提到过有关系统调用…

2026/7/22 9:29:13

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/23 0:01:10

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/22 21:00:12

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…