当前位置: 首页 > news >正文

kamailio-ACC模块介绍【kamailio6.0. X】

Acc 模块

作者
Jiri Kuthan
iptel.org
jiri@iptel.org

Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro

Ramona-Elena Modroiu
rosdev.ro
ramona@rosdev.ro

编辑
Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro

Sven Knoblich
1&1 Internet AG
sven.knoblich@1und1.de

版权
© 2002, 2003 FhG FOKUS
© 2004, 2006 Voice Sistem SRL
© 2011 1&1 Internet AG


目录

  1. 管理员指南
    1. 概述
      1.1 通用示例
    2. 额外计费
      2.1 概述
      2.2 定义与语法
      2.3 工作原理
    3. 多呼叫腿计费
      3.1 概述
      3.2 配置
      3.3 记录的数据
    4. 呼叫数据记录生成
      4.1 概述
      4.2 CDR 额外信息
      4.2.1 定义与语法
      4.3 多呼叫腿的 CDR
      4.3.1 概述
      4.3.2 配置
      4.3.2.1 螺旋代理示例
      4.3.3 记录的数据
    5. 依赖
      5.1 Kamailio 模块
      5.2 外部库或应用程序
    6. 参数
      6.1 early_media (整数)
      6.2 failed_transaction_flag (整数)
      6.3 failed_filter (字符串)
      6.4 report_ack (整数)
      6.5 report_cancels (整数)
      6.6 detect_direction (整数)
      6.7 acc_prepare_flag (整数)
      6.8 acc_prepare_always (整数)
      6.9 acc_extra_nullable (整数)
      6.10 multi_leg_info (字符串)
      6.11 log_flag (整数)
      6.12 log_missed_flag (整数)
      6.13 log_level (整数)
      6.14 log_facility (字符串)
      6.15 log_extra (字符串)
      6.16 db_flag (整数)
      6.17 db_missed_flag (整数)
      6.18 db_table_acc (字符串)
      6.19 db_table_missed_calls (字符串)
      6.20 db_url (字符串)
      6.21 acc_method_column (字符串)
      6.22 acc_from_tag_column (字符串)
      6.23 acc_to_tag_column (字符串)
      6.24 acc_callid_column (字符串)
      6.25 acc_sip_code_column (字符串)
      6.26 acc_sip_reason_column (字符串)
      6.27 acc_time_column (字符串)
      6.28 db_extra (字符串)
      6.29 db_insert_mode (整数)
      6.30 cdr_enable (整数)
      6.31 cdr_skip (字符串)
      6.32 cdr_expired_dlg_enable (整数)
      6.33 cdr_start_on_confirmed (整数)
      6.34 cdr_facility (整数)
      6.35 cdr_extra (字符串)
      6.36 cdr_extra_nullable (整数)
      6.37 cdr_start_id (字符串)
      6.38 cdr_end_id (字符串)
      6.39 cdr_duration_id (字符串)
      6.40 cdr_log_enable (整数)
      6.41 cdrs_table (字符串)
      6.42 time_mode (整数)
      6.43 time_attr (字符串)
      6.44 time_exten (字符串)
      6.45 time_format (字符串)
      6.46 reason_from_hf (整数)
      6.47 clone_msg (整数)
      6.48 cdr_on_failed (整数)
      6.49 acc_extra_size (整数)
      6.50 cdr_extra_size (整数)
    7. 函数
      7.1 acc_log_request(comment)
      7.2 acc_db_request(comment, table)
      7.3 acc_request(comment, table)
  2. 常见问题

1. 概述

ACC 模块用于将事务信息记录到不同的后端,如 syslog 和 SQL。通过单独的模块 acc_radius 可以启用对 RADIUS 的支持。

acc_diameter 模块中提供了对 Diameter 协议的早期支持,但未与当前 Diameter 协议保持同步。如果需要 Diameter 支持,请使用 ims_charging 模块。

