static,const小结

(1)static的作用:“共享”+“专用”

   c语言中:修饰函数里的局部变量-->共享

                  修饰全局变量和全局函数-->专用

   C++中:修饰成员变量-->共享

                修饰成员函数-->专用

(2)const:“只读”

    c语言中:常与*搭配,const函数

    c++中:可修饰成员变量、成员函数、对象

/** Valid 20M channels of 2.4G band */ static const struct clm_channel_comb valid_channels_2g_20m[] = { { 1, 14, 1}, /* 1 - 14 with step of 1 */ }; /** Set of 20M 2.4G valid channels' set */ static const struct clm_channel_comb_set valid_channel_2g_20m_set = { 1, valid_channels_2g_20m }; /** Valid 40M channels of 2.4G band */ static const struct clm_channel_comb valid_channels_2g_40m[] = { { 3, 11, 1}, /* 3 - 11 with step of 1 */ }; /** Set of 40M 2.4G valid channels' set */ static const struct clm_channel_comb_set valid_channel_2g_40m_set = { 1, valid_channels_2g_40m }; /** Valid 20M channels of 5G band */ static const struct clm_channel_comb valid_channels_5g_20m[] = { { 36, 64, 4}, /* 36 - 64 with step of 4 */ {100, 144, 4}, /* 100 - 144 with step of 4 */ {149, 177, 4}, /* 149 - 177 with step of 4 */ }; /** Set of 20M 5G valid channels' set */ static const struct clm_channel_comb_set valid_channel_5g_20m_set = { 3, valid_channels_5g_20m }; /** Valid 40M channels of 5G band */ static const struct clm_channel_comb valid_channels_5g_40m[] = { { 38, 62, 8}, /* 38 - 62 with step of 8 */ {102, 142, 8}, /* 102 - 142 with step of 8 */ {151, 175, 8}, /* 151 - 175 with step of 8 */ }; /** Set of 40M 5G valid channels' set */ static const struct clm_channel_comb_set valid_channel_5g_40m_set = { 3, valid_channels_5g_40m }; /** Valid 80M channels of 5G band */ static const struct clm_channel_comb valid_channels_5g_80m[] = { { 42, 58, 16}, /* 42 - 58 with step of 16 */ {106, 138, 16}, /* 106 - 138 with step of 16 */ {155, 171, 16}, /* 155 - 171 with step of 16 */ }; /** Set of 80M 5G valid channels' set */ static const struct clm_channel_comb_set valid_channel_5g_80m_set = { 3, valid_channels_5g_80m }; /** Valid 160M channels of 5G band */ static const struct clm_channel_comb valid_channels_5g_160m[] = { { 50, 50, 32}, /* 50 - 50 */ {114, 114, 32}, /* 114 - 114 */ {163, 163, 32}, /* 163 - 163 */ }; /** Set of 160M 5G valid channels' set */ static const struct clm_channel_comb_set valid_channel_5g_160m_set = { 3, valid_channels_5g_160m }; /** Valid 20M channels of 6G band */ static const struct clm_channel_comb valid_channels_6g_20m[] = { { 2, 2, 4}, /* 2 - 2 */ { 1, 233, 4}, /* 1 - 233 with step of 4 */ }; /** Set of 20M 6G valid channels' set */ static const struct clm_channel_comb_set valid_channel_6g_20m_set = { 2, valid_channels_6g_20m }; /** Valid 40M channels of 6G band */ static const struct clm_channel_comb valid_channels_6g_40m[] = { { 3, 227, 8}, /* 3 - 227 with step of 8 */ }; /** Set of 40M 6G valid channels' set */ static const struct clm_channel_comb_set valid_channel_6g_40m_set = { 1, valid_channels_6g_40m }; /** Valid 80M channels of 6G band */ static const struct clm_channel_comb valid_channels_6g_80m[] = { { 7, 215, 16}, /* 7 - 215 with step of 16 */ }; /** Set of 80M 6G valid channels' set */ static const struct clm_channel_comb_set valid_channel_6g_80m_set = { 1, valid_channels_6g_80m }; /** Valid 160M channels of 6G band */ static const struct clm_channel_comb valid_channels_6g_160m[] = { { 15, 207, 32}, /* 15 - 207 with step of 32 */ }; /** Set of 160M 6G valid channels' set */ static const struct clm_channel_comb_set valid_channel_6g_160m_set = { 1, valid_channels_6g_160m }; /** Valid 320M channels of 6G band */ static const struct clm_channel_comb valid_channels_6g_320m[] = { { 31, 191, 32}, /* 31 - 191 with step of 32 */ }; /** Set of 320M 6G valid channels' set */ static const struct clm_channel_comb_set valid_channel_6g_320m_set = { 1, valid_channels_6g_320m }; 什么意思
最新发布
10-15
你贴出的这段 C 代码是 **无线网络驱动或 CLM(Closed Loop Management)系统中定义合法信道组合** 的关键数据结构,用于限制 Wi-Fi 设备在不同频段(2.4G、5G、6G)和带宽(20MHz、40MHz、80MHz 等)下可以使用的物理信道。 --- ## 🎯 总体含义 这段代码的作用是: > 定义了各个频段(2.4GHz / 5GHz / 6GHz)上,不同带宽(20M/40M/80M/160M/320M)所允许使用的 **信道范围与步长**,并组织成“信道集合”,供后续功率控制、合规性检查等模块使用。 --- 我们来逐部分解析。 --- ### 🔹 基础结构体说明 #### 1. `struct clm_channel_comb` 表示一个连续的信道区间: ```c struct clm_channel_comb { uint8 start; // 起始信道号 uint8 end; // 结束信道号 uint8 step; // 步长(每隔几个信道算一个有效中心频点) }; ``` 例如: - `{36, 64, 4}` 表示从 36 到 64,每间隔 4 个信道为一个有效 20MHz 频点:即 36, 40, 44, 48, 52, 56, 60, 64 → 共 8 个信道。 #### 2. `struct clm_channel_comb_set` 表示一组 `clm_channel_comb`: ```c struct clm_channel_comb_set { uint8 count; // 包含多少个 clm_channel_comb const struct clm_channel_comb *comb; // 指向数组 }; ``` --- ## ✅ 分频段详解 --- ### 🟩 一、2.4GHz 频段(2G) #### 1. 20MHz 带宽 ```c static const struct clm_channel_comb valid_channels_2g_20m[] = { { 1, 14, 1}, /* 1 - 14 with step of 1 */ }; ``` - 起始信道:1 - 结束信道:14 - 步长:1 → 所有整数信道都可用 - 实际可用信道:1, 2, 3, ..., 14(共14个) - 注意:不同国家对 2.4G 信道支持不同(如美国只到11),但这里定义的是最大可能范围。 ✅ 对应集合: ```c valid_channel_2g_20m_set = {1, valid_channels_2g_20m}; // 1组区间 ``` --- #### 2. 40MHz 带宽 ```c { 3, 11, 1} → 中心信道为:3+2=5, 4+2=6, ..., 11+2=13? ``` 实际上对于 40MHz: - 每两个相邻 20MHz 合并成一个 40MHz。 - 中心信道 = (主信道 + 次信道) 的中间值。 - 所以主信道从 3 开始(左20M=1~5,右20M=5~9?不准确) 更准确地说: - 要形成 40MHz 信道,需要两个连续 20MHz 信道。 - 因此合法的起始主信道是:**3, 4, 5, ..., 11** - 主信道=3 → 占用 1~7(中心≈5) - 主信道=4 → 占用 2~8(中心≈6) - ... - 主信道=11 → 占用 9~15(但15不存在!所以实际受限) 👉 所以此处 `{3, 11, 1}` 表示:**合法的 40MHz 主信道范围是 3 到 11** ✅ 集合: ```c valid_channel_2g_40m_set = {1, ...} ``` --- ### 🟨 二、5GHz 频段(5G) #### 1. 20MHz ```c { 36, 64, 4}, → 36, 40, 44, 48, 52, 56, 60, 64 (UNII-1) {100, 144, 4}, → 100, 104, ..., 144 (UNII-2A/B) {149, 177, 4}, → 149, 153, ..., 177 (UNII-3) ``` 这是全球主要的 5GHz 信道分布。 ✅ 总共 3 组区间,`count=3` --- #### 2. 40MHz ```c { 38, 62, 8} → 中心信道:38, 46, 54, 62 ``` 解释: - 步长=8 → 相邻两个 20MHz 组合成一个 40MHz - 38 是第一个能作为中心的合理信道(覆盖 36+40) - 下一个是 38+8=46(覆盖 44+48),依此类推 同理: - 102 → 覆盖 100+104 - 151 → 覆盖 149+153 ✅ 所以这些是合法的 **40MHz 中心信道** --- #### 3. 80MHz ```c { 42, 58, 16} → 42, 58 ``` - 每 16 步:因为 80MHz = 4×20MHz - 42:覆盖 36~48(中心≈42) - 58:覆盖 52~64 - 同理适用于其他子带 --- #### 4. 160MHz ```c { 50, 50, 32} → 只有一个:50 ``` - 50 覆盖 36~64(整个 UNII-1) - 114:覆盖 100~128 - 163:覆盖 149~177 ⚠️ 注意:很多设备不支持 160MHz,且 DFS 限制多。 --- ### 🔵 三、6GHz 频段(Wi-Fi 6E / Wi-Fi 7) #### 特点: - 新开放频谱(5925–7125 MHz) - 信道编号方式不同(见 IEEE 802.11ax/ay) - 信道号对应频率公式:`freq = 5945 + 5*ch` (单位 MHz) #### 示例: - ch=1 → 5950MHz - ch=33 → 6110MHz - ch=233 → 7110MHz --- ##### 20MHz: ```c { 2, 2, 4}, // 特殊用途? { 1, 233, 4}, // 基本涵盖所有非保留信道(步长4 → 实际每5MHz一个?) ``` → 支持大量窄信道组合 ##### 40MHz: ```c { 3, 227, 8} // 步长8 → 每8个编号跳一次,对应两个20MHz合并 ``` ##### 80MHz: ```c { 7, 215, 16} // 步长16 → 四个20MHz合并 ``` ##### 160MHz: ```c { 15, 207, 32} // 步长32 → 八个20MHz合并 ``` ##### 320MHz: ```c { 31, 191, 32} // 极宽信道(Wi-Fi 7 特性),需支持 320MHz 带宽 ``` --- ## 📌 小结:这些数据的意义 | 目的 | 说明 | |------|------| | ✅ 合规性控制 | 防止设备在非法信道发射信号(如中国禁用 12~14) | | ✅ 功率表索引 | 不同 band/bw/channel 使用不同的功率限制表 | | ✅ 自适应扫描 | 扫描时只遍历合法信道 | | ✅ 动态频宽切换 | 根据当前环境选择最大可用带宽(如 80MHz 是否可用) | --- ## 💡 举个例子:当你连接 “5G-80MHz” 网络时 1. 系统查询 `valid_channels_5g_80m[]` → 得到可用中心信道:42, 58, 106, 138, 155, 171 2. 扫描发现信道 155 信号好、干扰少 3. 设置 radio 工作在 ch=155,带宽 80MHz 4. 查找对应的 `tx_power_limit_t` 表(比如 `tx_limit_table_5g_80m_ext`) 5. 加载该信道下的各速率功率限制 --- ## ✅ 总结一句话: > 这段代码定义了 Wi-Fi 芯片在全球各频段、各种带宽下 **哪些信道是合法可用的**,是实现 **动态信道选择、功率控制、法规合规(FCC/CE/TELEC)** 的基础配置数据。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值