要为事务计费并选择使用哪一组后端,脚本编写者只需设置一些标志(参见模块参数部分的标志定义)。如果为特定后端设置了计费标志,ACC 模块将在事务完成时报告。模块的典型用法不需要特定的脚本命令——功能通过事务处理隐式绑定。脚本编写者只需使用适当的 setflag 标记事务以进行计费。即使如此,模块仍允许脚本编写者通过某些脚本函数在特殊情况下强制计费。

默认情况下,计费模块会记录事务的一组固定属性。如果要通过添加更多信息来自定义计费,请参阅下一章关于额外计费的内容。

固定的最小计费信息包括:

  • 请求方法名称
  • From 头的 TAG 参数
  • To 头的 TAG 参数
  • Call-Id
  • 最终回复的 3 位状态码
  • 最终回复的原因短语
  • 事务完成时的时间戳

如果请求中不存在某个值,则记录为空字符串。

注意:

  • 单个 INVITE 可能会生成多个计费报告——这是由于 SIP 的分叉特性。
  • 所有与计费相关的标志都需要在请求处理路由中设置——只有“missed-call”标志可以从其他类型的路由中切换。
  • 如果 UA 在通话中途失败,代理将永远不会发现。通常,更好的做法是从终端设备(如 PSTN 网关)进行计费,因为它最了解呼叫状态(包括媒体状态和 PSTN 状态)。然而,基于 CDR 的日志记录可以选择记录来自过期对话的现有信息(cdr_extra 中的 dlg_vars)。请参阅 cdr_expired_dlg_enable 参数。

SQL 后端支持已编译到模块中。

1.1 通用示例
loadmodule "modules/acc/acc.so"
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)if (uri=~"sip:+40") { /* 呼叫罗马尼亚 */if (!proxy_authorize("sip_domain.net", "subscriber")) {proxy_challenge("sip_domain.net", "0");exit;}if (method=="INVITE" && !check_from()) {log("from!=digest\n");sl_send_reply("403","Forbidden");}setflag(1); /* 设置计费标志 */t_relay();  /* 进入有状态模式 */
};

2. 额外计费

2.1 概述

除了静态的默认信息外,ACC 模块还允许动态选择要记录的额外信息。这允许您记录任何伪变量(AVP、请求的部分等)。

2.2 定义与语法

通过 xxx_extra 参数选择额外信息,指定要记录的附加信息的名称。这些信息通过伪变量定义,可能包括头、AVP 值或其他消息或系统值。参数语法为:

xxx_extra = extra_definition (';'extra_definition)*
extra_definition = log_name '=' pseudo_variable

支持的伪变量列表可在 Kamailio 文档 中找到。

2.3 工作原理

某些伪变量可能返回多个值(如头或 AVP)。在这种情况下,返回的值将以逗号分隔的格式嵌入单个字符串中。


3. 多呼叫腿计费

3.1 概述

由于转发操作,SIP 呼叫可能具有多个腿。例如,用户 A 呼叫用户 B,用户 B 将呼叫转发给用户 C。只有一个 SIP 呼叫,但有两条腿(A 到 B 和 B 到 C)。记录呼叫腿对于正确计费是必要的。

3.2 配置

通过一组 AVP 为每个呼叫腿存储一组值。脚本编写者必须确保正确插入这些 AVP。

3.3 记录的数据

对于每个呼叫,所有 AVP 集的值将被记录。记录方式取决于数据后端:

  • syslog:所有腿集将作为一个记录字符串添加。
  • 数据库:每个腿集将单独记录。
  • RADIUS:所有腿集将添加到同一 RADIUS 计费消息中。

4. 呼叫数据记录生成

4.1 概述

除了基于事务的日志记录外,还可以直接从 Kamailio 生成和记录呼叫数据记录(CDR)。CDR 记录依赖于对话框模块。

4.2 CDR 额外信息

类似于事务额外信息,CDR 额外信息通过 cdr_extra 参数定义。

4.3 多呼叫腿的 CDR

与普通计费不同,CDR 日志记录使用对话框而不是事务来记录数据。


5. 依赖

5.1 Kamailio 模块

该模块依赖于以下模块:

  • tm:事务管理器
  • 数据库模块:如果使用 SQL 支持
  • rr:记录路由,如果启用了 detect_direction 参数
  • dialog:对话框,如果启用了 cdr_enable 参数
5.2 外部库或应用程序

无。


6. 参数

6.1 early_media (整数)

是否应记录早期媒体(任何带有正文的临时回复)?
默认值为 0(否)。

6.2 failed_transaction_flag (整数)

事务失败时(SIP 状态码 >= 300)是否应记录事务的标志。
默认值为未设置(无标志)。

6.3 failed_filter (字符串)

失败响应代码的字符串(300 到 999),用逗号分隔。即使设置了 failed_transaction_flag,如果响应代码在列表中,失败事务也不会被记录。
默认值为未设置(无过滤)。

6.4 report_ack (整数)

是否尝试记录端到端的 ACK?
默认值为 0(否)。

6.5 report_cancels (整数)

是否显式记录 CANCEL 事务?
默认值为 0(否)。

6.6 detect_direction (整数)

控制顺序请求的方向检测。
默认值为 0(禁用)。

6.7 acc_prepare_flag (整数)

事务标志,指示是否可以在稍后计费。
默认值为未设置(无标志)。

6.8 acc_prepare_always (整数)

是否始终准备所有请求以标记事务稍后计费。
默认值为未设置。

6.9 acc_extra_nullable (整数)

如果设置为 1,数据库额外字段在未定义或为 $null 时设置为 NULL。
默认值为 0。

6.10 multi_leg_info (字符串)

定义用于每条呼叫腿计费的 AVP 集。
默认值为 0(禁用)。

6.11 log_flag (整数)

请求标志,用于通过 syslog 记录事务。
默认值为未设置(无标志)。

6.12 log_missed_flag (整数)

请求标志,用于通过 syslog 记录未接呼叫。
默认值为未设置(无标志)。

6.13 log_level (整数)

记录计费消息的日志级别。
默认值为 1(L_NOTICE)。

6.14 log_facility (字符串)

记录计费消息的日志设施。
默认值为 LOG_DAEMON。

6.15 log_extra (字符串)

要记录的额外值。
默认值为 NULL。

6.16 db_flag (整数)

请求标志,用于通过数据库记录事务。
默认值为未设置(无标志)。

6.17 db_missed_flag (整数)

请求标志,用于通过数据库记录未接呼叫。
默认值为未设置(无标志)。

6.18 db_table_acc (字符串)

成功呼叫的计费表名。
默认值为 “acc”。

6.19 db_table_missed_calls (字符串)

未接呼叫的计费表名。
默认值为 “missed_calls”。

6.20 db_url (字符串)

SQL 地址。
默认值为 NULL(SQL 禁用)。

6.21 acc_method_column (字符串)

存储请求方法名称的列名。
默认值为 “method”。

6.22 acc_from_tag_column (字符串)

存储 From 头 TAG 参数的列名。
默认值为 “from_tag”。

6.23 acc_to_tag_column (字符串)

存储 To 头 TAG 参数的列名。
默认值为 “to_tag”。

6.24 acc_callid_column (字符串)

存储 Callid 值的列名。
默认值为 “callid”。

6.25 acc_sip_code_column (字符串)

存储最终回复状态码的列名。
默认值为 “sip_code”。

6.26 acc_sip_reason_column (字符串)

存储最终回复原因短语的列名。
默认值为 “sip_reason”。

6.27 acc_time_column (字符串)

存储事务完成时间戳的列名。
默认值为 “time”。

6.28 db_extra (字符串)

要记录到数据库的额外值。
默认值为 NULL。

6.29 db_insert_mode (整数)

如果设置为 1,使用 INSERT DELAYED 添加记录。
默认值为 0。

6.30 cdr_enable (整数)

启用 CDR 报告。
默认值为 0(禁用)。

6.31 cdr_skip (字符串)

跳过具有此 dlg_var 设置的对话框的 CDR 生成。
默认值为 NULL。

6.32 cdr_expired_dlg_enable (整数)

是否在对话框过期时启用 CDR 日志记录?
默认值为 0(禁用)。

6.33 cdr_start_on_confirmed (整数)

是否从对话框确认时开始计时?
默认值为 0(从对话框创建时开始)。

6.34 cdr_facility (整数)

CDR 消息的日志设施。
默认值为 LOG_DAEMON。

6.35 cdr_extra (字符串)

定义自定义 CDR 字段的伪变量集。
默认值为 NULL。

6.36 cdr_extra_nullable (整数)

自定义 CDR 字段是否可以为 NULL?
默认值为 0。

6.37 cdr_start_id (字符串)

修改用于存储开始时间的 ID。
默认值为 “start_time”。

6.38 cdr_end_id (字符串)

修改用于存储结束时间的 ID。
默认值为 “end_time”。

6.39 cdr_duration_id (字符串)

修改用于存储持续时间的 ID。
默认值为 “duration”。

6.40 cdr_log_enable (整数)

控制是否将 CDR 记录写入 syslog。
默认值为 1(启用)。

6.41 cdrs_table (字符串)

存储对话框 CDR 的数据库表名。
默认值为 “”(无数据库存储)。

6.42 time_mode (整数)

存储与事件时间相关的额外值。
默认值为 0。

6.43 time_attr (字符串)

存储事件时间的 syslog 属性或数据库列名。
默认值为未设置。

6.44 time_exten (字符串)

存储事件时间的扩展值的 syslog 属性或数据库列名。
默认值为未设置。

6.45 time_format (字符串)

指定时间格式。
默认值为 “%Y-%m-%d %H:%M:%S”。

6.46 reason_from_hf (整数)

从何处获取 sip_reason。
默认值为 0(从状态行获取)。

6.47 clone_msg (整数)

是否克隆请求结构以避免并发访问。
默认值为 1。

6.48 cdr_on_failed (整数)

是否存储失败对话框的 CDR?
默认值为 1。

6.49 acc_extra_size (整数)

设置计费记录中额外属性的最大数量。
默认值为 64。

6.50 cdr_extra_size (整数)

设置 CDR 中额外属性的最大数量。
默认值为 64。


7. 函数

7.1 acc_log_request(comment)

报告请求,例如用于报告未接呼叫。
参数:

  • comment:要附加的注释,可以包含伪变量。
7.2 acc_db_request(comment, table)

将请求报告发送到数据库。
参数:

  • comment:要附加的注释,可以包含伪变量。
  • table:要使用的数据库表。
7.3 acc_request(comment, table)

将计费记录写入 LOG 和 DATABASE 后端。
参数:

  • comment:用于生成 SIP 响应代码和文本字段的注释。
  • table:要使用的数据库表。

2. 常见问题

2.1 旧的 log_fmt 参数发生了什么?

该参数已被废弃,由额外计费功能取代。

2.2 旧的 multi_leg_enabled 参数发生了什么?

该参数已被 multi_leg_info 参数取代。

2.3 旧的 src_leg_avp_id 和 dst_leg_avp_id 参数发生了什么?

这些参数已被 multi_leg_info 参数取代。

2.4 在哪里可以找到更多关于 Kamailio 的信息?

请访问 Kamailio 官方网站。

2.5 在哪里可以发布关于此模块的问题?

请查看我们的邮件列表:

  • 用户邮件列表:[sr-users@lists.kamailio.org](https://lists.kamailio.org/mailman3/postorius

相关文章:

kamailio-ACC模块介绍【kamailio6.0. X】

Acc 模块 作者 Jiri Kuthan iptel.org jiriiptel.org Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Ramona-Elena Modroiu rosdev.ro ramonarosdev.ro 编辑 Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Sven Knoblich 1&1 Internet …...

数据库对象

数据库对象 数据库对象是构成数据库结构的基本单位,它们定义了数据库存储的数据类型、数据的组织方式以及数据之间的关系。在数据库中,对象可以包括表,视图,索引,触发器,存储过程,函数等多种类…...

EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析

EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析 0 预览一 该文件功能宏定义数据结构打印宏三 h文件翻译四 c文件翻译该文档修改记录:总结0 预览 一 该文件功能 该文件包含了一些全局定义和宏,用于 IgH EtherCAT 主站(EtherCAT Master)的实现。包括了一些超时设定、宏定义…...

2025多目标优化创新路径汇总

多目标优化是当下非常热门且有前景的方向!作为AI领域的核心技术之一,其专注于解决多个相互冲突的目标的协同优化问题,核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中,几乎处处都有它的身影。 但随着需求场景的…...

15JavaWeb——Maven高级篇

Maven高级 Web开发讲解完毕之后,我们再来学习Maven高级。其实在前面的课程当中,我们已经学习了Maven。 我们讲到 Maven 是一款构建和管理 Java 项目的工具。经过前面 10 多天 web 开发的学习,相信大家对于 Maven 这款工具的基本使用应该没什…...

使用Ollama本地化部署DeepSeek

1、Ollama 简介 Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装、运行和管理。它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和企业快速搭建私有化 AI 服务。 Ollama …...

蓝桥杯刷题DAY1:前缀和

所谓刷题,讲究的就是细心 帕鲁服务器崩坏【算法赛】 “那个帕鲁我已经观察你很久了,我对你是有些失望的,进了这个营地,不是把事情做好就可以的,你需要有体系化思考的能力。” 《幻兽帕鲁》火遍全网,成为…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册

🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯项目基本介绍 🚦项…...

MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译

感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…...

微服务入门(go)

微服务入门(go) 和单体服务对比:里面的服务仅仅用于某个特定的业务 一、领域驱动设计(DDD) 基本概念 领域和子域 领域:有范围的界限(边界) 子域:划分的小范围 核心域…...

Baklib揭示内容中台实施最佳实践的策略与实战经验

内容概要 在当前数字化转型的浪潮中,内容中台的概念日益受到关注。它不再仅仅是一个内容管理系统,而是企业提升运营效率与灵活应对市场变化的重要支撑平台。内容中台的实施离不开最佳实践的指导,这些实践为企业在建设高效内容中台时提供了宝…...

C++11新特性之lambda表达式

1.介绍 C11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。 2.lambda表达式用法 lambda表达式的基本用法为: [捕获列表](参数列表)->返回类型 { 函数体 …...

洛谷 P10289 [GESP样题 八级] 小杨的旅游 C++ 完整题解

一、题目链接 P10289 [GESP样题 八级] 小杨的旅游 - 洛谷 二、题目大意 n个节点之间有n - 1条边,其中k个节点是传送门,任意两个传送门之间可以 以0单位地时间相互到达。问从u到v至少需要多少时间? 三、解题思路 输入不必多讲。 cin >> …...

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI,是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手,感觉收获还蛮多的,今天来分享下开发过程中的一些经验~ 为啥要做这个…...

JWT入门

一、初识JWT:新时代的身份认证方案 在分布式系统成为主流的今天,传统的Session认证方式逐渐显露出局限性。JWT(JSON Web Token)作为现代Web开发的认证新标准,凭借其无状态、跨域友好和安全性等特性,正在成为…...

Python - Quantstats量化投资策略绩效统计包 - 详解

使用Quantstats包做量化投资绩效统计的时候因为Pandas、Quantstats版本不匹配踩了一些坑;另外,Quantstats中的绩效统计指标非常全面,因此详细记录一下BUG修复方法、使用说明以及部分指标的内涵示意。 一、Quantstats安装及版本匹配问题 可以…...

智慧园区管理系统推动企业智能运维与资源优化的全新路径分析

内容概要 在当今快速发展的商业环境中,园区管理的数字化转型显得尤为重要。在这个背景下,快鲸智慧园区管理系统应运而生,成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术,以智能化的方式解决了传统管理模式…...

【数据结构-字典树】力扣14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs [“dog”,“racecar…...

《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(31):HTTPS和TLS/SSL

《深入浅出HTTPS​​​​​​​​​​》读书笔记(31):HTTPS和TLS/SSL TLS/SSL协议和应用层协议无关,它只是加密应用层协议(比如HTTP)并传递给下层的TCP。 HTTP和TLS/SSL协议组合在一起就是HTTPS, HTTPS等…...

Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别

Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句(不常用…...

L30.【LeetCode笔记】设计链表

1.题目 707. 设计链表 - 力扣(LeetCode) 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向…...

java日志框架详解-Log4j2

一、概述 Apache Log4j 2 (Log4j – Apache Log4j 2)是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并参考了Logback中优秀的设计,同时修复了Logback架构中的一些问题。被誉为是目前最优秀的Java日志框架&#x…...

C++中vector追加vector

在C中,如果你想将一个vector追加到另一个vector的后面,可以使用std::vector的成员函数insert或者std::copy,或者简单地使用std::vector的push_back方法逐个元素添加。这里我将展示几种常用的方法: 方法1:使用insert方…...

加一(66)

66. 加一 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:vector<int> plusOne(vector<int>& digits) {bool plus_one true;for (int i digits.size() - 1; i > 0; --i) {if (plus_one) {int tmp digits[i] 1;if …...

远程连接-简化登录

vscode通过ssh连接远程服务器免密登录&#xff08;图文&#xff09;_vscode ssh-CSDN博客...

canvas的基本用法

canvas canvas元素简介 1.是个container元素<canvas width100 height100></canvas>&#xff0c;有开闭标签 2.有且只有width和height两个attribute&#xff0c;不需要写单位 canvas的基本使用 const canvasEl document.getElementById(canvas01) const ctx …...

Tailwind CSS - Tailwind CSS 引入(安装、初始化、配置、引入、构建、使用 Tailwind CSS)

一、Tailwind CSS 概述 Tailwind CSS 是一个功能优先的 CSS 框架&#xff0c;它提供了大量的实用类&#xff08;utility classes&#xff09;&#xff0c;允许开发者通过组合这些类来快速构建用户界面 Tailwind CSS 与传统的 CSS 框架不同&#xff08;例如&#xff0c;Bootstr…...

鸿蒙开发黑科技“stack叠层”替代customdialog

前一篇提到的问题,本篇博文提出了一个解决方案: arkui-x LongPressGesture触发customdialog踩坑记录-CSDN博客 前一段时间遇到的这个问题,通过排除法观察,锁定为customdialog组件有bug,极为容易挂死。不论如何调整使用方法,都还是会触发挂死。 反馈给arkui团队,说是在…...

FreeRTOS从入门到精通 第十五章(事件标志组)

参考教程&#xff1a;【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 &#xff08;1&#xff09;事件标志位是一个“位”&#xff0c;用来表示事件是否发生。 &#xff08;2&#xff09;事件标志组是一组事件标志位的集合&#x…...

智慧园区管理平台实现智能整合提升企业运营模式与管理效率

内容概要 在当今数字化的背景下&#xff0c;智慧园区管理平台正逐渐成为企业提升运营效率和管理模式的重要工具。这个平台汇聚了多种先进技术&#xff0c;旨在通过智能整合各类资源与信息&#xff0c;帮助企业实现全面的管理创新。 智慧园区管理平台不仅仅是一个数据处理工具…...